How GPT-Live Kills the Turn Detector: A System Design Teardown
OpenAI's GPT-Live writeup is a real systems engineering case study: full-duplex audio, hot model handoffs, a 6-to-1 round-trip protocol, and capacity planning that isn't about GPU throughput. We break down the five design patterns worth studying, with a quiz.
Every voice assistant before this one had the same bug: it had to guess when you were done talking. Guess too soon and you cut the user off. Guess too late and the reply feels sluggish. OpenAIâs answer in GPT-Live isnât a better guesser, itâs removing the guess entirely. The model listens and speaks at the same time, so thereâs no turn detector left to get wrong.
Thatâs the headline, but the more useful part of OpenAIâs writeup is everything underneath it: a real production system with a protocol redesign, a hot-swap mechanism for multi-hour stateful sessions, and a capacity-planning lesson that generalizes way beyond voice. This is written as a study piece: each mechanism gets a plain explanation of the underlying pattern, so you can recognize it the next time you meet it in a different system.
- 6 round trips â 1 to start a session, via a custom protocol called WARP
- p95 latency on the new Go implementation â p50 on the old Python system: same latency floor, far fewer bad outliers
- 75.7% human preference win rate over the previous Advanced Voice Mode
- Third-party testing found GPT-Live is actually ~498ms slower to go silent when a user interrupts it, a real cost of the full-duplex design worth sitting with
- Two independent state tracks per session: a speculative transcript for the UI and an authoritative one for analytics
The core move: delete the turn detector
Classic voice assistants are half-duplex: like a walkie-talkie, only one side transmits at a time. A separate turn-detection model watches the audio stream and decides âthe user is done, go.â That decision is a single point of failure sitting on the critical path of every response, and itâs fundamentally a bet against incomplete information, since silence doesnât reliably mean âfinished.â
Study hook: Full-duplex vs. half-duplex
Borrowed straight from telecom. Half-duplex (walkie-talkie, old phone lines) means only one party transmits at a time; someone has to yield the channel. Full-duplex (a phone call) means both sides can transmit and receive simultaneously. Applying this to a voice model turns âdetect the end of an utteranceâ from a hard gate into a continuous background signal the model is always weighing, which is why GPT-Live can react to an interruption instead of waiting to be told one happened.
Instead of segmenting speech into discrete turns up front, GPT-Liveâs application server watches partial transcripts and timing signals continuously and infers who has the floor after the fact. Turns are a derived view, not a gate you have to pass through before the model is allowed to respond.
Two paths, one clean boundary
The system splits into a live media path (audio in, audio out, has to be fast, no exceptions) and an asynchronous path (tool calls, web search, delegation to bigger models, can take as long as it needs). The voice model itself stays lightweight enough to keep talking in real time; anything heavy gets handed off.
Two-path architecture
Live media path
Mic in â WebRTC transport â full-duplex voice model â speaker out. Sub-second, continuous, minimal buffering.
Async path
Delegates reasoning, tool use, and web search to GPT-5.5 in the background while the voice model stalls gracefully (âlet me check on thatâŚâ).
Delegation isnât free, so OpenAI pre-pays the cost before itâs needed: when a session starts, the application server opens an inference session with the frontier model and prefills it with the conversation context immediately, then holds that session open with stable affinity for the rest of the call, combined with prompt caching. By the time the user says something that needs GPT-5.5, the expensive part (processing everything said so far) is already done.
Study hook: Speculative vs. authoritative state
The same split shows up in databases (read replicas vs. primary), UIs (optimistic updates vs. server confirmation), and distributed consensus. Show the user a fast, best-effort view that might get quietly corrected, while a slower, durable view stays the source of truth. GPT-Live keeps a speculative transcript that updates live as people talk over each other, and a separate authoritative transcript finalized for analytics. Neither one has to be both fast and certain.
Keeping a multi-hour session alive without freezing it
Voice sessions run long, and the modelâs context keeps growing the whole time. Eventually you hit two walls: the context window fills up, or you need to move the session to a different model version. A naive fix (pause, reload, resume) would produce an audible gap. GPT-Live avoids it with the same trick both times: run two model instances in parallel and hand off between them.
When a transition is needed, the system warms a replacement model instance alongside the one thatâs live, prefills it with the current sessionâs context, runs inference against both simultaneously, and cuts over to the new one only once itâs fully caught up. Context compaction (summarizing an overlong conversation down to fit the model) is treated as just another instance of this same transition, not a special case.
Study hook: Hot handoff (a.k.a. blue-green, but for model state)
Blue-green deployment keeps an old server version running while a new one boots, then flips traffic once the new one is healthy, so the switch is invisible to users. GPT-Live applies the identical idea to LLM inference state: the expensive part of âswitching modelsâ is rebuilding the KV cache (the modelâs working memory of the conversation so far) via a fresh prefill. Warming the replacement in the background and only cutting over once itâs caught up turns a visible pause into nothing the user notices.
Six round trips to one
Starting a voice session used to mean: ICE negotiation, DTLS handshake, SCTP handshake, then opening data channels, each its own round trip before a single audio frame could move. OpenAI built a protocol called WARP (WebRTC Abridged Roundtrip Protocol) that piggybacks and pre-negotiates these steps, cutting startup from six round trips to one. Combined with an âInstant Connectâ mode that pre-negotiates parameters without reserving server capacity, a client can start a session with a single UDP packet.
Session startup: round trips before a frame moves
Standard WebRTC negotiation vs. WARP
Study hook: Collapsing round trips
This is the same family of trick as TLS 1.3âs shortened handshake or QUICâs 0-RTT resumption: instead of negotiating parameters sequentially and waiting for a confirmation after each step, you piggyback multiple negotiations onto the same round trip, or pre-agree on parameters ahead of time so thereâs nothing left to negotiate live. Every round trip you remove is one full network latency period (often 50 to 150ms) shaved off time-to-first-frame, which matters far more for a live call than for a one-shot API request.
Capacity planning isnât a GPU math problem
The most transferable lesson in the piece has nothing to do with voice specifically. The teamâs first instinct was to size capacity by asking âhow many requests can a GPU handle?â Thatâs the wrong question for a system with long-lived, latency-sensitive sessions: the real question became âhow many concurrent sessions can we sustain while keeping every audio frame on schedule?â A session thatâs live for twenty minutes but idle 80% of the time consumes capacity very differently than a burst of short stateless requests, and production traffic surfaced supporting components that saturated earlier than load tests predicted, causing requests to queue and latency to compound in ways raw GPU throughput numbers never would have shown.
Study hook: Throughput capacity vs. concurrency capacity
Classic queueing theory distinction. A systemâs throughput ceiling (requests/second it can process) and its concurrency ceiling (sessions it can hold open at once, each pinning memory, connections, and scheduling slots) are different numbers, and the second one bites first in any system with long-lived stateful connections, from database connection pools to WebSocket servers to, here, live voice sessions. Load testing with short synthetic requests routinely misses this because it never builds up real concurrency.
The caveat worth sitting with
OpenAI didnât publish formal latency or word-error-rate numbers for GPT-Live, only relative comparisons and a 75.7% human-preference win rate against the old system. Independent testing (by Agora, measuring real sessions) found that when a user deliberately interrupts GPT-Live mid-response, it takes about 498ms longer to actually go silent than the old turn-based Advanced Voice Mode did.
Thatâs the honest tradeoff of full-duplex done this way: a system built to never wrongly cut you off, by continuously weighing whether to yield rather than gating on a hard turn boundary, can end up slower to stop once itâs already decided to keep talking. Removing a turn detector removes its false cutoffs, but the model still has to notice an interruption and decide to yield, and that decision has its own latency. Full-duplex fixes one failure mode by design; it doesnât automatically fix the other one, and this system apparently hasnât yet.
Quiz: check your understanding
Five questions, one per pattern. Click each to reveal the answer.
1. A voice model that can listen and generate speech at the same time, with no separate âyour turn / my turnâ gate, is an example of what communications pattern?
Full-duplex communication, both parties can transmit and receive simultaneously, unlike half-duplex (walkie-talkie style) where only one side transmits at a time.
2. GPT-Live keeps a fast-updating transcript for the UI and a separate, slower, final transcript for analytics. Whatâs the general name for this pattern?
Speculative (optimistic) state vs. authoritative state: a fast best-effort view users see immediately, decoupled from a slower, durable source of truth.
3. To swap model versions or compact context mid-session without an audible gap, GPT-Live warms a second model instance, prefills it, and cuts over once itâs caught up. What deployment pattern is this analogous to?
Blue-green deployment: keep the old instance serving while the new one comes up to speed in parallel, then flip traffic so the switch is invisible.
4. WARP cuts session startup from six network round trips to one by piggybacking and pre-negotiating handshake steps. What other protocol optimizes startup the same way?
QUICâs 0-RTT resumption (and TLS 1.3âs shortened handshake) â both collapse sequential negotiation steps so a connection can start useful work sooner.
5. The GPT-Live team found that âhow many requests can a GPU handle?â was the wrong capacity question. What was the right one, and why did short-request load tests miss it?
âHow many concurrent sessions can we sustain while keeping every frame on schedule?â Long-lived stateful sessions hit a concurrency ceiling (memory, connections, scheduling slots held open) before they hit a raw throughput ceiling, and short synthetic load tests never build up real concurrency, so they donât surface it.
Liked this? We send one like it every week.
Best papers, one email. No spam.