🎙️ What Full Duplex Actually Buys You
0:00The video opens on a demo: a caller to "Layover Airlines" missed their connection to Denver, and the agent pulls up the next flight, checks on the bags, and finds an aisle seat — all while handling new requests mid-lookup. The agent is OpenAI's newest voice model, GPT-Live-1, running on LiveKit with support from day one.
What makes it different is full duplex. Most voice agents take turns: your speech gets transcribed, a language model reads it and answers, answers get spoken back — with a step in the middle that decides when you've stopped talking so the agent knows when to start. GPT-Live-1 doesn't work that way. It keeps one audio stream open in both directions for the entire call: it hears you while it's speaking, and it decides on its own when to reply and when to keep listening.
🧠 The Voice Layer vs. the Brain
1:36So where does the thinking happen? GPT-Live-1 is only the voice layer: full-duplex audio in and out, the persona, and the turn-taking. The reasoning and tool calls go to a separate model behind it — a "responses" model that you pick with a single option on the GPT-Live model called responses options.
This is a clean separation of concerns. The voice model hands over anything that needs a decision; your function tools still run in your own process, exactly as they do with any other model. The only thing that changes is which model decides to call them. The demo drives the point home with a deliberately slow Python function tool — a flight search that takes a while to return — to show that the conversation keeps flowing while the tool runs.
🎛️ Astra & Luna: Pick Your Reasoning Model
2:09You choose what goes in that reasoning slot. OpenAI offers GPT-6 Astra for the most demanding conversations, and GPT-6 Luna for fast interactions at scale. Or you can point it at your own model or your own harness — including open-source ones.
| Backend model | Strengths |
|---|---|
| GPT-6 Astra | Most demanding conversations — maximum capability |
| GPT-6 Luna | Fast interactions at scale — speed and throughput |
| Your own model / harness | Full control, including open-source models |
LiveKit handles the plumbing: AgentSession takes the full-duplex model in the same llm argument a regular model would go in, and wraps it so everything downstream — your transcripts, your metrics, everything — sees exactly what it would normally see.
💻 The Code: GPTLiveModel + AgentSession
2:38The code is startlingly small. You build a GPTLiveModel and pass it to AgentSession as the llm — and that's essentially all of it. The full-duplex model handles speech in, speech out, and turn-taking, and this one argument covers all three.
Two sets of instructions carry different jobs. The instructions on the agent are the voice persona — how the model talks to you (in the demo, the voice is set to "Marin"). The instructions inside responses options go to the backend model, telling it how to use your tools. The tools themselves are ordinary LiveKit function tools: decorate a method, start your backend call, return a string. Nothing in the tool knows it's talking to a duplex model — but while the search runs, the agent keeps listening and talking the entire time.
⚡ Why It Matters
3:14Full duplex removes the dead air that turn-based voice agents are prone to. Because the model doesn't wait for a "you've stopped talking" signal before it thinks, and because reasoning happens in a separate model, the voice layer can keep the conversation moving even while heavy work is in flight.
The architectural takeaway is bigger than one model: separating the realtime voice layer from the reasoning layer means you get latency-independent conversation — the voice never has to "stop talking to think," because it was never doing the thinking in the first place. LiveKit's day-one support and its pluggable backend (Astra, Luna, or your own harness) make that pattern something any voice-agent builder can adopt today. The docs are linked below — go build one.
✅ Key Takeaways
- Full duplex = one always-open stream. GPT-Live-1 hears you while it speaks and decides on its own when to reply, instead of waiting for a turn-detection signal.
- The voice model doesn't reason. GPT-Live-1 is audio in/out, persona, and turn-taking; reasoning and tool calls run in a separate backend model.
- You pick the brain. GPT-6 Astra for demanding conversations, GPT-6 Luna for speed at scale, or your own model/harness (open-source included).
- Tools are unchanged. Ordinary LiveKit function tools run in your process; the only difference is which model decides to call them.
- It's a drop-in swap. Build a GPTLiveModel, pass it to AgentSession as llm — one argument covers speech in, speech out, and turn-taking.
- Two instruction sets. Agent instructions = voice persona; responses-options instructions = how the backend model uses your tools.
🔗 Resources & Links
Model and API names (GPT-Live-1, GPT-6 Astra, GPT-6 Luna, GPTLiveModel, AgentSession, responses options) are taken from LiveKit's own video and description, and cross-checked against the LiveKit GPT-Live plugin docs.