OpenAI released GPT-Live-1 in its API on 10 September, and most of the coverage has been about benchmarks. For anyone putting a voice agent on a phone line, the architecture matters more. GPT-Live-1 is not one model that hears, thinks and acts. It is a voice model that holds the conversation and hands anything that needs reasoning or a tool to a second model. That split decides how you write the prompt, what an interruption does, what fails quietly and what ends up on the bill.
One model talks, another one works
A speech-to-speech model such as Gemini Live or Grok Voice hears audio, decides what to do, calls your tools and answers in audio, all in one model. Collapsing those stages is why realtime models feel different rather than merely faster, as the latency budget of a phone call explains. GPT-Live-1 keeps listening and speaking in one model, and it is full duplex: it listens while it speaks, and decides for itself when to take a turn and when to stop. What it deliberately leaves out is the work.
When a caller asks whether Thursday at ten is free, the voice model delegates that question to a backend text model. It keeps the caller company while the backend reasons, checks the calendar and returns a result, and then puts that result into its own words. OpenAI suggests pairing it with a fast model such as GPT-5.6 Luna for routine work like scheduling, and a larger one such as GPT-6 Astra for problems that need real reasoning.
There are two ways to run that backend. With Responses delegation, GPT-Live calls a model you configure through OpenAI's Responses API, and a framework such as LiveKit Agents runs your tool functions for it. With client delegation, your application receives the task, runs any model, agent or service you like, and decides what goes back to the voice. For most phone agents Responses delegation is the shorter road. Client delegation earns its complexity when you need to validate, redact or combine results before they are spoken. Either way, the backend is where the requests to your business systems happen, with every constraint described in tool calls to business systems and the per-system quirks on the integrations pages.
Two prompts instead of one
The split changes what a prompt is. The voice model gets a short prompt about the conversation: who the assistant is, how it sounds, how it handles interruptions and when to delegate. The backend model gets the business rules and the tool procedures. OpenAI's prompting guide recommends a delegation policy in the voice prompt with three parts: what the backend can do, when to delegate, and when not to.
You are Sam, the receptionist of a dental practice.
Speak calmly. One or two sentences per answer.
If the caller interrupts, stop and listen.
Delegation policy
Backend tools:
- Appointments: check free times, book, move or cancel.
Delegate to the backend when:
- The caller asks for a time, or wants to book, move or cancel.
- The caller corrects a request that is already in progress.
Do not delegate when:
- You can answer from the conversation so far.
- The caller greets you or asks you to repeat something.Check availability with check_availability before offering a time.
Only book within opening hours: Monday to Friday, 08:00 to 17:00.
Confirm name and date of birth before changing an existing appointment.
If a tool fails, say so and offer a callback. Never guess an outcome.Two traps sit on either side of this. Do not leave the backend prompt empty: the backend does not automatically receive the voice model's instructions, so without its own prompt it decides about tools without knowing the rules of the business. Do not move everything into the voice prompt either. A voice model carrying a page of business rules gets slower and stiffer, which is the same lesson as in prompting native-audio voice models. Logic about who is calling, such as recognising a caller from their number, belongs with the backend.
An interruption stops the voice, not the work
Full duplex makes interruptions feel natural, and that hides a trap. OpenAI's delegation guide is explicit that interrupting speech does not cancel backend work. If a caller says “actually, make it Friday” while a Thursday booking is running, the voice stops and adapts, and the backend may still book Thursday.
So a correction has to reach the backend as a correction. Your application decides whether to cancel the running task, change it, or let it finish and discard the result, and a cancellation request is not proof that anything was cancelled. Before retrying a tool that seemed to fail, check whether the action already happened, so a lost response does not turn into a second booking. The principle is the same as when a transfer fails: say what you know, and never paper over an outcome you are not sure of.
The model does not know what the caller heard
What behaves differently on a phone line
Most of the differences come from the model owning the conversation more completely than the realtime models before it.
| Behaviour | What it means on a call |
|---|---|
| The model owns turn-taking | It decides when the caller has finished and when to stop talking. Endpointing settings tuned for a pipeline have no effect. |
| Barge-in needs a detector you pass in | LiveKit drops its default voice activity detector for this model. Without one, audio keeps playing until the model stops on its own. |
| Lines are instructions, not scripts | A greeting or silence prompt is something to say in its own words, and the model can skip one that does not fit the moment. |
| Voice and instructions are fixed per session | Changing either means a new session with the conversation carried over. In a flow with several steps, that switch takes a moment. |
| Tools can change mid-session | The tool list can be updated during a call, even though the voice and both sets of instructions cannot. |
The barge-in row matters more on a phone than in a browser. Narrowband 8 kHz audio, line noise and hold music all trip detectors that were tuned on clean audio, as barge-in that actually works covers in detail. And when a call goes wrong at the telephony layer rather than in the model, the SIP logs are still where the cause is written down.
Four things that fail quietly during setup
None of these raises an error you would notice in a demo. Each one produces a call that connects and then does not behave.
- 01
Pin the endpoint
Without an explicitbase_url, the OpenAI plugin takes its address from theOPENAI_BASE_URLenvironment variable. If anything on the machine sets that variable, for a local model server or a proxy, GPT-Live connects there and the caller hears silence. Passhttps://api.openai.com/v1explicitly. - 02
Test every voice before you offer it
A voice name that your framework accepts is not necessarily one OpenAI accepts. At launch,asterwas in LiveKit's voice list but refused withforbidden: Voice session access denied, which leaves the agent silent. Start one session per voice before putting it in front of callers. - 03
Change the backend model only after a tool call
Start with the default backend and switch only after a test call in which a tool actually runs. A backend that is not delegating properly does not sound broken: the voice stays friendly, and nothing gets booked. - 04
Upgrade the agent packages together
GPT-Live support arrived in LiveKit Agents 1.8.1. If your stack pins an older release, move all the LiveKit agent packages to the same version rather than only the OpenAI plugin.
Two meters on the bill
The voice layer costs $0.05 per minute, billed per second, and it reports no tokens. The backend model is billed separately at its normal token prices, and so are the tools it uses. A minute of GPT-Live is therefore a fixed voice charge plus a variable amount that depends on how often the assistant delegates and which backend it delegates to.
| Meter | Unit | OpenAI price |
|---|---|---|
| GPT-Live-1, voice | per minute, billed per second | $0.05 |
| GPT-5.6 Luna, backend input | per million tokens | $0.20 |
| GPT-5.6 Luna, backend output | per million tokens | $1.20 |
| Larger backend models | per million tokens | higher, per model |
That has two practical consequences. A cost dashboard that counts tokens per component will show zero for the voice part, which is correct and misleading, so track seconds for the voice and tokens for the backend. And an assistant that looks something up on nearly every turn costs noticeably more than one that mostly talks. The meters that run whichever model you choose are in what a voice agent really costs per minute, and how a platform fee stacks on top is on our pricing page.
Where it fits, and where it does not
It fits calls where the conversation itself is the hard part: callers who interrupt, hesitate, change their minds or talk over background noise. OpenAI reports a response latency of 0.798 seconds against 1.41 for GPT-Realtime-2.1. Treat that as the vendor's number and measure your own chain end to end, because on a phone call the model is only one of eight stages that add up.
It does not fit when a sentence has to be spoken exactly, such as a mandatory disclosure. A pipeline with text-to-speech gives you that guarantee; what the disclosure has to contain is covered in EU AI Act Article 50. It also does not fit when audio has to stay in Europe. OpenAI processes this model outside the European Economic Area by default, so an assistant that needs EU data residency belongs on a different model. Why that requirement exists is in why voice AI needs European infrastructure, and how we handle it is on the sovereignty page.
Four calls to make first
The split is the point
In our own test calls GPT-Live-1 sounds more natural on a phone than the realtime models before it, and that is what every demo shows. Whether it holds up with real callers depends on treating it as two models: two prompts, a backend that owns its tasks and corrections, endpoints and voices you verified, and a bill you read in both seconds and tokens. The API side of setting that up is described in the developer overview.
Sources OpenAI's launch post for GPT-Live-1 in the API, Getting started with GPT-Live, Delegation and tools in GPT-Live, Prompting GPT-Live, the model page and LiveKit's GPT-Live plugin guide. The setup traps come from our own integration work.
