|
|
|
@ -10,6 +10,7 @@ from typing import Annotated |
|
|
|
import git |
|
|
|
import typer |
|
|
|
import yaml |
|
|
|
from doc_parsing_utils import check_translation |
|
|
|
from github import Github |
|
|
|
from pydantic_ai import Agent |
|
|
|
from rich import print |
|
|
|
@ -119,9 +120,30 @@ def translate_page( |
|
|
|
] |
|
|
|
) |
|
|
|
prompt = "\n\n".join(prompt_segments) |
|
|
|
print(f"Running agent for {out_path}") |
|
|
|
result = agent.run_sync(prompt) |
|
|
|
out_content = f"{result.output.strip()}\n" |
|
|
|
|
|
|
|
MAX_ATTEMPTS = 3 |
|
|
|
for attempt_no in range(1, MAX_ATTEMPTS + 1): |
|
|
|
print(f"Running agent for {out_path} (attempt {attempt_no}/{MAX_ATTEMPTS})") |
|
|
|
result = agent.run_sync(prompt) |
|
|
|
out_content = f"{result.output.strip()}\n" |
|
|
|
try: |
|
|
|
check_translation( |
|
|
|
doc_lines=out_content.splitlines(), |
|
|
|
en_doc_lines=original_content.splitlines(), |
|
|
|
lang_code=language, |
|
|
|
auto_fix=False, |
|
|
|
path=str(out_path), |
|
|
|
) |
|
|
|
break # Exit loop if no errors |
|
|
|
except ValueError as e: |
|
|
|
print( |
|
|
|
f"Translation check failed on attempt {attempt_no}/{MAX_ATTEMPTS}: {e}" |
|
|
|
) |
|
|
|
continue # Retry if not reached max attempts |
|
|
|
else: # Max retry attempts reached |
|
|
|
print(f"Translation failed for {out_path} after {MAX_ATTEMPTS} attempts") |
|
|
|
raise typer.Exit(code=1) |
|
|
|
|
|
|
|
print(f"Saving translation to {out_path}") |
|
|
|
out_path.write_text(out_content, encoding="utf-8", newline="\n") |
|
|
|
|
|
|
|
|