hoang.nguyen6
deploy
f66643d unverified
Raw
History Blame Contribute Delete
2.75 kB
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()