From 8dfef1d11841ee667225bde282383fa1cbf4baf2 Mon Sep 17 00:00:00 2001 From: aberry Date: Tue, 27 May 2025 15:09:09 +0800 Subject: [PATCH] Bugfix (#1482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update modelscopechatcmpl.py tool_call 流式输出的最后一个参数是 None,需要判断一下 * Update mcp.py 问题:闭包(closure)对循环变量 tool 的捕获,导致最终注册到 self.functions 里的所有 func,都会引用 同一个(最后一个)tool 解决:在定义 func 时,通过函数参数的 默认值 把当下的 tool “冻结”住 * Update mcp.py --- pkg/provider/modelmgr/requesters/modelscopechatcmpl.py | 2 ++ pkg/provider/tools/loaders/mcp.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py index e5fb42a9..b8868f4d 100644 --- a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py +++ b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py @@ -57,6 +57,8 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): if chunk.choices[0].delta.tool_calls is not None: for tool_call in chunk.choices[0].delta.tool_calls: + if tool_call.function.arguments is None: + continue for tc in tool_calls: if tc.index == tool_call.index: tc.function.arguments += tool_call.function.arguments diff --git a/pkg/provider/tools/loaders/mcp.py b/pkg/provider/tools/loaders/mcp.py index 5c030994..f3223f42 100644 --- a/pkg/provider/tools/loaders/mcp.py +++ b/pkg/provider/tools/loaders/mcp.py @@ -82,8 +82,8 @@ class RuntimeMCPSession: for tool in tools.tools: - async def func(query: core_entities.Query, **kwargs): - result = await self.session.call_tool(tool.name, kwargs) + async def func(query: core_entities.Query, *, _tool=tool, **kwargs): + result = await self.session.call_tool(_tool.name, kwargs) if result.isError: raise Exception(result.content[0].text) return result.content[0].text