From e3ffdbc3087875e2f98a67d35966a6a433da4b8c Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 25 Feb 2025 00:51:09 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20openai=5Fsource=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BC=A0=E5=85=A5=E4=BB=BB=E4=BD=95=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=8F=82=E6=95=B0=E4=BB=A5=E9=80=82=E9=85=8D=20Ollama?= =?UTF-8?q?=20=E5=92=8C=20FastGPT=20=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/core_lifecycle.py | 2 +- astrbot/core/provider/sources/openai_source.py | 18 ++++++++++++++++-- astrbot/dashboard/routes/chat.py | 4 ++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/astrbot/core/core_lifecycle.py b/astrbot/core/core_lifecycle.py index 7d4ec008c..c2a5f4838 100644 --- a/astrbot/core/core_lifecycle.py +++ b/astrbot/core/core_lifecycle.py @@ -27,7 +27,7 @@ class AstrBotCoreLifecycle: os.environ['https_proxy'] = self.astrbot_config['http_proxy'] os.environ['http_proxy'] = self.astrbot_config['http_proxy'] - os.environ['no_proxy'] = 'localhost,127.0.0.1' + os.environ['no_proxy'] = 'localhost' async def initialize(self): logger.info("AstrBot v"+ VERSION) diff --git a/astrbot/core/provider/sources/openai_source.py b/astrbot/core/provider/sources/openai_source.py index 6752568d0..90cbfe005 100644 --- a/astrbot/core/provider/sources/openai_source.py +++ b/astrbot/core/provider/sources/openai_source.py @@ -1,6 +1,7 @@ import base64 import json import os +import inspect from openai import AsyncOpenAI, AsyncAzureOpenAI from openai.types.chat.chat_completion import ChatCompletion @@ -49,6 +50,8 @@ class ProviderOpenAIOfficial(Provider): timeout=self.timeout ) + self.default_params = inspect.signature(self.client.chat.completions.create).parameters.keys() + model_config = provider_config.get("model_config", {}) model = model_config.get("model", "unknown") self.set_model(model) @@ -69,10 +72,21 @@ class ProviderOpenAIOfficial(Provider): tool_list = tools.get_func_desc_openai_style() if tool_list: payloads['tools'] = tool_list - + + # 不在默认参数中的参数放在 extra_body 中 + extra_body = {} + to_del = [] + for key in payloads.keys(): + if key not in self.default_params: + extra_body[key] = payloads[key] + to_del.append(key) + for key in to_del: + del payloads[key] + completion = await self.client.chat.completions.create( **payloads, - stream=False + stream=False, + extra_body=extra_body ) assert isinstance(completion, ChatCompletion) diff --git a/astrbot/dashboard/routes/chat.py b/astrbot/dashboard/routes/chat.py index 329ff6f36..594620004 100644 --- a/astrbot/dashboard/routes/chat.py +++ b/astrbot/dashboard/routes/chat.py @@ -181,8 +181,8 @@ class ChatRoute(Route): self.db.update_conversation(username, cid, history=json.dumps(history)) await asyncio.sleep(0.5) - except BaseException as e: - logger.debug(f"用户 {username} 断开聊天长连接: {str(e)}。") + except BaseException as _: + logger.debug(f"用户 {username} 断开聊天长连接。") self.curr_chat_sse.pop(username) return