From 9b3696a18ede409b2c744608af06378c4173ac13 Mon Sep 17 00:00:00 2001 From: liujin-patsnap <134919030+patsnap-liujin@users.noreply.github.com> Date: Mon, 21 Apr 2025 01:41:34 +0000 Subject: [PATCH 1/2] Fix: Correct file variable handling for custom tools in workflow --- api/core/workflow/nodes/tool/tool_node.py | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/api/core/workflow/nodes/tool/tool_node.py b/api/core/workflow/nodes/tool/tool_node.py index 6f0cc3f6d2..0fb7c5958a 100644 --- a/api/core/workflow/nodes/tool/tool_node.py +++ b/api/core/workflow/nodes/tool/tool_node.py @@ -279,6 +279,37 @@ class ToolNode(BaseNode[ToolNodeData]): json.append(message.message.json_object) elif message.type == ToolInvokeMessage.MessageType.LINK: assert isinstance(message.message, ToolInvokeMessage.TextMessage) + url = message.message.text + + # 获取 transfer_method,与其他类型保持一致 + if message.meta: + transfer_method = message.meta.get("transfer_method", FileTransferMethod.TOOL_FILE) + else: + transfer_method = FileTransferMethod.TOOL_FILE + + tool_file_id = str(url).rsplit('/', maxsplit=1)[-1].split(".")[0] + + with Session(db.engine) as session: + stmt = select(ToolFile).where(ToolFile.id == tool_file_id) + tool_file = session.scalar(stmt) + if tool_file is None: + raise ToolFileError(f"Tool file {tool_file_id} does not exist") + + # 完整的 mapping 信息 + mapping = { + "tool_file_id": tool_file_id, + "type": file_factory.get_file_type_by_mime_type(tool_file.mimetype), + "transfer_method": transfer_method, + "url": url, + } + + file = file_factory.build_from_mapping( + mapping=mapping, + tenant_id=self.tenant_id, + ) + files.append(file) + + # 保持原有的文本处理 stream_text = f"Link: {message.message.text}\n" text += stream_text yield RunStreamChunkEvent(chunk_content=stream_text, from_variable_selector=[self.node_id, "text"]) From 635d25d330a627564950bc85b76f7c3f28cf3420 Mon Sep 17 00:00:00 2001 From: liujin-patsnap <134919030+patsnap-liujin@users.noreply.github.com> Date: Mon, 21 Apr 2025 09:15:24 +0000 Subject: [PATCH 2/2] Fix: Correct file variable handling for custom tools in workflow --- api/core/workflow/nodes/tool/tool_node.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/api/core/workflow/nodes/tool/tool_node.py b/api/core/workflow/nodes/tool/tool_node.py index 0fb7c5958a..9ab46cde79 100644 --- a/api/core/workflow/nodes/tool/tool_node.py +++ b/api/core/workflow/nodes/tool/tool_node.py @@ -279,15 +279,13 @@ class ToolNode(BaseNode[ToolNodeData]): json.append(message.message.json_object) elif message.type == ToolInvokeMessage.MessageType.LINK: assert isinstance(message.message, ToolInvokeMessage.TextMessage) - url = message.message.text - # 获取 transfer_method,与其他类型保持一致 if message.meta: transfer_method = message.meta.get("transfer_method", FileTransferMethod.TOOL_FILE) else: transfer_method = FileTransferMethod.TOOL_FILE - tool_file_id = str(url).rsplit('/', maxsplit=1)[-1].split(".")[0] + tool_file_id = message.message.text.split("/")[-1].split(".")[0] with Session(db.engine) as session: stmt = select(ToolFile).where(ToolFile.id == tool_file_id) @@ -295,12 +293,11 @@ class ToolNode(BaseNode[ToolNodeData]): if tool_file is None: raise ToolFileError(f"Tool file {tool_file_id} does not exist") - # 完整的 mapping 信息 mapping = { "tool_file_id": tool_file_id, "type": file_factory.get_file_type_by_mime_type(tool_file.mimetype), "transfer_method": transfer_method, - "url": url, + "url": message.message.text, } file = file_factory.build_from_mapping( @@ -309,7 +306,6 @@ class ToolNode(BaseNode[ToolNodeData]): ) files.append(file) - # 保持原有的文本处理 stream_text = f"Link: {message.message.text}\n" text += stream_text yield RunStreamChunkEvent(chunk_content=stream_text, from_variable_selector=[self.node_id, "text"])