langflow 为了使v1/run/advanced API端点中的输入组件生效,必须同时传递显示名称和ID,

ss2ws0br  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(61)

Bug描述

我正在尝试使用/v1/run/advanced API端点,因为我知道它可以传递多个输入到不同的输入组件。我已经仔细研究了InputValueRequest的模式,发现我可以传递组件的ID或显示名称。所以我选择仅使用显示名称作为键来获取输入,以便清晰和简单。
然而,输入消息根本没有被获取到流程中进行处理。我尝试使用组件的ID而不是显示名称,但问题仍然存在。
经过深入研究,我认为找到了问题所在。
在Graph类的_run函数的底层,每个顶点都会检查它是否匹配其中一个输入组件,然后用输入值更新该顶点。问题在于第326行的条件表明,如果顶点的ID或显示名称不在input_components中,那么该顶点就不会用输入值更新。
这意味着我们必须将input_components(即输入有效负载中的组件字段)与每个组件的ID和显示名称一起传递,以便更新该组件,这很繁琐。

https://github.com/langflow-ai/langflow/blame/57c72d3ea4ebdd036ed4405dbde05bb447f2d9de/src/backend/base/langflow/graph/graph/base.py#L324-L328

复现步骤

  1. 创建一个具有不同显示名称的两个TextInput组件的流程
  2. 使用v1/run/advance API端点
  3. 在有效负载中设置输入值和组件的显示名称,如下所示:

  1. 调用API

预期行为

流程应该获取带有指定组件的输入值。允许我们仅使用组件的显示名称。
上述条件应该验证两者(ID和显示名称)都不出现在input_components中。

需要帮助的人

@anovazzi1 谢谢

操作系统

Windows 11

Langflow版本

1.0.7

Python版本

3.10

t98cgbkg

t98cgbkg1#

你好@duongvotran!我在这里帮助你解决关于Langflow软件的任何错误、问题或贡献。让我们一起解决你面临的问题。
要解决Langflow版本1.0.7中/v1/run/advanced API端点在使用组件的显示名称或ID时不处理输入消息的问题,你需要确保experimental_run_flow函数中的inputs参数结构正确。
inputs参数应该是一个包含InputValueRequest对象的列表,每个对象都包含componentsinput_value字段。以下是有效载荷应该如何构建的示例:

POST /run/advanced/{flow_id}
x-api-key: YOUR_API_KEY
Payload:
{
    "inputs": [
        {"components": ["component1_id", "Component Name"], "input_value": "value1"},
        {"components": ["component3_id", "Component Name"], "input_value": "value2"}
    ],
    "outputs": ["Component Name", "component_id"],
    "tweaks": {"parameter_name": "value", "Component Name": {"parameter_name": "value"}, "component_id": {"parameter_name": "value"}},
    "stream": false
}

确保components数组中的每个条目都包含组件ID和显示名称。这应该解决了API端点无法正确处理输入消息的问题。
此外,在src/backend/base/langflow/api/v1/schemas.py文件中的InputValueRequest类显示components字段是可选的,可以包含组件ID、显示名称或两者。以下是模式中的示例:

class InputValueRequest(BaseModel):
    components: Optional[List[str]] = []
    input_value: Optional[str] = None
    type: Optional[InputType] = Field(
        "any",
        description="Defines on which components the input value should be applied. 'any' applies to all input components.",
    )

    model_config = ConfigDict(
        json_schema_extra={
            "examples": [
                {
                    "components": ["components_id", "Component Name"],
                    "input_value": "input_value",
                },
                {"components": ["Component Name"], "input_value": "input_value"},
                {"input_value": "input_value"},
                {"type": "chat", "input_value": "input_value"},
                {"type": "json", "input_value": '{"key": "value"}'},
            ]
        },
        extra="forbid",
    )

确保你的有效载荷遵循此格式,以确保API 1(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/api/v1/endpoints.py)2(https://github.com/langflow-ai/langflow/blob/main/src/backend/base/langflow/api/v1/endpoints.py)3(https://github.com/logspace-ai/langflow/blob/dev/src/backend/base/langflow/api/v1/endpoints.py)4(https://github.com/logspace-ai/langflow/blob/dev/src/backend/base/langflow/api/v1/schemas.py)能够正确处理。

  • 要继续与@dosu交谈,请提及@dosu。*

相关问题