From 734883e1f9336168f504fd5dae3962282795fc14 Mon Sep 17 00:00:00 2001 From: Eric-Terminal <121368508+Eric-Terminal@users.noreply.github.com> Date: Thu, 21 Aug 2025 02:43:18 +0800 Subject: [PATCH] feat: merge model downgrade feature from main --- src/llm_models/utils_model.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/llm_models/utils_model.py b/src/llm_models/utils_model.py index 1125e9fd..33c47b12 100644 --- a/src/llm_models/utils_model.py +++ b/src/llm_models/utils_model.py @@ -319,7 +319,8 @@ class LLMRequest: wait_interval, compressed_messages = self._default_exception_handler( e, self.task_name, - model_name=model_info.name, + model_info=model_info, + api_provider=api_provider, remain_try=retry_remain, retry_interval=api_provider.retry_interval, messages=(message_list, compressed_messages is not None) if message_list else None, @@ -342,7 +343,8 @@ class LLMRequest: self, e: Exception, task_name: str, - model_name: str, + model_info: ModelInfo, + api_provider: APIProvider, remain_try: int, retry_interval: int = 10, messages: Tuple[List[Message], bool] | None = None, @@ -359,7 +361,7 @@ class LLMRequest: Returns: (等待间隔(如果为0则不等待,为-1则不再请求该模型), 新的消息列表(适用于压缩消息)) """ - + model_name = model_info.name if isinstance(e, NetworkConnectionError): # 网络连接错误 return self._check_retry( remain_try, @@ -374,7 +376,8 @@ class LLMRequest: return self._handle_resp_not_ok( e, task_name, - model_name, + model_info, + api_provider, remain_try, retry_interval, messages, @@ -425,7 +428,8 @@ class LLMRequest: self, e: RespNotOkException, task_name: str, - model_name: str, + model_info: ModelInfo, + api_provider: APIProvider, remain_try: int, retry_interval: int = 10, messages: tuple[list[Message], bool] | None = None, @@ -444,6 +448,23 @@ class LLMRequest: """ # 响应错误 if e.status_code in [400, 401, 402, 403, 404]: + model_name = model_info.name + if ( + e.status_code == 403 + and model_name.startswith("Pro/deepseek-ai") + and api_provider.base_url == "https://api.siliconflow.cn/v1/" + ): + old_model_name = model_name + new_model_name = model_name[4:] + model_info.name = new_model_name + logger.warning(f"检测到403错误,模型从 {old_model_name} 降级为 {new_model_name}") + # 更新任务配置中的模型列表 + for i, m_name in enumerate(self.model_for_task.model_list): + if m_name == old_model_name: + self.model_for_task.model_list[i] = new_model_name + logger.warning(f"将任务 {self.task_name} 的模型列表中的 {old_model_name} 临时降级至 {new_model_name}") + break + return 0, None # 立即重试 # 客户端错误 logger.warning( f"任务-'{task_name}' 模型-'{model_name}': 请求失败,错误代码-{e.status_code},错误信息-{e.message}"