diff --git a/docutranslate/__init__.py b/docutranslate/__init__.py
index 1c8bac4..a56f6ba 100644
--- a/docutranslate/__init__.py
+++ b/docutranslate/__init__.py
@@ -1,4 +1,4 @@
-__version__="0.2.34"
+__version__="0.2.35"
diff --git a/docutranslate/agents/agent.py b/docutranslate/agents/agent.py
index 2e40a69..9d36f2a 100644
--- a/docutranslate/agents/agent.py
+++ b/docutranslate/agents/agent.py
@@ -8,7 +8,8 @@ import httpx
from docutranslate.logger import translater_logger
-MAX_RETRY_COUNT = 3
+MAX_RETRY_COUNT = 2
+MAX_TOTAL_RETRY_COUNT = 10
class AgentArgs(TypedDict, total=False):
@@ -21,8 +22,26 @@ class AgentArgs(TypedDict, total=False):
timeout: int
+class TotalRetryCounter:
+ def __init__(self, ):
+ self.lock = Lock()
+ self.count = 0
+
+ def add(self):
+ self.lock.acquire()
+ self.count += 1
+ self.lock.release()
+ return self.reach_limit()
+
+ def reach_limit(self):
+ return self.count > MAX_TOTAL_RETRY_COUNT
+
+
+total_retry_counter = TotalRetryCounter()
+
+
# 仅使用多线程时用以计数
-class PromptsCount:
+class PromptsCounter:
def __init__(self, total: int):
self.lock = Lock()
self.count = 0
@@ -90,11 +109,15 @@ class Agent:
except httpx.HTTPStatusError as e:
translater_logger.error(f"AI请求错误 (async): {e.response.status_code} - {e.response.text}")
except httpx.RequestError as e:
- translater_logger.warning(Exception(f"AI请求连接错误 (async): {repr(e)}\nprompt:{prompt}"))
+ translater_logger.warning(Exception(f"AI请求连接错误 (async): {repr(e)}"))
except (KeyError, IndexError) as e:
translater_logger.error(f"AI响应格式错误 (async): {repr(e)}")
return ""
+ # 如果没有正常获取结果则重试
if retry and retry_count < MAX_RETRY_COUNT:
+ if total_retry_counter.add():
+ translater_logger.info(f"错误响应过多")
+ raise Exception("错误响应过多")
translater_logger.info(f"正在重试,重试次数{retry_count}")
await asyncio.sleep(0.5)
return await self.send_async(prompt, system_prompt, retry=True, retry_count=retry_count + 1)
@@ -108,7 +131,6 @@ class Agent:
system_prompt: str | None = None,
max_concurrent: int | None = None # 新增参数,默认并发数为5
) -> list[str]:
- # print(f"system_prompt:{self.system_prompt}")
max_concurrent = self.max_concurrent if max_concurrent is None else max_concurrent
total = len(prompts)
count = 0
@@ -157,15 +179,19 @@ class Agent:
except (KeyError, IndexError) as e:
translater_logger.error(f"AI响应格式错误 (sync): {repr(e)}")
return ""
+ # 如果没有正常获取结果则重试
if retry and retry_count < MAX_RETRY_COUNT:
+ if total_retry_counter.add():
+ translater_logger.info(f"错误响应过多")
+ raise Exception("错误响应过多")
translater_logger.info(f"正在重试,重试次数{retry_count}")
time.sleep(0.5)
return self.send(prompt, system_prompt, retry=True, retry_count=retry_count + 1)
else:
- translater_logger.error(f"达到重试次数上限")
+ translater_logger.error(f"达到重试次数上限,返回空行")
return ""
- def _send_prompt_count(self, prompt: str, system_prompt: None | str, count: PromptsCount) -> str:
+ def _send_prompt_count(self, prompt: str, system_prompt: None | str, count: PromptsCounter) -> str:
result = self.send(prompt, system_prompt)
count.add()
return result
@@ -176,7 +202,7 @@ class Agent:
system_prompt: str | None = None,
) -> list[str]:
system_prompts = [system_prompt] * len(prompts)
- counts = [PromptsCount(len(prompts))] * len(prompts)
+ counts = [PromptsCounter(len(prompts))] * len(prompts)
output_list = []
with ThreadPoolExecutor(max_workers=self.max_concurrent) as executor:
results_iterator = executor.map(self._send_prompt_count, prompts, system_prompts, counts)
diff --git a/docutranslate/app.py b/docutranslate/app.py
index 4d62f47..08fff5d 100644
--- a/docutranslate/app.py
+++ b/docutranslate/app.py
@@ -135,11 +135,11 @@ async def _perform_translation(params: Dict[str, Any], file_contents: bytes, ori
md_content = ft.export_to_markdown()
try:
- await httpx_client.head("https://cdn.bootcdn.net/ajax/libs/KaTeX/0.16.9/contrib/auto-render.min.js", timeout=3)
+ await httpx_client.head("https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/contrib/auto-render.min.js", timeout=3)
html_content = ft.export_to_html(title=current_state["original_filename_stem"], cdn=True)
except (httpx.TimeoutException, httpx.RequestError) as e:
- print(f"连接cdn.bootcdn.net失败,错误信息:{e}")
- translater_logger.info("无法连接cdn.bootcdn.net,使用本地js进行pdf渲染")
+ translater_logger.info(f"连接s4.zstatic.net失败,错误信息:{e}")
+ translater_logger.info("使用本地js进行pdf渲染")
html_content = ft.export_to_html(title=current_state["original_filename_stem"], cdn=False)
end_time = time.time()
duration = end_time - current_state["task_start_time"]
diff --git a/docutranslate/translater.py b/docutranslate/translater.py
index 9f5e7ce..bcedb49 100644
--- a/docutranslate/translater.py
+++ b/docutranslate/translater.py
@@ -319,9 +319,9 @@ class FileTranslater:
# language=html
pico = f""
html_template = resource_path("template/markdown.html").read_text(encoding='utf-8')
- katex_css = f"" if not cdn else r""""""
- katex_js = f"" if not cdn else r""""""
- auto_render = f'' if not cdn else r""""""
+ katex_css = f"" if not cdn else r""""""
+ katex_js = f"" if not cdn else r""""""
+ auto_render = f'' if not cdn else r""""""
# language=javascript
renderMathInElement = r"""