releases.shpreview

Async tools and filler phrases introduced

livekit-agents@1.6.0

7 features3 enhancements17 fixesThis release7 featuresNew capabilities3 enhancementsImprovements to existing features17 fixesBug fixesAI-tallied from the release notes

Introducing Asynchronous Tools

When a long-running tool is in progress, the user will be met with silence until it completes. Asynchronous tools can hand control back to the LLM before it finishes, streaming updates into the conversation as it progresses.

class TravelAgent(Agent):
    @llm.function_tool(flags=llm.ToolFlag.CANCELLABLE, on_duplicate="confirm")
    async def book_flight(self, ctx: RunContext, origin: str, destination: str, date: str) -> str:
        """Book a flight."""
        # First update is delivered immediately and releases control back to the LLM,
        # so the agent can say e.g. "Sure, searching flights to Tokyo — this'll take a minute."
        await ctx.update(
            f"Searching flights from {origin} to {destination} on {date}. "
            "This will take a couple of minutes."
        )

        await asyncio.sleep(30)  # simulate long-running work

        # Later updates are coalesced into a deferred reply, delivered when the agent
        # is idle: "Good news — best price is $289 on Delta, confirming now."
        await ctx.update("Found 3 options. Best price $289 on Delta. Confirming now.")

        await asyncio.sleep(40)  # simulate more long-running work

        # The final return is also delivered when the agent is idle.
        return f"Booked! Confirmation FL-{random.randint(100000, 999999)}."

Filler phrases

Use filler words to break long silences via ctx.with_filler(). You can set delay to the amount of quiet seconds per interval for when the filler words are played. You can also rotate between phrases, set interval to configure the cooldown between filler fires.

        followups = [
            "Almost there, just confirming.",
            "Still working on it, won't be long.",
            "Hang tight — almost done.",
        ]
        async with ctx.with_filler(
            lambda step: followups[step], delay=5, interval=10, max_steps=len(followups)
        ):
            await asyncio.sleep(40) # simulate a long API call

Read more about async tools in our docs.

Complete Changelog

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/livekit-agents@1.5.17...livekit-agents@1.6.0

Fetched June 12, 2026