Skip to content

Commit f4862a6

Browse files
authored
fix: resolve default values of tool init parameters not taking effect (#6267)
1 parent bddea00 commit f4862a6

4 files changed

Lines changed: 26 additions & 9 deletions

File tree

apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,10 +384,11 @@ def _handle_mcp_request(
384384
if tool is None or tool.is_active is False:
385385
continue
386386
executor = ToolExecutor()
387+
init_params_default_value = {i["field"]: i.get('default_value') for i in tool.init_field_list}
387388
if tool.init_params is not None:
388-
tool_init_params = json.loads(rsa_long_decrypt(tool.init_params))
389+
tool_init_params = init_params_default_value | json.loads(rsa_long_decrypt(tool.init_params))
389390
else:
390-
tool_init_params = {i["field"]: i.get("default_value") for i in tool.init_field_list}
391+
tool_init_params = init_params_default_value
391392
tool_config = executor.get_tool_mcp_config(tool, tool_init_params)
392393

393394
mcp_servers_config[str(tool.id)] = tool_config

apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from common.utils.rsa_util import rsa_long_decrypt
2828
from common.utils.shared_resource_auth import filter_authorized_ids
2929
from common.utils.tool_code import ToolExecutor
30-
from knowledge.models import File
30+
from common.utils.logger import maxkb_logger
3131
from models_provider.models import Model
3232
from models_provider.tools import get_model_credential, get_model_instance_by_model_workspace_id
3333
from tools.models import Tool, ToolType
@@ -280,10 +280,12 @@ def _handle_mcp_request(self, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids
280280
if tool is None:
281281
continue
282282
executor = ToolExecutor()
283+
init_params_default_value = {i["field"]: i.get('default_value') for i in tool.init_field_list}
283284
if tool.init_params is not None:
284-
tool_init_params = json.loads(rsa_long_decrypt(tool.init_params))
285+
tool_init_params = init_params_default_value | json.loads(rsa_long_decrypt(tool.init_params))
285286
else:
286-
tool_init_params = {i["field"]: i.get('default_value') for i in tool.init_field_list}
287+
tool_init_params = init_params_default_value
288+
287289
tool_config = executor.get_tool_mcp_config(tool, tool_init_params)
288290

289291
mcp_servers_config[str(tool.id)] = tool_config

apps/application/flow/step_node/tool_node/impl/base_tool_node.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,19 @@ def execute(self, input_field_list, code, **kwargs) -> NodeResult:
100100
params = {field.get('name'): convert_value(field.get('name'), field.get('value'), field.get('type'),
101101
field.get('is_required'), field.get('source'), self)
102102
for field in input_field_list}
103-
result = function_executor.exec_code(code, params)
104-
self.context['params'] = params
103+
# 合并启动参数默认值(如果有 init_field_list 定义)
104+
init_field_list = self.node_params.get('init_field_list', [])
105+
if init_field_list:
106+
init_params_default_value = {i["field"]: i.get('default_value') for i in init_field_list}
107+
init_params = kwargs.get('init_params')
108+
if init_params is not None:
109+
all_params = init_params_default_value | init_params | params
110+
else:
111+
all_params = init_params_default_value | params
112+
else:
113+
all_params = params
114+
result = function_executor.exec_code(code, all_params)
115+
self.context['params'] = all_params
105116
return NodeResult({'result': result}, {}, _write_context=write_context)
106117

107118
def get_details(self, index: int, **kwargs):

apps/tools/serializers/tool.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,7 @@ def debug(self, debug_instance):
569569
input_field_list = debug_instance.get("input_field_list")
570570
code = debug_instance.get("code")
571571
debug_field_list = debug_instance.get("debug_field_list")
572+
init_field_list = debug_instance.get("init_field_list", [])
572573
init_params = debug_instance.get("init_params")
573574
params = {
574575
field.get("name"): self.convert_value(
@@ -582,11 +583,13 @@ def debug(self, debug_instance):
582583
for field in input_field_list
583584
]
584585
}
586+
# 合并初始化参数(默认值 → 已保存的启动参数 → 运行时入参)
587+
init_params_default_value = {i["field"]: i.get('default_value') for i in init_field_list}
585588
# 合并初始化参数
586589
if init_params is not None:
587-
all_params = init_params | params
590+
all_params = init_params_default_value | init_params | params
588591
else:
589-
all_params = params
592+
all_params = init_params_default_value | params
590593
return tool_executor.exec_code(code, all_params)
591594

592595
@staticmethod

0 commit comments

Comments
 (0)