Echo Omni Duplex listens to both sides of the conversation at once.
It knows who holds the floor, continuously, not once per turn.
π§ Built for agents that listen while they speak, the full-duplex member of the Echo family.
A voice agent has to make one decision over and over: speak, or stay quiet. Most turn detectors answer it by waiting for silence, and a 500 ms gap looks identical whether someone finished their sentence, paused to think, or took a breath. Agents built on timers talk over people or leave them hanging.
Echo Omni Duplex answers it differently. It listens to both channels continuously, the user and the agent, and keeps a running estimate of who holds the conversational floor. Because it never stops listening to either side, it can tell a real barge-in from an "mm-hm", and a finished sentence from a breath, while the audio is still arriving.
π― What it does
Four things can happen around the moment a speaker stops or starts. Only two of them are events.
| Situation | What it means |
|---|---|
| End of turn | The speaker has given up the floor |
| Interruption | The listener is taking the floor mid-turn |
| Mid-turn pause | The speaker stopped, but has not finished |
| Backchannel | "uh-huh", "right", "okay". Acknowledgement, not a bid for the floor |
The last two are where most systems fail. A mid-turn pause looks like an ending, and a backchannel looks like a barge-in, so detectors fire on both. Echo Omni Duplex is built around telling them apart.
π Input and output
Input: two continuous audio streams:
| Channel | Carries |
|---|---|
| Channel 1 | The user's microphone |
| Channel 2 | The agent's own output audio |
Output: emitted continuously as the conversation runs:
| Field | Description |
|---|---|
| Floor | A running estimate of which side currently holds the conversational floor |
| Event | A committed end-of-turn or interruption, at the moment it is decided |
| Confidence | A score for the decision, so you can set your own threshold |
Both channels are consumed as a live stream. There is no per-turn segmentation step, no transcript, and no voice-activity gate in front of it: the model sees the conversation as it happens. Every output at time t depends only on audio up to t, so it runs causally in a live call.
Why channel 2 matters. The strongest available cue for "has this person finished?" lives on the other side of the conversation, not the speaker's own. In a voice agent that other side is the agent, and its audio is known exactly. Feeding it in is the difference between guessing and knowing.
π Supported languages
| Code | Language |
|---|---|
en |
English |
π Performance
Measured on the public development split of TurnBench, the benchmark described below, using its own scorer.
| Task | Recall β | False-positive rate β | Latency p50 β |
|---|---|---|---|
| End-of-turn | 0.965 | 0.100 | 779 ms |
| Interruption | 0.989 | 0.098 | 602 ms |
Latency here is not compute time. It is the benchmark's own measure: how long after the real event the model committed to its decision. Most of that window is evidence the model is still waiting for, because deciding sooner means deciding on less. Every system on the benchmark pays it.
The false-positive rates are the numbers users feel. On end-of-turn, a false positive is the agent claiming the floor during a mid-turn pause, cutting somebody off mid-sentence. On interruption, it is the agent stopping because it mistook a backchannel, a cough or its own echo for a barge-in.
Echo Omni Duplex has also been evaluated on our own internal test set. Those results are not published here yet.
Results are measured on the benchmark described below. Performance may vary depending on language, deployment configuration, user behaviour and application requirements.
π TurnBench
TurnBench is Sesame AI Labs' public benchmark for conversational turn-taking: dual-channel conversation scored on recall, false-positive rate and latency.
It scores committed decisions, not probability curves, which is what a deployed agent actually has to produce. At every moment a system either takes the floor or yields, and that is what gets measured.
Its authors summarise the state of the field this way:
"No system is fast, selective, and high-recall at the same time."
That is the trade-off Echo Omni Duplex was built against. On the interruption track it is higher recall, lower false-positive rate, and roughly 300 milliseconds sooner than the strongest published reference system, all three at once, scored the same way on the same data.
It is not uniformly ahead. At least one published system commits interruptions faster still, at materially lower recall. The trade-off has moved; it has not disappeared.
π¬ Beyond the benchmark
Echo Omni Duplex runs end to end in a live full-duplex voice agent, alongside real speech-to-text, a real LLM and real text-to-speech, and its streaming path is bit-identical to the offline reference the benchmark scored.
ποΈ The Echo family
Echo Omni Duplex is the full-duplex member. The other three decide one turn at a time, which suits a half-duplex pipeline; Duplex decides continuously, which is what an agent needs when it is listening and speaking at once.
| Model | Modality | Decides | Best for |
|---|---|---|---|
echo-small |
Semantic | Per turn | The lowest latency. The default when responsiveness matters most |
echo-large |
Semantic | Per turn | Higher accuracy, when it matters more than raw speed |
echo-omni |
Audio + semantic | Per turn | The widest coverage, with acoustic understanding on top of the semantics |
echo-omni-duplex |
Two-channel audio | Continuously | Full-duplex agents that listen while they speak |
π Get access
Echo Omni Duplex is served for you. There is nothing to download, host, or keep running. Plug it straight into your voice pipeline alongside your existing STT, LLM and TTS.
# Set ZERORUNTIME_AUTH_TOKEN in your environment.
from zeroruntime.inference import TurnDetector
# Full duplex: both channels streamed continuously, events pushed back as they commit
turn_detector = TurnDetector(model="echo-omni-duplex")
Echo Omni Duplex by Zero Runtime