| """Pre-render the featured phrases (English -> Kalenjin -> Cheps WAV) and write |
| a phrasebook.json + audio/featured_*.wav bundle so they play back INSTANTLY in |
| the app (no live Modal call on the hot demo path). Run locally before deploy: |
| |
| INFERENCE_TOKEN=... python prerender.py |
| """ |
|
|
| import hashlib |
| import json |
| import os |
|
|
| import requests |
|
|
| TRANSLATE_URL = "https://tonykipkemboi--kalenjin-cascade-api-textcascade-translate.modal.run" |
| TTS_URL = "https://tonykipkemboi--kalenjin-tts-serve-kalenjintts-fastapi-app.modal.run/synthesize" |
| TOKEN = os.environ["INFERENCE_TOKEN"] |
|
|
| FEATURED = [ |
| "Thank you", "Good morning", "How are you?", "I love you", |
| "Water", "Milk", "My child", "Come and eat", |
| ] |
|
|
| HERE = os.path.dirname(os.path.abspath(__file__)) |
| AUDIO = os.path.join(HERE, "audio") |
| os.makedirs(AUDIO, exist_ok=True) |
|
|
| book = {} |
| for phrase in FEATURED: |
| t = requests.post(TRANSLATE_URL, json={"text": phrase}, timeout=70).json() |
| kal, sw = t.get("kalenjin", "").strip(), t.get("swahili", "").strip() |
| wav = requests.post( |
| TTS_URL, json={"text": kal}, |
| headers={"Authorization": f"Bearer {TOKEN}"}, timeout=150, |
| ).content |
| key = hashlib.sha256(phrase.encode()).hexdigest()[:12] |
| fname = f"featured_{key}.wav" |
| with open(os.path.join(AUDIO, fname), "wb") as f: |
| f.write(wav) |
| book[phrase] = {"kalenjin": kal, "swahili": sw, "wav": f"audio/{fname}"} |
| print(f" {phrase!r:22} -> {kal!r:28} ({len(wav)} bytes)") |
|
|
| with open(os.path.join(HERE, "phrasebook.json"), "w") as f: |
| json.dump(book, f, ensure_ascii=False, indent=2) |
| print(f"wrote phrasebook.json ({len(book)} phrases)") |
|
|