Contents

Stream setup

Voice

Chat replies spoken through custom TTS and realtime speech-to-speech use separate paths. The realtime voice process is not part of the bridge.

Chat replies with custom TTS

Configure tts for custom TTS on chat replies. Set tts.api_key_env to the environment variable that holds the key; GOOGLE_API_KEY is used by the documented setup and deploy flows. limits.max_tts_seconds_per_day can cap daily speech time.

Realtime speech-to-speech

Run the separate voice process with python3 packages/voice/realtime_bridge.py. The browser microphone sends audio to that process, and the avatar must be built with VITE_REALTIME_URL. Reply audio is held sentence by sentence until the JEV gate ships it. A DROP, REWRITE, timeout, unavailable gate, or missing transcript drops that audio. The browser can cancel an in-flight turn for barge-in.

Set REALTIME_EVENTS_URL to send verdicts to the dashboard Voice page; for example, http://127.0.0.1:8440/api/voice. The event delivery is best-effort and does not block voice playback.

Docker deployment

The self-hosted Docker kit includes the bridge, avatar page, and dashboard; it does not include the separate realtime voice process.