Hear the turn
TEN-VAD runs beside the session, finding speech boundaries without another network hop.
Listen, transcribe, reason, and speak without stitching four public APIs together. One realtime contract carries the entire turn.
The session keeps audio and meaning in motion. Boundaries stay explicit, while the user experiences one conversation.
TEN-VAD runs beside the session, finding speech boundaries without another network hop.
Realtime transcription starts on speech and emits immutable transcript deltas.
Turn policy chooses whether to wait, acknowledge, answer, or interrupt.
Provider-neutral audio decoding streams raw response audio back into the session.
A Durable Object owns each session. Local WASM handles signal processing. Provider Workers remain composable and private behind service bindings.
→ input_audio_buffer.append
← input_audio_buffer.speech_started
← conversation.item.input_audio_transcription.delta
← response.output_audio.delta
← response.done The gateway exposes an OpenAI-compatible Realtime WebSocket while specialized Workers own transcription, reasoning, and speech generation.
Configure an agentOne bounded object owns conversation order, quota state, audio flow, interruption, and transparent hibernation.
RNNoise, SpeexDSP, and TEN-VAD run with the Worker. Audio is prepared before it reaches transcription.
STT, LLM, image analysis, and TTS stay behind explicit Cloudflare service bindings.
Use a familiar Realtime WebSocket shape while keeping model routing and provider credentials private.
Voice should feel like a conversation,
not a chain of requests.