Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -384,10 +384,11 @@ def _handle_mcp_request(
if tool is None or tool.is_active is False:
continue
executor = ToolExecutor()
init_params_default_value = {i["field"]: i.get('default_value') for i in tool.init_field_list}
if tool.init_params is not None:
tool_init_params = json.loads(rsa_long_decrypt(tool.init_params))
tool_init_params = init_params_default_value | json.loads(rsa_long_decrypt(tool.init_params))
else:
tool_init_params = {i["field"]: i.get("default_value") for i in tool.init_field_list}
tool_init_params = init_params_default_value
tool_config = executor.get_tool_mcp_config(tool, tool_init_params)

mcp_servers_config[str(tool.id)] = tool_config
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
from common.utils.rsa_util import rsa_long_decrypt
from common.utils.shared_resource_auth import filter_authorized_ids
from common.utils.tool_code import ToolExecutor
from knowledge.models import File
from common.utils.logger import maxkb_logger
from models_provider.models import Model
from models_provider.tools import get_model_credential, get_model_instance_by_model_workspace_id
from tools.models import Tool, ToolType
Expand Down Expand Up @@ -280,10 +280,12 @@ def _handle_mcp_request(self, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids
if tool is None:
continue
executor = ToolExecutor()
init_params_default_value = {i["field"]: i.get('default_value') for i in tool.init_field_list}
if tool.init_params is not None:
tool_init_params = json.loads(rsa_long_decrypt(tool.init_params))
tool_init_params = init_params_default_value | json.loads(rsa_long_decrypt(tool.init_params))
else:
tool_init_params = {i["field"]: i.get('default_value') for i in tool.init_field_list}
tool_init_params = init_params_default_value

tool_config = executor.get_tool_mcp_config(tool, tool_init_params)

mcp_servers_config[str(tool.id)] = tool_config
Expand Down Expand Up @@ -482,6 +484,21 @@ def reset_message_list(message_list: List[BaseMessage], answer_text):
return result

def get_details(self, index: int, **kwargs):
tool_call_list = []
answer = self.context.get('answer', '')
if answer:
for match in re.finditer(
r'<tool_calls_render>(.*?)</tool_calls_render>', answer, re.DOTALL
):
try:
tool_data = json.loads(match.group(1))
tool_call_list.append({
'name': tool_data.get('title', ''),
'input': tool_data.get('content', {}).get('input', ''),
'icon': tool_data.get('icon', ''),
})
except (json.JSONDecodeError, Exception) as e:
maxkb_logger.error(f"get_details error {e}")
return {
'name': self.node.properties.get('stepName'),
"index": index,
Expand All @@ -490,6 +507,7 @@ def get_details(self, index: int, **kwargs):
'history_message': self.context.get('history_message'),
'question': self.context.get('question'),
'answer': self.context.get('answer'),
'tool_call_list': tool_call_list,
'reasoning_content': self.context.get('reasoning_content'),
'enableException': self.node.properties.get('enableException'),
'type': self.node.type,
Expand Down
15 changes: 13 additions & 2 deletions apps/application/flow/step_node/tool_node/impl/base_tool_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,19 @@ def execute(self, input_field_list, code, **kwargs) -> NodeResult:
params = {field.get('name'): convert_value(field.get('name'), field.get('value'), field.get('type'),
field.get('is_required'), field.get('source'), self)
for field in input_field_list}
result = function_executor.exec_code(code, params)
self.context['params'] = params
# 合并启动参数默认值(如果有 init_field_list 定义)
init_field_list = self.node_params.get('init_field_list', [])
if init_field_list:
init_params_default_value = {i["field"]: i.get('default_value') for i in init_field_list}
init_params = kwargs.get('init_params')
if init_params is not None:
all_params = init_params_default_value | init_params | params
else:
all_params = init_params_default_value | params
else:
all_params = params
result = function_executor.exec_code(code, all_params)
self.context['params'] = all_params
return NodeResult({'result': result}, {}, _write_context=write_context)

def get_details(self, index: int, **kwargs):
Expand Down
7 changes: 5 additions & 2 deletions apps/tools/serializers/tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,7 @@ def debug(self, debug_instance):
input_field_list = debug_instance.get("input_field_list")
code = debug_instance.get("code")
debug_field_list = debug_instance.get("debug_field_list")
init_field_list = debug_instance.get("init_field_list", [])
init_params = debug_instance.get("init_params")
params = {
field.get("name"): self.convert_value(
Expand All @@ -582,11 +583,13 @@ def debug(self, debug_instance):
for field in input_field_list
]
}
# 合并初始化参数(默认值 → 已保存的启动参数 → 运行时入参)
init_params_default_value = {i["field"]: i.get('default_value') for i in init_field_list}
# 合并初始化参数
if init_params is not None:
all_params = init_params | params
all_params = init_params_default_value | init_params | params
else:
all_params = params
all_params = init_params_default_value | params
return tool_executor.exec_code(code, all_params)

@staticmethod
Expand Down