| """Pre-compute the curated example translations once, so the "Surprise me" |
| button can load them instantly with NO LLM call at request time. |
| |
| Run locally (needs the local LLM): python build_examples_cache.py |
| Writes examples_cache.py (a module embedding the precomputed results as JSON). |
| """ |
| import json |
| import config |
| import examples |
| import llm |
| import translate |
|
|
|
|
| def key(text, src, tgt): |
| return f"{src}|{tgt}|{text}" |
|
|
|
|
| def main(): |
| langs = set(config.LANGUAGES) |
| print("LLM backend:", llm.backend()) |
| cache = {} |
| for text, src, tgt in examples.EXAMPLES: |
| if src not in langs or tgt not in langs: |
| print("skip (unsupported lang):", src, "->", tgt) |
| continue |
| k = key(text, src, tgt) |
| if k in cache: |
| continue |
| print(f"translating {src}->{tgt}: {text[:45]}") |
| cache[k] = translate.progressive_translate(text, src, tgt) |
|
|
| payload = json.dumps(cache, ensure_ascii=False) |
| with open("examples_cache.py", "w", encoding="utf-8") as f: |
| f.write('"""Auto-generated by build_examples_cache.py — do not edit by hand.\n') |
| f.write('Precomputed example translations so the Surprise-me button needs no LLM.\n"""\n') |
| f.write("import json\n\n") |
| f.write("CACHE = json.loads(%r)\n" % payload) |
| print(f"wrote examples_cache.py with {len(cache)} entries") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|