LiveKit Inference timeouts happening since past 2 weeks

We noticed a significant increase in GPT-5.4-mini timeouts when using LiveKit Inference since last two weeks

We’ve been running GPT-5.4-mini in production for our real-time voice agents, and it has been very stable until recently. Starting from 14th July, we began seeing a noticeable increase in timeout errors, with 21 July being the worst day, where we recorded around 70 timeout incidents in a single day.

The issue appears to be intermittent, most requests succeed, but some requests stall and eventually time out, impacting the voice agent experience.

We’re trying to determine whether:

  • Others are seeing similar behaviour.
  • This is specific to GPT-5.4-mini or affects other OpenAI models as well.

It would be helpful to know whether this is an isolated issue or something affecting multiple deployments.

We dont have observability enabled, but could share whole session report json if needed.

To add on, it happens with recent released gemma4 model too, so i doubt its something with livekit inference, region we used was eu-central

I also observed that thing not only for specific models its happening for all inference models i think.

The issue is still happening, so on weekend saturday, sunday, it seems to have been fixed with about 7 timeouts, but today it again rose to 50+ timeouts in single day for gemma4 model livekit inference, its extremely dissapoitning as for same modes if i dont use livekit inference and directly use providers like openai, than issue seems to be resolved, so its issue in livekit inference. If issue does not resolves, i am thinking to switch stack away to different provider.

Are you using our hosted gemma model for this test? Hosted by LiveKit | LiveKit Documentation

I am looking at the P95 TTFT latency over the past 14 days and the hosted model is consistently faster than gpt-5.4-mini, it’s not even close.

Looking at the 5.4-mini graph specifically, it’s difficult to say if any increase is statistically significant to be honest but I would not expect you to see any better figures by going to the provider directly - unfortunately, these things are very difficult to compare apples to apples.

Right now, I’m pretty sure you can combine Inference with plugins in the Fallback array, which might also help if you were considering a direct approach:

    llm=llm.FallbackAdapter([
        inference.LLM("openai/gpt-5.4-mini"),   # LiveKit gateway (keyless, metered)
        openai.LLM(model="gpt-5.4-mini"),       # direct OpenAI, your own key
    ]),

Related, I know the team are making efforts to improve the fallback capabilities of our Inference models in general, which would help in this scenario, but I don’t see anything publicly announced yet I’m afraid.

Yes i am using livekit inference in cloud, so its hosted by livekit (gemma4) model, yeah i agree its faster than 5.4 mini (hosted by livekit) and have been using from last week, but the number of timeouts are huge, its only happening with livekit inference hosted models and not via third party. So its happening for all models hosted via livekit.

Attaching image, so its very serious issue, as livekit inference hosted models are only once that has this issue, and people who track timeouts can notice, otherwise fallback models will be used and it works fine.

Thanks, I see this thread got flagged internally so @Neil_Dwyer may have additional feedback.

I should have picked up on this with my earlier answer, but since we only serve the gemma model from from US, I’m sure that will be a factor in the latency (and explain why your dashboard doesn’t match the numbers I’m seeing internally). Please see the thread below that clarifies our plans to bring the model to the EU soon:

Hmm right, so actually its not happening just for gemma4 as i mentioned, i tried multiple livekit hosted models like gemma, gpt 5.4mini, grok one, i can see timeouts happening for all, it was all working fine before two weeks, so something has changed in livekit hosted models in livekit inference that is causing timeouts?

By grok one, do you mean grok-4-1 ?

Just to be clear, the only model we are hosting is gemma4, we aren’t hosting gpt 5.4-mini or grok-4-1, the latter two are just served through Inference.

What is the data source for that graph above?

yeah i mean others are via livekit inference, but intresting thing is if i directly use third party provider via its api key, it works and i have no timeouts, timeouts happen only via livekit inference. I am capturing common graph, so i dont have per model timeout data. so i am using gemma4 only currently and yesterday it still has 22 timeouts. i understand that its in us and not in eu-region, but it should lead to extra delay and still timeouts should not happend.

I need to check with the team, but looking at your server logs for gemma4 and the number of canceled requests, it looks like your project is an outlier compared with the number of similar requests on other projects.

What parameters are you invoking the model with?

And just so I understand, how exactly are you sourcing the data for your graph? Is it Events and error handling | LiveKit Documentation ?

This is how gemma model is used

  return inference.LLM(
    model=f"google/{cfg.model or _DEFAULTS['google']}",
    extra_kwargs=extra, # with temperature 0.7 and max_completion_tokens 250
  )


Tiemouts are captured live from the Agents SDK event callbacks in our worker:

  • Errorserror events on each adapter plus the AgentSession “error” event (per your “Events and error handling” doc pattern), recorded as {type, message, recoverable, phase}.
  • Fallbacksstt/llm/tts_availability_changed events; we record every transition and whether the fallback ever engaged.

