Skip to content

Releases: livekit/agents

[email protected]

25 Nov 21:05
309a493

Choose a tag to compare

What's Changed

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.3.5

[email protected]

24 Nov 22:30
9be2ff4

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.3.4

[email protected]

19 Nov 21:22
2b316dd

Choose a tag to compare

New Features

Observability

To learn more about the new observability features, check out our full write-up on the LiveKit blog. It walks through how session playback, trace inspection, and synchronized logs streamline debugging for voice agents. Read more here

New CLI

The CLI has been redesigned, and a new text-only mode was added so you can test your agent without using voice.

python3 my_agent.py console --text

You can also now configure both the input device and output device directly through the provided parameters.

python3 my_agent.py console --input-device "AirPods" --output-device "MacBook"

new_cli

New AgentServer API

Weโ€™ve renamed Worker to AgentServer, and you now need to use a decorator to define the entrypoint. All existing functionality remains backward compatible. This change lays the groundwork for upcoming design improvements and new features.

server = AgentServer()

def prewarm(proc: JobProcess): ...
def load(proc: JobProcess): ...

server.setup_fnc = prewarm
server.load_fnc = load

@server.rtc_session(agent_name="my_customer_service_agent")
async def entrypoint(ctx: JobContext): ...

Session Report & on_session_end callback

Use the on_session_end callback to generate a structured SessionReport that the conversation history, events, recording metadata, and the agentโ€™s configuration.

server = AgentServer()

async def on_session_end(ctx: JobContext) -> None:
    report = ctx.make_session_report()
    print(json.dumps(report.to_dict(), indent=2))
    
    chat_history = report.chat_history
    # Do post-processing on your session (e.g final evaluations, generate a summary, ...)

@server.rtc_session(on_session_end=on_session_end)
async def my_agent(ctx: JobContext) -> None:
    ...

AgentHandoff item

To capture everything that occurred during your session, we added an AgentHandoff item to the ChatContext.

class AgentHandoff(BaseModel):
    ...
    old_agent_id: str | None
    new_agent_id: str

Improved turn detection model

We updated the turn-detection model, resulting in measurable accuracy improvements across most languages. The table below shows the change in [email protected] between versions 0.4.0 and 0.4.1, along with the percentage difference.

This new version also handles special user inputs such as email addresses, street addresses, and phone numbers much more effectively.

514623611-bb709e00-71ca-4b0e-86c4-fd854dcaf51c

TaskGroup

We added TaskGroup, which lets you run multiple tasks concurrently and wait for all of them to finish. This is useful when collecting several pieces of information from a user where the order doesnโ€™t matter, or when the user may revise earlier inputs while continuing the flow.

Weโ€™ve also added an example that uses TaskGroup to build a SurveyAgent, which you can use as a reference.

task_group = TaskGroup()
task_group.add(lambda: GetEmailTask(), id="get_email_task", description="Get the email address")
task_group.add(lambda: GetPhoneNumberTask(), id="phone_number_task", description="Get the phone number")
task_group.add(lambda: GetCreditCardTask(), id="credit_card_task", description="Get credit card")
results = await task_group

IVR systems

Agents can now optionally handle IVR-style interactions. Enabling ivr_detection allows the session to identify and respond appropriately to IVR tones or patterns, and min_endpointing_delay lets you control how long the system waits before ending a turnโ€”useful for menu-style inputs.

session = AgentSession(
    ivr_detection=True,
    min_endpointing_delay=5,
)

llm_node FlushSentinel

We added a FlushSentinel marker that can be yielded from llm_node to flush partial LLM output to TTS and start a new TTS stream. This lets you emit a short, early response (for example, when a specific tool call is detected) while the main LLM response continues in the background. For a concrete pattern, see the flush_llm_node.py example.

async def llm_node(self, chat_ctx: llm.ChatContext, tools: list[llm.FunctionTool], model_settings: ModelSettings) -> AsyncIterable[llm.ChatChunk | FlushSentinel]:
    yield "This is the first sentence"
    yield FlushSentinel()
    yield "Another TTS generation"

