From ab227a08d06b78c8464c0ba878df218883ea2a98 Mon Sep 17 00:00:00 2001 From: Raven95676 Date: Tue, 22 Apr 2025 11:50:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dopenai=20source?= =?UTF-8?q?=E4=B8=ADe=E7=9A=84=E4=BD=9C=E7=94=A8=E5=9F=9F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/provider/sources/openai_source.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/astrbot/core/provider/sources/openai_source.py b/astrbot/core/provider/sources/openai_source.py index f4e02b5f5..5399fbc32 100644 --- a/astrbot/core/provider/sources/openai_source.py +++ b/astrbot/core/provider/sources/openai_source.py @@ -362,7 +362,7 @@ class ProviderOpenAIOfficial(Provider): available_api_keys = self.api_keys.copy() chosen_key = random.choice(available_api_keys) - e = None + last_exception = None retry_cnt = 0 for retry_cnt in range(max_retries): try: @@ -376,6 +376,7 @@ class ProviderOpenAIOfficial(Provider): payloads["messages"] = new_contexts context_query = new_contexts except Exception as e: + last_exception = e ( success, chosen_key, @@ -398,7 +399,9 @@ class ProviderOpenAIOfficial(Provider): if retry_cnt == max_retries - 1: logger.error(f"API 调用失败,重试 {max_retries} 次仍然失败。") - raise e + if last_exception is None: + raise Exception("未知错误") + raise last_exception return llm_response async def text_chat_stream( @@ -428,7 +431,7 @@ class ProviderOpenAIOfficial(Provider): available_api_keys = self.api_keys.copy() chosen_key = random.choice(available_api_keys) - e = None + last_exception = None retry_cnt = 0 for retry_cnt in range(max_retries): try: @@ -443,6 +446,7 @@ class ProviderOpenAIOfficial(Provider): payloads["messages"] = new_contexts context_query = new_contexts except Exception as e: + last_exception = e ( success, chosen_key, @@ -465,7 +469,9 @@ class ProviderOpenAIOfficial(Provider): if retry_cnt == max_retries - 1: logger.error(f"API 调用失败,重试 {max_retries} 次仍然失败。") - raise e + if last_exception is None: + raise Exception("未知错误") + raise last_exception async def _remove_image_from_context(self, contexts: List): """ @@ -505,7 +511,10 @@ class ProviderOpenAIOfficial(Provider): async def assemble_context(self, text: str, image_urls: List[str] = None) -> dict: """组装成符合 OpenAI 格式的 role 为 user 的消息段""" if image_urls: - user_content = {"role": "user", "content": [{"type": "text", "text": text if text else "[图片]"}]} + user_content = { + "role": "user", + "content": [{"type": "text", "text": text if text else "[图片]"}], + } for image_url in image_urls: if image_url.startswith("http"): image_path = await download_image_by_url(image_url)