""" Multilingual variant generator. ``generate_language_variants`` takes a filled BranchGraph and a list of target languages, and returns a list of dicts suitable for persisting into ``ix_node_variants`` via the repo. Phase 1 implementation: passthrough — same narration/subtitles in every target language with an ``[untranslated:]`` prefix. This keeps the pipeline testable without an LLM/translator in the loop. Phase 2 swaps in a real translator behind the same signature. """ from __future__ import annotations from typing import Any, Dict, List from ..branching.graph import BranchGraph def generate_language_variants( graph: BranchGraph, *, target_languages: List[str], ) -> List[Dict[str, Any]]: """Produce variant rows (as dicts) for every (node, language) pair where language is NOT already the authoring language ('en' by convention). No side effects — the caller persists. """ out: List[Dict[str, Any]] = [] for lang in target_languages: lang = (lang or "").strip() if not lang or lang == "en": continue for node in graph.nodes: narration = (node.narration or "").strip() if not narration: continue out.append({ "node_id": node.id, "language": lang, "narration": f"[untranslated:{lang}] {narration}", "subtitles": f"[untranslated:{lang}] {narration}", "audio_asset_id": "", "video_asset_id": "", }) return out