From d1cbaaf040898079f80eb959e62b0dc7c859b1d8 Mon Sep 17 00:00:00 2001 From: linyq Date: Fri, 15 Nov 2024 16:32:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(app):=20=E4=BC=98=E5=8C=96=20Gemini=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 Gemini 生成器添加重试逻辑,以处理 API 限流情况 - Gemini 生成器在遇到空响应时也会进行重试- 优化异常处理,对不同的错误类型采取不同的重试策略 --- app/utils/script_generator.py | 45 +++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/app/utils/script_generator.py b/app/utils/script_generator.py index f336ab2..ad6d3a8 100644 --- a/app/utils/script_generator.py +++ b/app/utils/script_generator.py @@ -149,17 +149,38 @@ class GeminiGenerator(BaseGenerator): def _generate(self, messages: list, params: dict) -> any: """实现Gemini特定的生成逻辑""" - try: - # 转换消息格式为Gemini格式 - prompt = "\n".join([m["content"] for m in messages]) - response = self.model.generate_content( - prompt, - generation_config=params - ) - return response - except Exception as e: - logger.error(f"Gemini generation error: {str(e)}") - raise + while True: + try: + # 转换消息格式为Gemini格式 + prompt = "\n".join([m["content"] for m in messages]) + response = self.model.generate_content( + prompt, + generation_config=params + ) + + # 检查响应是否包含有效内容 + if (hasattr(response, 'result') and + hasattr(response.result, 'candidates') and + response.result.candidates): + + candidate = response.result.candidates[0] + + # 检查是否有内容字段 + if not hasattr(candidate, 'content'): + logger.warning("Gemini API 返回速率限制响应,等待30秒后重试...") + time.sleep(30) # 等待3秒后重试 + continue + return response + + except Exception as e: + error_str = str(e) + if "429" in error_str: + logger.warning("Gemini API 触发限流,等待65秒后重试...") + time.sleep(65) # 等待65秒后重试 + continue + else: + logger.error(f"Gemini 生成文案错误: \n{error_str}") + raise def _process_response(self, response: any) -> str: """处理Gemini的响应""" @@ -223,7 +244,7 @@ class MoonshotGenerator(BaseGenerator): } def _generate(self, messages: list, params: dict) -> any: - """实现Moonshot特定的生成逻辑,包含429���误重试机制""" + """实现Moonshot特定的生成逻辑,包含429误重试机制""" while True: try: response = self.client.chat.completions.create(