On timeouts specifically — we don’t have a single “timeout” metric; they show up three ways:

  1. LLM attempt timeout — our LLM FallbackAdapter runs with attempt_timeout=2.5s (I was facing same issue with default 5.0. so i reduced as it was causing more latency). A slow primary triggers llm_availability_changed and a switch to fallback, so these appear as fallback engagements.
  2. Provider API timeouts — surface as error events with type APITimeoutError (or provider equivalent); we count them from the recorded error type.

So we have been using livekit from past 2 months, and issue started from 14th july, for 5.4 mini openai model and from last week we have switched to gemma model as it was more faster.

Note that on some days timeouts dropped significantly and almost 0-4, while on other days its much higher, and traffic/sessions are mostly uniform on all these days of july

Thanks, I’m looking into this, can you please share a couple of session IDs (RM_) that use Gemma and show the timeouts, we can then take a deeper look what is happening

Thanks, still investigating this. Hope to provide an update early next week.

https://cloud.livekit.io/projects/p_310ab3c567u/sessions/RM_L5PMbNUoCjSH/observability?mode=transcript&t=1785504318009

https://cloud.livekit.io/projects/p_310ab3c567u/sessions/RM_uchq4ygwDQd8/observability?mode=transcript

Here’s some sessions, we have two environment dev/prod, both having same issues.

have enabled share with livekit team in both sessions.

Session : RM_uchq4ygwDQd8, So it was working as normal for some messages and then some timeouts, like 3 timeouts in same session

Child errors

  • llm_request: APIStatusError: message=‘Error getting model definition’, status_code=404, retryable=False, body=Error getting model definition
  • llm_request_run: APIStatusError: message=‘Error getting model definition’, status_code=404, retryable=False, body=Error getting model definition
  • llm_request: APIStatusError: message=‘Error getting model definition’, status_code=404, retryable=False, body=Error getting model definition

That doesn’t look like a timeout, that looks like an error. Usually this is caused because a model is specified that is not supported by Inference.

How have you configured your fallback adapter?

 
# currently primary is gemma4 and secondary is openai5.4 mini
primary = _make_google(
         AiConfigLlm(provider="google", model="gemma-4-31b-it"),
         custom=False, # false means livekit inference and true means sdk custom using api key
 )

fallback = _make_openai(
         AiConfigLlm(provider="openai", model="gpt-5.4-mini"),
         custom=False, # false means livekit inference and true means sdk custom using api key
 )

adapters = [primary, fallback]
return FallbackAdapter(adapters, attempt_timeout=settings.LLM_ATTEMPT_TIMEOUT)

this is how i used it, yea this is not from our side but something from livekit inference internal error, how could it occur only twice than? i mean i am 100% sure i have configured it correctly and nothing is changed from past 2 weeks as i mentioned, i was using openai 5.4 mini before and now gemma4, if it was model not defined issue than from start of the session itself it should be error not just once or twice in between

Also charts i showed is clear proof of it happens for some days while it dont happen much for other days. I have also shared the sessionid, to look into more detail, i think i need to create github issue

Feel free to - I am already speaking with engineering on this, but it can be good to have as tracking also.

What confused me was the Model being FallbackAdapter for those failed spans, as seen in your screenshots. I also see your model specified as FallbackAdapter for your successful spans, so that is consistent. Also, Error getting model definition is confusing, I don’t see how that can happen if you are just specifying google/gemma-4-31b-it which also led me to assume you had multiple models and a fallback.

Actually, to validate my own understanding I set up a new agent with this model and it correctly displays google/gemma-4-31b-it

Yeah so i think if you would try via fallback adapters then maybe you can reproduce that?

Something like below?

# currently primary is gemma4 and secondary is openai5.4 mini
# false means livekit inference and true means sdk custom using api key)

_DEFAULTS: dict[str, str] = {
    "openai": "gpt-4o-mini",
    "google": "gemini-3.1-flash-lite",
}

def _make_openai(cfg: AiConfigLlm, custom: bool = False) -> llm.LLM:
    extra: dict = {}
    if not custom:
        return inference.LLM(
            model=f"openai/{cfg.model or _DEFAULTS['openai']}",
            extra_kwargs=extra,
        )

    # code for custom is after it


def _make_google(cfg: AiConfigLlm, custom: bool = False) -> llm.LLM:
    if not custom:
        extra: dict = {}
        return inference.LLM(
            model=f"google/{cfg.model or _DEFAULTS['google']}",
            extra_kwargs=extra,
        )
    # code for custom is after it


primary = _make_google(
     AiConfigLlm(provider="google", model="gemma-4-31b-it"),
      custom=False
)
fallback = _make_openai(
     AiConfigLlm(provider="openai", model="gpt-5.4-mini"),
     custom=False
) 
adapters = [primary, fallback]

# LLM_ATTEMPT_TIMEOUT used was 2.5
return FallbackAdapter(adapters, attempt_timeout=settings.LLM_ATTEMPT_TIMEOUT)