Просмотр исходного кода

Merge pull request #2319 from visuddhinanda/development

Development
visuddhinanda 9 месяцев назад
Родитель
Сommit
4f319c06cb

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

@@ -25,6 +25,18 @@ class SectionTimeout(Exception):
         super().__init__(self.message)
 
 
+class TaskFailException(Exception):
+    def __init__(self, message="task fail"):
+        self.message = message
+        super().__init__(self.message)
+
+
+class LLMFailException(Exception):
+    def __init__(self, message="LLM request fail"):
+        self.message = message
+        super().__init__(self.message)
+
+
 @dataclass
 class TaskProgress:
     """任务进度"""
@@ -325,8 +337,9 @@ class AiTranslateService:
 
         logger.info(
             f'{self.queue} LLM request {message.model.url} model: {param["model"]}')
-        logger.debug(
-            f'{self.queue} LLM api request: {message.model.url}, data: {json.dumps(param)}')
+
+        # logger.debug(
+        #     f'{self.queue} LLM api request: {message.model.url}, data: {json.dumps(param)}')
 
         # 写入 model log
         model_log_data = {
@@ -376,7 +389,7 @@ class AiTranslateService:
                 # 某些错误不需要重试
                 if status in [400, 401, 403, 404, 422]:
                     logger.warning(f"客户端错误,不重试: {status}")
-                    raise e
+                    raise LLMFailException
 
                 # 服务器错误或网络错误可以重试
                 if attempt < max_retries:
@@ -396,7 +409,7 @@ class AiTranslateService:
                     logger.error(e)
 
         ai_data = response.json()
-        logger.debug(f'{self.queue} LLM http response: {response.json()}')
+        # logger.debug(f'{self.queue} LLM http response: {response.json()}')
 
         response_content = ai_data['choices'][0]['message']['content']
         reasoning_content = ai_data['choices'][0]['message'].get(

+ 17 - 17
ai-translate/ai_translate/worker.py

@@ -1,18 +1,12 @@
 import logging
 
-from .service import AiTranslateService, SectionTimeout, Message
+from .service import AiTranslateService, SectionTimeout, LLMFailException, Message
 from .decode_dataclass import ns_to_dataclass
 from .utils import is_stopped
 
 logger = logging.getLogger(__name__)
 
 
-class TaskFailException(Exception):
-    def __init__(self, message="task fail"):
-        self.message = message
-        super().__init__(self.message)
-
-
 def handle_message(redis, ch, method, id, content_type, body, api_url: str, customer_timeout: int):
     MaxRetry: int = 3
     try:
@@ -22,27 +16,33 @@ def handle_message(redis, ch, method, id, content_type, body, api_url: str, cust
         messages = ns_to_dataclass([body], Message)
         consumer.process_translate(id, messages[0])
         ch.basic_ack(delivery_tag=method.delivery_tag)  # 确认消息
+        logger.info(f'message {id} ack')
     except SectionTimeout as e:
         # 时间到了,活还没干完 NACK 并重新入队
+        logger.info(
+            f'time is not enough for complete current message id={id}. requeued')
         ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)
+    except LLMFailException as e:
+        ch.basic_ack(delivery_tag=method.delivery_tag)  # 确认消息
+        logger.info(f'message {id} ack')
     except Exception as e:
         # retry
         retryKey = f'{redis[1]}/message/retry/{id}'
         retry = int(redis[0].get(retryKey)
                     or 0) if redis[0].exists(retryKey) else 0
         if retry > MaxRetry:
-            logger.error(f'超过最大重试次数[{MaxRetry}],任务失败')
+            logger.warning(f'超过最大重试次数[{MaxRetry}],任务失败 id={id}')
             # NACK 丢弃或者进入死信队列
             ch.basic_nack(delivery_tag=method.delivery_tag,
                           requeue=False)
-            raise TaskFailException
-        retry = retry+1
-        redis[0].set(retryKey, retry)
-        # NACK 并重新入队
-        logger.warning(f'消息处理错误,重新压入队列 [{retry}/{MaxRetry}]')
-        ch.basic_nack(delivery_tag=method.delivery_tag,
-                      requeue=True)
-        logger.error(f"error: {e}")
-        logger.exception("发生异常")
+        else:
+            retry = retry+1
+            redis[0].set(retryKey, retry)
+            # NACK 并重新入队
+            logger.warning(f'消息处理错误,重新压入队列 [{retry}/{MaxRetry}]')
+            ch.basic_nack(delivery_tag=method.delivery_tag,
+                          requeue=True)
+            logger.error(f"error: {e}")
+            logger.exception("发生异常")
     finally:
         is_stopped()

+ 5 - 1
api-v8/app/Http/Api/MdRender.php

@@ -399,9 +399,13 @@ class MdRender
                 $lines = explode("\n", $markdown);
                 $newLines = array();
                 foreach ($lines as  $line) {
-                    if (strstr($line, '=') === FALSE) {
+                    if (
+                        strstr($line, '=') === FALSE &&
+                        strstr($line, '$') === FALSE
+                    ) {
                         $newLines[] = $line;
                     } else {
+                        $line = str_replace('$', '=', $line);
                         $nissaya = explode('=', $line);
                         $meaning = array_slice($nissaya, 1);
                         $meaning = implode('=', $meaning);