fix: bugs in requesters (#1401)

This commit is contained in:
Junyan Qin (Chin)
2025-05-13 16:09:23 +08:00
committed by GitHub
parent da86384e58
commit 015be6008d
8 changed files with 30 additions and 30 deletions
@@ -27,7 +27,7 @@ class DeepseekChatCompletions(chatcmpl.OpenAIChatCompletions):
) -> llm_entities.Message: ) -> llm_entities.Message:
self.client.api_key = use_model.token_mgr.get_token() self.client.api_key = use_model.token_mgr.get_token()
args = extra_args.copy() args = {}
args['model'] = use_model.model_entity.name args['model'] = use_model.model_entity.name
if use_funcs: if use_funcs:
@@ -47,7 +47,7 @@ class DeepseekChatCompletions(chatcmpl.OpenAIChatCompletions):
args['messages'] = messages 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: if resp is None:
raise errors.RequesterError('接口返回为空,请确定模型提供商服务是否正常') raise errors.RequesterError('接口返回为空,请确定模型提供商服务是否正常')
@@ -28,7 +28,7 @@ class GiteeAIChatCompletions(chatcmpl.OpenAIChatCompletions):
) -> llm_entities.Message: ) -> llm_entities.Message:
self.client.api_key = use_model.token_mgr.get_token() self.client.api_key = use_model.token_mgr.get_token()
args = extra_args.copy() args = {}
args['model'] = use_model.model_entity.name args['model'] = use_model.model_entity.name
if use_funcs: if use_funcs:
@@ -44,7 +44,7 @@ class GiteeAIChatCompletions(chatcmpl.OpenAIChatCompletions):
args['messages'] = req_messages 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) message = await self._make_msg(resp)
@@ -9,7 +9,7 @@ import openai.types.chat.chat_completion_message_tool_call as chat_completion_me
import httpx import httpx
from .. import entities, errors, requester 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 ... import entities as llm_entities
from ...tools import entities as tools_entities from ...tools import entities as tools_entities
@@ -19,12 +19,10 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
client: openai.AsyncClient client: openai.AsyncClient
requester_cfg: dict default_config: dict[str, typing.Any] = {
'base_url': 'https://api-inference.modelscope.cn/v1',
def __init__(self, ap: app.Application): 'timeout': 120,
self.ap = ap }
self.requester_cfg = self.ap.provider_cfg.data['requester']['modelscope-chat-completions']
async def initialize(self): async def initialize(self):
self.client = openai.AsyncClient( self.client = openai.AsyncClient(
@@ -37,6 +35,7 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
async def _req( async def _req(
self, self,
args: dict, args: dict,
extra_body: dict = {},
) -> chat_completion.ChatCompletion: ) -> chat_completion.ChatCompletion:
args['stream'] = True args['stream'] = True
@@ -46,7 +45,7 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
tool_calls = [] 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: async for chunk in resp_gen:
# print(chunk) # print(chunk)
@@ -107,7 +106,6 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
if chunk if chunk
else None else None
) )
return await self.client.chat.completions.create(**args)
async def _make_msg( async def _make_msg(
self, self,
@@ -129,10 +127,11 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
req_messages: list[dict], req_messages: list[dict],
use_model: entities.LLMModelInfo, use_model: entities.LLMModelInfo,
use_funcs: list[tools_entities.LLMFunction] = None, use_funcs: list[tools_entities.LLMFunction] = None,
extra_args: dict[str, typing.Any] = {},
) -> llm_entities.Message: ) -> llm_entities.Message:
self.client.api_key = use_model.token_mgr.get_token() 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 args['model'] = use_model.name if use_model.model_name is None else use_model.model_name
if use_funcs: if use_funcs:
@@ -156,19 +155,20 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
args['messages'] = messages args['messages'] = messages
# 发送请求 # 发送请求
resp = await self._req(args) resp = await self._req(args, extra_body=extra_args)
# 处理请求结果 # 处理请求结果
message = await self._make_msg(resp) message = await self._make_msg(resp)
return message return message
async def call( async def invoke_llm(
self, self,
query: core_entities.Query, query: core_entities.Query,
model: entities.LLMModelInfo, model: entities.LLMModelInfo,
messages: typing.List[llm_entities.Message], messages: typing.List[llm_entities.Message],
funcs: typing.List[tools_entities.LLMFunction] = None, funcs: typing.List[tools_entities.LLMFunction] = None,
extra_args: dict[str, typing.Any] = {},
) -> llm_entities.Message: ) -> llm_entities.Message:
req_messages = [] # req_messages 仅用于类内,外部同步由 query.messages 进行 req_messages = [] # req_messages 仅用于类内,外部同步由 query.messages 进行
for m in messages: for m in messages:
@@ -182,7 +182,9 @@ class ModelScopeChatCompletions(requester.LLMAPIRequester):
req_messages.append(msg_dict) req_messages.append(msg_dict)
try: 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: except asyncio.TimeoutError:
raise errors.RequesterError('请求超时') raise errors.RequesterError('请求超时')
except openai.BadRequestError as e: except openai.BadRequestError as e:
@@ -7,7 +7,7 @@ metadata:
zh_CN: 魔搭社区 zh_CN: 魔搭社区
spec: spec:
config: config:
- name: base-url - name: base_url
label: label:
en_US: Base URL en_US: Base URL
zh_CN: 基础 URL zh_CN: 基础 URL
@@ -28,7 +28,7 @@ class MoonshotChatCompletions(chatcmpl.OpenAIChatCompletions):
) -> llm_entities.Message: ) -> llm_entities.Message:
self.client.api_key = use_model.token_mgr.get_token() self.client.api_key = use_model.token_mgr.get_token()
args = extra_args.copy() args = {}
args['model'] = use_model.model_entity.name args['model'] = use_model.model_entity.name
if use_funcs: if use_funcs:
@@ -51,7 +51,7 @@ class MoonshotChatCompletions(chatcmpl.OpenAIChatCompletions):
args['messages'] = messages 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) message = await self._make_msg(resp)
@@ -1,9 +1,9 @@
from __future__ import annotations from __future__ import annotations
import openai import openai
import typing
from . import chatcmpl from . import chatcmpl
from ....core import app
class PPIOChatCompletions(chatcmpl.OpenAIChatCompletions): class PPIOChatCompletions(chatcmpl.OpenAIChatCompletions):
@@ -11,9 +11,7 @@ class PPIOChatCompletions(chatcmpl.OpenAIChatCompletions):
client: openai.AsyncClient client: openai.AsyncClient
requester_cfg: dict default_config: dict[str, typing.Any] = {
'base_url': 'https://api.ppinfra.com/v3/openai',
def __init__(self, ap: app.Application): 'timeout': 120,
self.ap = ap }
self.requester_cfg = self.ap.provider_cfg.data['requester']['ppio-chat-completions']
@@ -7,7 +7,7 @@ metadata:
zh_CN: 派欧云 zh_CN: 派欧云
spec: spec:
config: config:
- name: base-url - name: base_url
label: label:
en_US: Base URL en_US: Base URL
zh_CN: 基础 URL zh_CN: 基础 URL
+2 -2
View File
@@ -445,8 +445,8 @@ class HttpClient {
} }
// export const httpClient = new HttpClient("https://version-4.langbot.dev"); // export const httpClient = new HttpClient("https://version-4.langbot.dev");
export const httpClient = new HttpClient('http://localhost:5300'); // export const httpClient = new HttpClient('http://localhost:5300');
// export const httpClient = new HttpClient('/'); export const httpClient = new HttpClient('/');
// 临时写法,未来两种Client都继承自HttpClient父类,不允许共享方法 // 临时写法,未来两种Client都继承自HttpClient父类,不允许共享方法
export const spaceClient = new HttpClient('https://space.langbot.app'); export const spaceClient = new HttpClient('https://space.langbot.app');