From 8ed46893a8a65062579b586f53f316f1a0844e9c Mon Sep 17 00:00:00 2001 From: Novice Date: Tue, 11 Feb 2025 15:59:06 +0800 Subject: [PATCH] fix: agent parameter parsing error --- api/core/workflow/nodes/agent/agent_node.py | 35 +++++++++++---------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/api/core/workflow/nodes/agent/agent_node.py b/api/core/workflow/nodes/agent/agent_node.py index 44318261a8..1c485e37ff 100644 --- a/api/core/workflow/nodes/agent/agent_node.py +++ b/api/core/workflow/nodes/agent/agent_node.py @@ -156,29 +156,32 @@ class AgentNode(ToolNode): value = cast(list[dict[str, Any]], value) value = [tool for tool in value if tool.get("enabled", False)] + for tool in value: + if "schemas" in tool: + tool.pop("schemas") + parameters = tool.get("parameters", {}) + if all(isinstance(v, dict) for _, v in parameters.items()): + params = {} + for key, param in parameters.items(): + if param.get("auto", ParamsAutoGenerated.OPEN.value) == ParamsAutoGenerated.CLOSE.value: + params[key] = param.get("value", {}).get("value", "") + else: + params[key] = None + parameters = params + tool["settings"] = {k: v.get("value", None) for k, v in tool.get("settings", {}).items()} + tool["parameters"] = parameters + if not for_log: if parameter.type == "array[tools]": value = cast(list[dict[str, Any]], value) tool_value = [] for tool in value: provider_type = ToolProviderType(tool.get("type", ToolProviderType.BUILT_IN.value)) - # handle the original settings - original_parameters = tool.get("parameters", {}) setting_params = tool.get("settings", {}) - manual_input_params = [] - # handle legacy data compatibility - if not all(isinstance(v, dict) for _, v in original_parameters.items()): - parameters = original_parameters - else: - params = {} - for key, param in original_parameters.items(): - if param.get("auto", ParamsAutoGenerated.OPEN.value) == ParamsAutoGenerated.CLOSE.value: - params[key] = param.get("value", "") - manual_input_params.append(key) - else: - params[key] = None - settings = {k: v.get("value", None) for k, v in setting_params.items()} - parameters = {**params, **settings} + parameters = tool.get("parameters", {}) + manual_input_params = [key for key, value in parameters.items() if value is not None] + + parameters = {**parameters, **setting_params} entity = AgentToolEntity( provider_id=tool.get("provider_name", ""), provider_type=provider_type,