From 015be6008d147e8c1f8590871c1a8b925019a102 Mon Sep 17 00:00:00 2001 From: "Junyan Qin (Chin)" Date: Tue, 13 May 2025 16:09:23 +0800 Subject: [PATCH] fix: bugs in requesters (#1401) --- .../modelmgr/requesters/deepseekchatcmpl.py | 4 +-- .../modelmgr/requesters/giteeaichatcmpl.py | 4 +-- .../modelmgr/requesters/modelscopechatcmpl.py | 28 ++++++++++--------- .../requesters/modelscopechatcmpl.yaml | 2 +- .../modelmgr/requesters/moonshotchatcmpl.py | 4 +-- .../modelmgr/requesters/ppiochatcmpl.py | 12 ++++---- .../modelmgr/requesters/ppiochatcmpl.yaml | 2 +- web/src/app/infra/http/HttpClient.ts | 4 +-- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/pkg/provider/modelmgr/requesters/deepseekchatcmpl.py b/pkg/provider/modelmgr/requesters/deepseekchatcmpl.py index 30848df9..6d664b01 100644 --- a/pkg/provider/modelmgr/requesters/deepseekchatcmpl.py +++ b/pkg/provider/modelmgr/requesters/deepseekchatcmpl.py @@ -27,7 +27,7 @@ class DeepseekChatCompletions(chatcmpl.OpenAIChatCompletions): ) -> llm_entities.Message: self.client.api_key = use_model.token_mgr.get_token() - args = extra_args.copy() + args = {} args['model'] = use_model.model_entity.name if use_funcs: @@ -47,7 +47,7 @@ class DeepseekChatCompletions(chatcmpl.OpenAIChatCompletions): args['messages'] = messages # 发送请求 - resp = await self._req(args, extra_body=self.requester_cfg['args']) + resp = await self._req(args, extra_body=extra_args) if resp is None: raise errors.RequesterError('接口返回为空,请确定模型提供商服务是否正常') diff --git a/pkg/provider/modelmgr/requesters/giteeaichatcmpl.py b/pkg/provider/modelmgr/requesters/giteeaichatcmpl.py index 050a04bc..3795ef99 100644 --- a/pkg/provider/modelmgr/requesters/giteeaichatcmpl.py +++ b/pkg/provider/modelmgr/requesters/giteeaichatcmpl.py @@ -28,7 +28,7 @@ class GiteeAIChatCompletions(chatcmpl.OpenAIChatCompletions): ) -> llm_entities.Message: self.client.api_key = use_model.token_mgr.get_token() - args = extra_args.copy() + args = {} args['model'] = use_model.model_entity.name if use_funcs: @@ -44,7 +44,7 @@ class GiteeAIChatCompletions(chatcmpl.OpenAIChatCompletions): args['messages'] = req_messages - resp = await self._req(args, extra_body=self.requester_cfg['args']) + resp = await self._req(args, extra_body=extra_args) message = await self._make_msg(resp) diff --git a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py index c8be8a01..993c833a 100644 --- a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py +++ b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.py @@ -9,7 +9,7 @@ import openai.types.chat.chat_completion_message_tool_call as chat_completion_me import httpx from .. import entities, errors, requester -from ....core import entities as core_entities, app +from ....core import entities as core_entities from ... import entities as llm_entities from ...tools import entities as tools_entities @@ -19,12 +19,10 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): client: openai.AsyncClient - requester_cfg: dict - - def __init__(self, ap: app.Application): - self.ap = ap - - self.requester_cfg = self.ap.provider_cfg.data['requester']['modelscope-chat-completions'] + default_config: dict[str, typing.Any] = { + 'base_url': 'https://api-inference.modelscope.cn/v1', + 'timeout': 120, + } async def initialize(self): self.client = openai.AsyncClient( @@ -37,6 +35,7 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): async def _req( self, args: dict, + extra_body: dict = {}, ) -> chat_completion.ChatCompletion: args['stream'] = True @@ -46,7 +45,7 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): tool_calls = [] - resp_gen: openai.AsyncStream = await self.client.chat.completions.create(**args) + resp_gen: openai.AsyncStream = await self.client.chat.completions.create(**args, extra_body=extra_body) async for chunk in resp_gen: # print(chunk) @@ -107,7 +106,6 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): if chunk else None ) - return await self.client.chat.completions.create(**args) async def _make_msg( self, @@ -129,10 +127,11 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): req_messages: list[dict], use_model: entities.LLMModelInfo, use_funcs: list[tools_entities.LLMFunction] = None, + extra_args: dict[str, typing.Any] = {}, ) -> llm_entities.Message: self.client.api_key = use_model.token_mgr.get_token() - args = self.requester_cfg['args'].copy() + args = {} args['model'] = use_model.name if use_model.model_name is None else use_model.model_name if use_funcs: @@ -156,19 +155,20 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): args['messages'] = messages # 发送请求 - resp = await self._req(args) + resp = await self._req(args, extra_body=extra_args) # 处理请求结果 message = await self._make_msg(resp) return message - async def call( + async def invoke_llm( self, query: core_entities.Query, model: entities.LLMModelInfo, messages: typing.List[llm_entities.Message], funcs: typing.List[tools_entities.LLMFunction] = None, + extra_args: dict[str, typing.Any] = {}, ) -> llm_entities.Message: req_messages = [] # req_messages 仅用于类内,外部同步由 query.messages 进行 for m in messages: @@ -182,7 +182,9 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester): req_messages.append(msg_dict) try: - return await self._closure(query=query, req_messages=req_messages, use_model=model, use_funcs=funcs) + return await self._closure( + query=query, req_messages=req_messages, use_model=model, use_funcs=funcs, extra_args=extra_args + ) except asyncio.TimeoutError: raise errors.RequesterError('请求超时') except openai.BadRequestError as e: diff --git a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.yaml b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.yaml index eb8c70ec..954d92f1 100644 --- a/pkg/provider/modelmgr/requesters/modelscopechatcmpl.yaml +++ b/pkg/provider/modelmgr/requesters/modelscopechatcmpl.yaml @@ -7,7 +7,7 @@ metadata: zh_CN: 魔搭社区 spec: config: - - name: base-url + - name: base_url label: en_US: Base URL zh_CN: 基础 URL diff --git a/pkg/provider/modelmgr/requesters/moonshotchatcmpl.py b/pkg/provider/modelmgr/requesters/moonshotchatcmpl.py index cb843fed..f3621a09 100644 --- a/pkg/provider/modelmgr/requesters/moonshotchatcmpl.py +++ b/pkg/provider/modelmgr/requesters/moonshotchatcmpl.py @@ -28,7 +28,7 @@ class MoonshotChatCompletions(chatcmpl.OpenAIChatCompletions): ) -> llm_entities.Message: self.client.api_key = use_model.token_mgr.get_token() - args = extra_args.copy() + args = {} args['model'] = use_model.model_entity.name if use_funcs: @@ -51,7 +51,7 @@ class MoonshotChatCompletions(chatcmpl.OpenAIChatCompletions): args['messages'] = messages # 发送请求 - resp = await self._req(args, extra_body=self.requester_cfg['args']) + resp = await self._req(args, extra_body=extra_args) # 处理请求结果 message = await self._make_msg(resp) diff --git a/pkg/provider/modelmgr/requesters/ppiochatcmpl.py b/pkg/provider/modelmgr/requesters/ppiochatcmpl.py index 67c1701a..7e78ddb8 100644 --- a/pkg/provider/modelmgr/requesters/ppiochatcmpl.py +++ b/pkg/provider/modelmgr/requesters/ppiochatcmpl.py @@ -1,9 +1,9 @@ from __future__ import annotations import openai +import typing from . import chatcmpl -from ....core import app class PPIOChatCompletions(chatcmpl.OpenAIChatCompletions): @@ -11,9 +11,7 @@ class PPIOChatCompletions(chatcmpl.OpenAIChatCompletions): client: openai.AsyncClient - requester_cfg: dict - - def __init__(self, ap: app.Application): - self.ap = ap - - self.requester_cfg = self.ap.provider_cfg.data['requester']['ppio-chat-completions'] + default_config: dict[str, typing.Any] = { + 'base_url': 'https://api.ppinfra.com/v3/openai', + 'timeout': 120, + } diff --git a/pkg/provider/modelmgr/requesters/ppiochatcmpl.yaml b/pkg/provider/modelmgr/requesters/ppiochatcmpl.yaml index 555f6416..22879fea 100644 --- a/pkg/provider/modelmgr/requesters/ppiochatcmpl.yaml +++ b/pkg/provider/modelmgr/requesters/ppiochatcmpl.yaml @@ -7,7 +7,7 @@ metadata: zh_CN: 派欧云 spec: config: - - name: base-url + - name: base_url label: en_US: Base URL zh_CN: 基础 URL diff --git a/web/src/app/infra/http/HttpClient.ts b/web/src/app/infra/http/HttpClient.ts index 33c49aa6..5e8750a6 100644 --- a/web/src/app/infra/http/HttpClient.ts +++ b/web/src/app/infra/http/HttpClient.ts @@ -445,8 +445,8 @@ class HttpClient { } // export const httpClient = new HttpClient("https://version-4.langbot.dev"); -export const httpClient = new HttpClient('http://localhost:5300'); -// export const httpClient = new HttpClient('/'); +// export const httpClient = new HttpClient('http://localhost:5300'); +export const httpClient = new HttpClient('/'); // 临时写法,未来两种Client都继承自HttpClient父类,不允许共享方法 export const spaceClient = new HttpClient('https://space.langbot.app');