visuddhinanda преди 8 месеца
родител
ревизия
b04f49f848
променени са 2 файла, в които са добавени 33 реда и са изтрити 8 реда
  1. 23 4
      ai-translate/ai_translate/service.py
  2. 10 4
      ai-translate/ai_translate/worker.py

+ 23 - 4
ai-translate/ai_translate/service.py

@@ -194,7 +194,8 @@ class AiTranslateService:
             # 推理过程写入discussion
             # 推理过程写入discussion
             if response_llm.get('reasoningContent'):
             if response_llm.get('reasoningContent'):
                 topic_children.append(response_llm['reasoningContent'])
                 topic_children.append(response_llm['reasoningContent'])
-            self._sentence_discussion(s_uid, message.prompt, topic_children)
+            self._sentence_discussion(
+                s_uid, message.prompt, topic_children)
 
 
             # 修改task 完成度
             # 修改task 完成度
             progress = self._set_task_progress(
             progress = self._set_task_progress(
@@ -542,7 +543,7 @@ class AiTranslateService:
 
 
         return progress
         return progress
 
 
-    def handle_failed_translate(self, message_id: str, translate_data: List[Any], exception: Exception):
+    def handle_failed(self, message_id: str, message: str, exception: Exception):
         """处理失败的翻译任务"""
         """处理失败的翻译任务"""
         try:
         try:
             # 彻底失败时的业务逻辑
             # 彻底失败时的业务逻辑
@@ -551,11 +552,29 @@ class AiTranslateService:
 
 
             # 将故障信息写入task discussion
             # 将故障信息写入task discussion
             if self.task_topic_id:
             if self.task_topic_id:
-                error_message = f"**处理失败ai任务时出错** 请重启任务 message id={message_id} 错误信息:{str(exception)}"
+                error_message = f"**任务处理失败** 请重启任务 \n- message id={message_id} \n- 错误信息:{message} \n- 异常:{str(exception)}"
                 d_id = self._task_discussion(
                 d_id = self._task_discussion(
                     self.task.id,
                     self.task.id,
                     'task',
                     'task',
-                    self.task.title,
+                    '任务处理失败',
+                    error_message,
+                    self.task_topic_id
+                )
+        except Exception as e:
+            logger.error(f'处理失败ai任务时出错: {str(e)}')
+
+    def handle_retry(self, message_id: str, message: str, exception: Exception):
+        """处理失败的翻译任务"""
+        try:
+            # 失败时的业务逻辑
+
+            # 将故障信息写入task discussion
+            if self.task_topic_id:
+                error_message = f"任务处理出错 正在重试 \n- message id={message_id} \n- 错误信息:{message} \n- 异常:{str(exception)}"
+                d_id = self._task_discussion(
+                    self.task.id,
+                    'task',
+                    '任务处理出错',
                     error_message,
                     error_message,
                     self.task_topic_id
                     self.task_topic_id
                 )
                 )

+ 10 - 4
ai-translate/ai_translate/worker.py

@@ -23,7 +23,9 @@ def handle_message(redis, ch, method, id, content_type, body, api_url: str, open
             f'time is not enough for complete current message id={id}. requeued')
             f'time is not enough for complete current message id={id}. requeued')
         ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)
         ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)
     except LLMFailException as e:
     except LLMFailException as e:
-        logger.warning(f'message {id} LLMFailException')
+        errMsg = f'message {id} LLM Fail'
+        logger.warning(errMsg)
+        consumer.handle_failed(id, errMsg, e)
         ch.basic_nack(delivery_tag=method.delivery_tag,
         ch.basic_nack(delivery_tag=method.delivery_tag,
                       requeue=False)
                       requeue=False)
     except Exception as e:
     except Exception as e:
@@ -33,8 +35,10 @@ def handle_message(redis, ch, method, id, content_type, body, api_url: str, open
         retryKey = f'{redis[1]}/message/retry/{id}'
         retryKey = f'{redis[1]}/message/retry/{id}'
         retry = int(redis[0].get(retryKey)
         retry = int(redis[0].get(retryKey)
                     or 0) if redis[0].exists(retryKey) else 0
                     or 0) if redis[0].exists(retryKey) else 0
-        if retry > MaxRetry:
-            logger.warning(f'超过最大重试次数[{MaxRetry}],任务失败 id={id}')
+        if retry >= MaxRetry:
+            errMsg = f'超过最大重试次数[{MaxRetry}],任务失败 id={id}'
+            logger.warning(errMsg)
+            consumer.handle_failed(id, errMsg, e)
             # NACK 丢弃或者进入死信队列
             # NACK 丢弃或者进入死信队列
             ch.basic_nack(delivery_tag=method.delivery_tag,
             ch.basic_nack(delivery_tag=method.delivery_tag,
                           requeue=False)
                           requeue=False)
@@ -42,7 +46,9 @@ def handle_message(redis, ch, method, id, content_type, body, api_url: str, open
             retry = retry+1
             retry = retry+1
             redis[0].set(retryKey, retry)
             redis[0].set(retryKey, retry)
             # NACK 并重新入队
             # NACK 并重新入队
-            logger.warning(f'消息处理错误,重新压入队列 [{retry}/{MaxRetry}]')
+            errMsg = f'消息处理错误,重新压入队列 [{retry}/{MaxRetry}]'
+            logger.warning(errMsg)
+            consumer.handle_retry(id, errMsg, e)
             ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)
             ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)
     finally:
     finally:
         is_stopped()
         is_stopped()