Solving unwanted interruptions with Adaptive Interruption Handling

New feature for LiveKit Cloud: you just need to upgrade your cloud-hosted agents to >= 1.5.x

1 Like

Which STT, TTS and LLM are being used here in this demo?

1 Like

Is it possible to have it on self-hosted deployments?

Is it possible to have it on self-hosted deployments?

See
Quota and limits

Adaptive interruption handling is included at no extra cost for all agents deployed to LiveKit Cloud.

For self-hosted agents, we include 40,000 inference requests per month across all plans - enough to experiment and develop locally without restrictions.

For large-scale self-hosted use cases, please contact us to discuss options and pricing.
—


stt=inference.STT(model="deepgram/nova-3", language="en"),
        llm=inference.LLM(model="openai/gpt-4.1-nano"),
        tts=inference.TTS(
            model="cartesia/sonic-3", voice="9626c31c-bec5-4cca-baa8-f8ba9e84c8bc"
        ),

Is livekits new dynamic turn handling in v1.5.x also working for realtime? My first tests with gemini 2.5 live were subpar. I disabled the realtimes built in vad like this:

in agent session:

```

session = AgentSession\[CallRuntime\](

    userdata=runtime,

    preemptive_generation=True,

    vad=ctx.proc.userdata\["vad"\],

    turn_handling=TurnHandlingOptions(

        turn_detection=MultilingualModel(),

        interruption={

            "mode": "adaptive",

            "resume_false_interruption": True,

            "false_interruption_timeout": 1.0,

        },

    ),

)

```

in gemini realtime

```

    return google.realtime.RealtimeModel(

        model=config.model,

        thinking_config=types.ThinkingConfig(

            thinking_budget=0,

        ),

        realtime_input_config=types.RealtimeInputConfig(

            automatic_activity_detection=types.AutomaticActivityDetection(

                disabled=True,

            ),

        ),

        modalities=\[Modality.AUDIO\],

        voice=voice,

    )

```

With this gemini is unable to have a natural conversation, it stops mid sentence, so something seems very much broken.

Is this feature just not supported or recommended for realtime or did I misconfigure sth?

The new adaptive interrupt handling does not work with realtime models, please see here: Adaptive interruption handling | LiveKit Documentation.

realtime_input_config=types.RealtimeInputConfig(

        automatic_activity_detection=types.AutomaticActivityDetection(

            disabled=True,

        ),

    ),

You are disabling turn detection entirely with this line, as detailed here: Gemini Live API plugin | LiveKit Documentation (you would then also need to specify a separate STT to use LiveKit’s turn detection). The reason you see stopping mid-sentence is because it is misconfigured - at the end of the day, adaptive interrupt handling is not designed to work with realtime models, and you would need to adopt a pipeline architecture to take advantage of it.