1313from functools import reduce
1414from typing import List , Dict
1515
16+ import uuid_utils .compat as uuid
17+ from django .db .models import QuerySet , OuterRef , Subquery
18+ from django .utils .translation import gettext as _
19+ from langchain_core .messages import BaseMessage , AIMessage , HumanMessage , SystemMessage
1620from langchain_core .tools import StructuredTool
21+ from pydantic import Field , create_model
1722
1823from application .flow .common import Workflow , WorkflowMode
19- from application .flow .i_step_node import NodeResult , INode , ToolWorkflowPostHandler , ToolWorkflowCallPostHandler
24+ from application .flow .i_step_node import NodeResult , INode , ToolWorkflowPostHandler
2025from application .flow .step_node .ai_chat_step_node .i_chat_node import IChatNode
2126from application .flow .tools import Reasoning , mcp_response_generator
2227from application .models import Application , ApplicationApiKey , ApplicationAccessToken
2530from common .utils .rsa_util import rsa_long_decrypt
2631from common .utils .shared_resource_auth import filter_authorized_ids
2732from common .utils .tool_code import ToolExecutor
28- from django .db .models import QuerySet , OuterRef , Subquery
29- from django .utils .translation import gettext as _
30- from langchain_core .messages import BaseMessage , AIMessage , HumanMessage , SystemMessage
3133from models_provider .models import Model
3234from models_provider .tools import get_model_credential , get_model_instance_by_model_workspace_id
3335from tools .models import Tool , ToolWorkflowVersion , ToolType
34- from pydantic import BaseModel , Field , create_model
35- import uuid_utils .compat as uuid
3636
3737
3838def build_schema (fields : dict ):
@@ -66,14 +66,14 @@ def get_workflow_args(tool, qv):
6666 return build_schema ({})
6767
6868
69- def get_workflow_func (tool , qv , workspace_id ):
69+ def get_workflow_func (node , tool , qv , workspace_id ):
7070 tool_id = tool .id
7171 tool_record_id = str (uuid .uuid7 ())
7272 took_execute = ToolExecute (tool_id , tool_record_id ,
7373 workspace_id ,
74- None ,
75- None ,
76- True )
74+ node . workflow_manage . get_source_type () ,
75+ node . workflow_manage . get_source_id () ,
76+ False )
7777
7878 def inner (** kwargs ):
7979 from application .flow .tool_workflow_manage import ToolWorkflowManage
@@ -86,7 +86,7 @@ def inner(**kwargs):
8686 'workspace_id' : workspace_id ,
8787 ** kwargs },
8888
89- ToolWorkflowCallPostHandler (took_execute , tool_id ),
89+ ToolWorkflowPostHandler (took_execute , tool_id ),
9090 is_the_task_interrupted = lambda : False ,
9191 child_node = None ,
9292 start_node_id = None ,
@@ -101,7 +101,7 @@ def inner(**kwargs):
101101 return inner
102102
103103
104- def get_tools (tool_workflow_ids , workspace_id ):
104+ def get_tools (node , tool_workflow_ids , workspace_id ):
105105 tools = QuerySet (Tool ).filter (id__in = tool_workflow_ids , tool_type = ToolType .WORKFLOW , workspace_id = workspace_id )
106106 latest_subquery = ToolWorkflowVersion .objects .filter (
107107 tool_id = OuterRef ('tool_id' )
@@ -115,7 +115,7 @@ def get_tools(tool_workflow_ids, workspace_id):
115115 results = []
116116 for tool in tools :
117117 qv = qd .get (tool .id )
118- func = get_workflow_func (tool , qv , workspace_id )
118+ func = get_workflow_func (node , tool , qv , workspace_id )
119119 args = get_workflow_args (tool , qv )
120120 tool = StructuredTool .from_function (
121121 func = func ,
@@ -360,7 +360,7 @@ def _handle_mcp_request(self, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids
360360 mcp_servers_config = {** mcp_servers_config , ** json .loads (mcp_tool ['code' ])}
361361 mcp_servers_config = self .handle_variables (mcp_servers_config )
362362 tool_init_params = {}
363- tools = get_tools (tool_ids , workspace_id )
363+ tools = get_tools (self , tool_ids , workspace_id )
364364 if tool_ids and len (tool_ids ) > 0 : # 如果有工具ID,则将其转换为MCP
365365 self .context ['tool_ids' ] = tool_ids
366366 for tool_id in tool_ids :
0 commit comments