Spaces:
Paused
Paused
| from __future__ import annotations | |
| import argparse | |
| import json | |
| import logging | |
| from pathlib import Path | |
| from .config import PROVIDERS, TranslatorConfig | |
| from .pipeline import translate_document | |
| logger = logging.getLogger("json_translator") | |
| def main() -> None: | |
| parser = argparse.ArgumentParser(description="Translate PDFTranslator JSON output") | |
| parser.add_argument("input", help="Input JSON file") | |
| parser.add_argument( | |
| "-o", "--output", help="Output JSON file (default: INPUT.translated.json)" | |
| ) | |
| parser.add_argument("--src", dest="source_language", default="") | |
| parser.add_argument("--tgt", dest="target_language", default="") | |
| parser.add_argument("--provider", default="openrouter", choices=list(PROVIDERS)) | |
| parser.add_argument("--model", default=None) | |
| parser.add_argument("--api-key", dest="api_key", default=None) | |
| parser.add_argument("--concurrent", type=int, default=30) | |
| parser.add_argument("--chunk-bytes", type=int, default=3000) | |
| parser.add_argument("--no-glossary", action="store_true") | |
| parser.add_argument( | |
| "--no-math-fix", | |
| action="store_true", | |
| help="Skip post-translation math/layout fix pass", | |
| ) | |
| parser.add_argument( | |
| "--no-toc-fix", | |
| action="store_true", | |
| help="Skip post-translation table-of-contents fix pass", | |
| ) | |
| parser.add_argument("--length-tolerance", type=float, default=0.15) | |
| parser.add_argument("--rpm", type=int, default=None) | |
| parser.add_argument("--tpm", type=int, default=None) | |
| parser.add_argument("--verbose", action="store_true") | |
| args = parser.parse_args() | |
| logging.basicConfig( | |
| level=logging.DEBUG if args.verbose else logging.INFO, | |
| format="%(asctime)s %(levelname)s %(message)s", | |
| ) | |
| with open(args.input, encoding="utf-8") as f: | |
| doc = json.load(f) | |
| cfg = TranslatorConfig( | |
| source_language=args.source_language or doc.get("source_language", ""), | |
| target_language=args.target_language or doc.get("target_language", ""), | |
| provider=args.provider, | |
| model=args.model, | |
| api_key=args.api_key, | |
| concurrent=args.concurrent, | |
| chunk_bytes=args.chunk_bytes, | |
| glossary_enabled=not args.no_glossary, | |
| math_fix_enabled=not args.no_math_fix, | |
| toc_fix_enabled=not args.no_toc_fix, | |
| length_tolerance=args.length_tolerance, | |
| rpm=args.rpm, | |
| tpm=args.tpm, | |
| ) | |
| doc = translate_document(doc, cfg) | |
| output = args.output or (str(Path(args.input).with_suffix("")) + ".translated.json") | |
| with open(output, "w", encoding="utf-8") as f: | |
| json.dump(doc, f, ensure_ascii=False, indent=2) | |
| logger.info(f"Saved to {output}") | |
| if __name__ == "__main__": | |
| main() | |