livekit-agents@1.8.8

2 hours ago

LiveKit Agents 1.8.8 lets you run OpenAI's GPT-Live with your LiveKit credentials, so a voice agent no longer needs its own OpenAI key for it. Pass the model string as the session's LLM, and LiveKit Inference serves it through a new class called DuplexModel.

Ask about this presentation

Chapters

  1. 0:00GPT-Live through LiveKit Inference
  2. 0:19How DuplexModel works
  3. 0:45New model strings
  4. 1:07Decision models
  5. 1:32Breaking changes
  6. 1:58Retired model IDs
  7. 2:17Fixes
  8. 2:46Upgrade
Show transcript

GPT-Live through LiveKit Inference

LiveKitlivekit-agents 1.8.8

GPT-Live now runs on your LiveKit credentials

session = AgentSession(llm="openai/gpt-live-1")

No separate OpenAI key. The string resolves to inference.DuplexModel.

STT→LLM→TTSREALTIMEDECISION

LiveKit Agents 1.8.8 lets you run OpenAI's GPT-Live with your LiveKit credentials, so a voice agent no longer needs its own OpenAI key for it. Pass the model string as the session's LLM, and LiveKit Inference serves it through a new class called DuplexModel.

How DuplexModel works

LiveKitinference/realtime/gpt_live.py

Delegated work runs on a backend model that Inference serves

AgentSession
llm="openai/gpt-live-1"
GPT-Live
default voice "marin"
delegation
Backend model
gpt-5.6-luna by default
Limits through Inference
Default service tier only, for delegated work
The backend must be an OpenAI LLM that Inference serves
Hosted tools such as WebSearch() are refused; function tools work
STT→LLM→TTSREALTIMEDECISION

GPT-Live speaks with the user and hands delegated work to a backend model. Through Inference that backend defaults to GPT 5.6 Luna, and your function tools work as usual. There are limits. Delegated work runs on the default service tier only, the backend has to be an OpenAI model that Inference serves, and hosted tools like web search are refused with an error. For those, use the OpenAI plugin directly.

New model strings

LiveKitinference/_realtime_models.py

Gemini Live and Grok Voice 3.0 work as model strings too

Google
Gemini Live
google/gemini-3.8-live
google/gemini-3.8-live-
extended-thinking
google/gemini-live
xAI
Grok Voice 3.0
xai/grok-voice-3.0
xai/grok-voice-
think-fast-2.0
OpenAI
GPT-Live 1
openai/gpt-live-1
STT→LLM→TTSREALTIMEDECISION

Other realtime models get the same one-string setup. Inference now accepts three Gemini Live model strings, including an extended-thinking variant. Grok Voice 3.0 replaces Think Fast 2.0 in both the Inference list and the xAI plugin. And GPT-Live 1 is the one full-duplex model on the list.

Decision models

LiveKitlivekit-plugins-typesafe

Decision models answer questions about a call in the background

model = typesafe.DecisionModel(model="jev-latest")
response = await model.evaluate(
    input=context,
    decisions={
        "handoff": llm.Probability(
            "The caller requests a human."),
        "intent": llm.Choice("What does the caller want?",
            options={"booking": …, "other": …}),
        "frustration": llm.Score("How frustrated…?",
            levels=["Calm", "Annoyed", "Angry"]),
    },
)
Probability
0 to 1 that a statement is true
Choice
one named option
Score
a position on ordered levels
STT→LLM→TTSREALTIMEDECISION

There's a new kind of model in the framework. A DecisionModel takes the conversation and a batch of named questions, and answers them all in one request, without delaying the agent's reply. The first provider is TypeSafe's Jev, through its own API or OpenRouter's Decisions API. Each question is a probability, a choice between named options, or a score on levels you describe, like calm, annoyed or angry.

Breaking changes

LiveKitBreaking changes

Two changes can break an existing agent

1.8.7
isinstance(m,
    openai.realtime.RealtimeModel)
# True for inference.RealtimeModel
1.8.8
isinstance(m, (
    openai.realtime.RealtimeModel,
    inference.RealtimeModel))
1.8.7
GPTLiveModel(voice="aster")
1.8.8
GPTLiveModel(voice="cedar")
STT→LLM→TTSREALTIMEDECISION

Two changes can break existing code. The Inference RealtimeModel no longer subclasses the OpenAI plugin's RealtimeModel, so a type check against the plugin class stops matching Inference models. Check for both classes. Incidental wildcard exports, like the realtime model module's logger, are gone too. And for GPT-Live, the unsupported aster voice is replaced by cedar, so update any voice set to aster.

Retired model IDs

LiveKitBehavior changes

Retired model IDs still connect, with a deprecation warning

openai/gpt-realtime-2→openai/gpt-realtime-2.1
openai/gpt-realtime-1.5→openai/gpt-realtime-2.1
xai/grok-voice-think-fast-2.0→xai/grok-voice-3.0
RealtimeModel(inference_class=)→no effect, removed in v2.0
STT→LLM→TTSREALTIMEDECISION

Retired GPT Realtime and Grok Voice IDs keep working. Each one logs a deprecation warning that names its replacement, so you can move over when it suits you. The realtime inference class argument is deprecated as well. It's no longer sent and it's due to be removed in version two.

Fixes

LiveKitFixes

Gemini 3.x reply instructions now go in as a user turn

Gemini 3.x
Sent as a model turn, they made the model speak its reasoning or stay silent. The wrapper keeps it from quoting them back as the user's words.
xAI
Hosted sessions emit one final user transcript per turn.
TTS chunking
A stray closing XML tag no longer cancels out a later opening tag.
STT→LLM→TTSREALTIMEDECISION

If you call generate reply with instructions on Gemini 3.1 or 3.8, those instructions now go in as a user turn. Sent as a model turn, they made the model speak its reasoning or stay silent, and the wrapper around the new user turn keeps the model from quoting them back later as the user's words. Hosted xAI sessions now emit one final user transcript per turn. And in TTS chunking, a stray closing tag can no longer cancel out a later opening one.

Upgrade

LiveKitUpgrade

Upgrade to 1.8.8 after two quick checks

Type checks against openai.realtime.RealtimeModel
GPT-Live agents set to the aster voice
$ pip install -U
  "livekit-agents[openai]==1.8.8"
$ pip install livekit-plugins-typesafe
STT→LLM→TTSREALTIMEDECISION

Before you upgrade, look for two things: type checks against the OpenAI plugin's RealtimeModel, and GPT-Live agents using the aster voice. Fix those first. Then install 1.8.8 with the extras you already use, and add the TypeSafe plugin if you want decision models. GPT-Live now runs on your LiveKit credentials.

What happened in AI today, in your inbox

One short email each evening. Read it and you’re caught up.

Built in New York with ❤️