Changes

asyncio-debug

The --asyncio-debug argument was removed, use PYTHONASYNCIODEBUG environment variable instead.

What's Changed

Read more

[email protected]

17 Nov 06:09
e949495

Choose a tag to compare

Note

A more detailed changelog will be available soon!

What's Changed

New Contributors

Read more

[email protected]

05 Nov 19:35
3190f4a

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.2.18

[email protected]

29 Oct 15:47
dd4c8c4

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.2.17

[email protected]

27 Oct 05:09
546d1d0

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.2.16

[email protected]

15 Oct 17:28
0c5e400

Choose a tag to compare

What's Changed

  • reduce CI noise by @theomonnom in #3552
  • automatically update livekit-agents pyproject.toml optional dependencies on version bump by @theomonnom in #3553
  • added drain param to session.shutdown() by @tinalenguyen in #3562
  • fix stt final transcript triggers user turn in manual turn detection by @longcw in #3559
  • feat(livekit-plugins-hume): add model_version parameter by @zgreathouse in #3563
  • fix model provider and metrics for FallbackAdapter and StreamAdapter by @longcw in #3526
  • handle aiohttp client error when connecting to openai realtime api by @longcw in #3574
  • Add timeout param to with_openrouter() function by @msaelices in #3538
  • Add a dev folder for examples to keep the git graph clean by @Shubhrakanti in #3582
  • Ensure ctx.api uses WorkerOptions credentials by exporting LIVEKIT_* in worker by @hwuiwon in #3581
  • feat(google): Add thinking_config support, new model, and expanded voice profiles for google gemini TTS by @hwuiwon in #3583
  • chore: ensure a recent version of certifi is installed by @davidzhao in #3580
  • fix(deepgram): correctly handle timeout related errors by @davidzhao in #3579
  • realtime model: wait for generate_reply before update tool results by @longcw in #3511
  • fix aws realtime deps version by @longcw in #3592
  • Updating Cartesia Version by @namantalreja in #3570
  • fix: lock pyav to <16 due to build issue by @davidzhao in #3593
  • lift google realtime api out of beta by @tinalenguyen in #3614
  • catch delete_room errors and disable delete_room_on_close by default by @longcw in #3600
  • feat(telemetry/utils): add ttft reporting to LangFuse by @bml1g12 in #3594
  • Add RTZR(ReturnZero) STT Plugin for LiveKit Agents by @kimdwkimdw in #3376
  • chore: Remove duplicate docstring for preemptive_generation parameter in AgentSession by @m-hamashita in #3624
  • fix(deepgram): send CloseStream message before closing TTS WebSocket by @Nisarg38 in #3608
  • feat(speechmatics): add max_speakers parameter for speaker diarization by @nsepehr in #3524
  • Align Google STT plugin with official documentation by @mrkowalski in #3628
  • add backwards compatibility for google's realtime model by @tinalenguyen in #3630
  • fix: exclude temperature parameter for gpt-5 and similar models by @TheAli711 in #3573
  • turn_detection: reduce max_endpointing_delay to 3s by @lwestn in #3640
  • feat: Integrate streaming endpoints for Sarvam APIs by @shreyas-sarvam in #3498
  • fix: heartbeat by @zachkamran in #3648
  • enable zero retention mode in elevenlabs by @tinalenguyen in #3647
  • Unprompted STT Reconnection at startup by @adrian-cowham in #3649
  • fix #3650 cartesia version backward compatibility by @wlbksy in #3651
  • livekit-agents 1.2.15 by @theomonnom in #3658

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.2.15

[email protected]

01 Oct 17:55
94b0e50

Choose a tag to compare

New feature

What's Changed

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.2.14

[email protected]

01 Oct 04:44
ed3ec2f

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/[email protected]@1.2.13