From fdd7c1864d022666c2faebdb5fb3d3306cb5d459 Mon Sep 17 00:00:00 2001 From: Junyan Qin <1010553892@qq.com> Date: Sat, 30 Mar 2024 09:45:30 +0000 Subject: [PATCH] =?UTF-8?q?feat(chatcmpl):=20=E5=AF=B9=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E8=BF=9B=E8=A1=8C=E5=BC=82=E5=B8=B8=E6=8D=95?= =?UTF-8?q?=E8=8E=B7=20(#749)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/provider/modelmgr/apis/chatcmpl.py | 34 ++++++++++++++++++-------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/pkg/provider/modelmgr/apis/chatcmpl.py b/pkg/provider/modelmgr/apis/chatcmpl.py index afdeb19d..e3901de5 100644 --- a/pkg/provider/modelmgr/apis/chatcmpl.py +++ b/pkg/provider/modelmgr/apis/chatcmpl.py @@ -98,6 +98,7 @@ class OpenAIChatCompletions(api.LLMAPIRequester): # req_messages.append({"role": "user", "content": str(query.message_chain)}) + # 首次请求 msg = await self._closure(req_messages, query.use_model, query.use_funcs) yield msg @@ -106,23 +107,36 @@ class OpenAIChatCompletions(api.LLMAPIRequester): req_messages.append(msg.dict(exclude_none=True)) + # 持续请求,只要还有待处理的工具调用就继续处理调用 while pending_tool_calls: for tool_call in pending_tool_calls: - func = tool_call.function + try: + func = tool_call.function - parameters = json.loads(func.arguments) + parameters = json.loads(func.arguments) - func_ret = await self.ap.tool_mgr.execute_func_call( - query, func.name, parameters - ) + func_ret = await self.ap.tool_mgr.execute_func_call( + query, func.name, parameters + ) - msg = llm_entities.Message( - role="tool", content=json.dumps(func_ret, ensure_ascii=False), tool_call_id=tool_call.id - ) + msg = llm_entities.Message( + role="tool", content=json.dumps(func_ret, ensure_ascii=False), tool_call_id=tool_call.id + ) - yield msg + yield msg - req_messages.append(msg.dict(exclude_none=True)) + req_messages.append(msg.dict(exclude_none=True)) + except Exception as e: + # 出错,添加一个报错信息到 req_messages + err_msg = llm_entities.Message( + role="tool", content=f"err: {e}", tool_call_id=tool_call.id + ) + + yield err_msg + + req_messages.append( + err_msg.dict(exclude_none=True) + ) # 处理完所有调用,继续请求 msg = await self._closure(req_messages, query.use_model, query.use_funcs)