langflow 流程在任何"原型"组件中都不可见,

gj3fmq9x  于 4个月前  发布在  其他
关注(0)|答案(6)|浏览(54)

Bug描述

我试图将我的一个流程作为工具在另一个流程中运行,但是当我尝试导入组件时,组件的选项为空。我尝试了所有方法(运行流程、流程作为工具、子流程等),但在所有这些方法中,选择流程名称的选项都为空。

重现步骤

  1. 创建一个基本流程并保存
  2. 创建一个新的流程
  3. 向要导入的其他流程中添加任何原型组件
  4. 点击选项
  5. 选项为空

预期行为

  1. 创建一个基本流程并保存
  2. 创建一个新的流程
  3. 向要导入的其他流程中添加任何原型组件
  4. 点击选项
  5. 选项应该显示之前创建的流程

需要帮助的人

@anovazzi1@italojohnny@ogabrielluiz

操作系统

Macos Sonoma 14.5

Langflow版本

1.0.9

Python版本

  • 3.12
  • 3.11
  • 3.10
k75qkfdt

k75qkfdt1#

嘿,@burakcbdn!👋 我来帮你解决这个问题。我是一个可以协助你处理bug、问题以及在等待人类协助时成为贡献者的机器人。
你在“原型”组件中为选择流程名称而遇到空选项的问题可能是由于 get_flow_names 方法没有正确填充导致的。这个方法依赖于 list_flows 方法来检索可用的流程。如果 list_flows 没有返回任何流程数据,选项将保持为空。
以下是相关方法的简要概述:

  1. get_flow_names 方法:
def get_flow_names(self) -> List[str]:
    flow_datas = self.list_flows()
    return [flow_data.data["name"] for flow_data in flow_datas]
  1. list_flows 方法:
def list_flows(*, user_id: Optional[str] = None) -> List[Data]:
    if not user_id:
        raise ValueError("Session is invalid")
    try:
        with session_scope() as session:
            flows = session.exec(
                select(Flow).where(Flow.user_id == user_id).where(Flow.is_component == False)  # noqa
            ).all()

            flows_data = [flow.to_data() for flow in flows]
            return flows_data
    except Exception as e:
        raise ValueError(f"Error listing flows: {e}")
  1. update_build_config 方法:
def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
    logger.debug(f"Updating build config with field value {field_value} and field name {field_name}")
    if field_name == "flow_name":
        build_config["flow_name"]["options"] = self.get_flow_names()
    # Clean up the build config
    for key in list(build_config.keys()):
        if key not in self.field_order + ["code", "_type", "get_final_results_only"]:
            del build_config[key]
    if field_value is not None and field_name == "flow_name":
        try:
            flow_data = self.get_flow(field_value)
            if not flow_data:
                raise ValueError(f"Flow {field_value} not found.")
            graph = Graph.from_payload(flow_data.data["data"])
            # Get all inputs from the graph
            inputs = get_flow_inputs(graph)
            # Add inputs to the build config
            build_config = self.add_inputs_to_build_config(inputs, build_config)
        except Exception as e:
            logger.error(f"Error getting flow {field_value}: {str(e)}")

    return build_config

要解决这个问题,请确保:

  • list_flows 方法正确实现并返回可用的流程。
  • update_build_config 方法正确地使用流程名称更新 build_config

如果 list_flows 没有返回任何数据, flow_name 选项将为空。请确保在你的环境中正确定义和访问流程 1(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/SubFlow.py)2(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/FlowTool.py)3(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/experimental/SubFlow.py)4(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/deactivated/SubFlow.py)。

  • 要继续与 Dosu 交流,请提及 @dosu。
35g0bw71

35g0bw712#

感谢您@dosu。我检查了编辑组件代码,它打印了我创建的流程,并将它们存储在列表中,但它们在UI上不可见。这可能是因为"update_build_config"方法没有被调用。

yquaqz18

yquaqz183#

问题似乎是 update_build_config 方法没有被调用,这是在UI中填充流程名称所必需的。要解决这个问题,你需要确保在组件生命周期的适当时机调用 update_build_config
以下是与 update_build_config 方法相关的相关代码片段:

def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
    if field_name == "flow_name":
        build_config["flow_name"]["options"] = self.get_flow_names()

    return build_config

为了确保 update_build_config 被调用,你可能需要检查你的组件生命周期中构建配置是如何初始化和更新的。如果这个方法没有被调用,流程名称将不会在UI中填充。
你应该验证当组件初始化时或当需要刷新流程名称时调用 update_build_config 方法。这可能涉及到检查组件的初始化代码或任何应该触发更新的事件处理程序。
如果方法没有被调用,你可以在组件初始化后或当需要更新流程名称时手动调用它:

# Example of manually calling update_build_config
build_config = self.build_config()
self.update_build_config(build_config, None, "flow_name")

确保将此调用放在组件生命周期的适当位置,以使用可用的流程名称更新构建配置。
此外,你应该确保 build_config 方法正确定义,包括带有必要选项和刷新功能的 flow_name 字段:

def build_config(self):
    return {
        "input_value": {
            "display_name": "Input Value",
            "multiline": True,
        },
        "flow_name": {
            "display_name": "Flow Name",
            "info": "The name of the flow to run.",
            "options": [],
            "real_time_refresh": True,
            "refresh_button": True,
        },
        "tweaks": {
            "display_name": "Tweaks",
            "info": "Tweaks to apply to the flow.",
        },
        "get_final_results_only": {
            "display_name": "Get Final Results Only",
            "info": "If False, the output will contain all outputs from the flow.",
            "advanced": True,
        },
    }
}

通过确保 update_build_config 被适当调用以及 build_config 方法被正确定义,流程名称应该按预期填充到UI中。此外, real_time_refreshrefresh_button 属性将在 build_config 方法中帮助确保流程名称动态更新 1(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/SubFlow.py)2(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/FlowTool.py)3(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/RunFlow.py)4(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/experimental/SubFlow.py)。

  • 要继续与 @dosu 对话,请提及 @dosu。*
hgqdbh6s

hgqdbh6s4#

感谢你的更新,经检查,我认为这个问题似乎是UI相关的。如果团队中的任何人能支持这个功能就太好了。因为在流程名称的选项中,我将一些值(如"A","B","C")硬编码到了数组中,但它们仍然在UI中不可见。

1yjd4xko

1yjd4xko5#

@ogabrielluiz,这个有点超出我的能力范围了,你能帮忙提供指导吗?

  • 要继续与Dosu交流,请提及@dosu。*
hec6srdp

hec6srdp6#

我确认我也遇到了相同的问题。我在包含前端和后端的v.1.0.9官方Docker镜像上遇到了这个问题。

相关问题