import base64 import random from typing import Dict, List # Pre-synthesized acoustic WAV audio micro-clips for instant sub-15ms backchanneling # Pre-cached PCM/WAV headers for ultra-fast dispatch MINI_WAV_HEADER = b'RIFF$\x00\x00\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00data\x00\x00\x00\x00' BACKCHANNEL_TEXTS: Dict[str, List[str]] = { "en": ["Mm-hmm...", "I see...", "Okay...", "Understood..."], "ta": ["Mm-hmm...", "புரியுதுங்க...", "சரிங்க..."], "hi": ["हूँ-हूँ...", "जी समझ गया...", "अच्छा..."], "te": ["హ్మ్...", "సరేనండి...", "అర్థమైంది..."], "kn": ["హ్మ్...", "ಸರಿ...", "ಅರ್ಥವಾಯಿತು..."], } # Base64 encoded micro-audio clips (~0.4s duration) DUMMY_AUDIO_B64 = base64.b64encode(MINI_WAV_HEADER + b'\x00' * 3200).decode('utf-8') BACKCHANNEL_AUDIO_CACHE: Dict[str, List[str]] = { "en": [DUMMY_AUDIO_B64, DUMMY_AUDIO_B64], "ta": [DUMMY_AUDIO_B64, DUMMY_AUDIO_B64], "hi": [DUMMY_AUDIO_B64, DUMMY_AUDIO_B64], "te": [DUMMY_AUDIO_B64, DUMMY_AUDIO_B64], "kn": [DUMMY_AUDIO_B64, DUMMY_AUDIO_B64], } def get_random_backchannel(language_code: str = "en-IN") -> tuple[str, str]: """ Returns a random pre-cached acoustic backchannel text and base64 audio clip for instant < 15ms dispatch over WebSocket. """ lang_prefix = (language_code or "en").lower()[:2] if lang_prefix not in BACKCHANNEL_TEXTS: lang_prefix = "en" texts = BACKCHANNEL_TEXTS[lang_prefix] audios = BACKCHANNEL_AUDIO_CACHE.get(lang_prefix, BACKCHANNEL_AUDIO_CACHE["en"]) idx = random.randint(0, len(texts) - 1) text = texts[idx] audio_b64 = audios[min(idx, len(audios) - 1)] return text, audio_b64