]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🔨 Update translation script to retry if LLM-response doesn't pass validation with...
authorMotov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Wed, 4 Feb 2026 12:05:19 +0000 (15:05 +0300)
committerGitHub <noreply@github.com>
Wed, 4 Feb 2026 12:05:19 +0000 (13:05 +0100)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
scripts/translate.py

index eba4ad6a2f90fb0d53f9e63d3c0c4a75e9fe8caa..9eda7b39039c1c8599416ce23b5392f55e96a4fc 100644 (file)
@@ -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")