A stuck connection fails fast now, and the bot keeps talking

2 days ago

Pipecat 1.14.0 is mostly about connections that used to hang. A peer that stops reading or a session that drops mid-sentence could stall a bot. Now they fail fast, keep what the user said, and recover. There are new services too, and a short list of things to do before you upgrade.

Ask about this presentation

Chapters

  1. 0:00Pipecat 1.14.0
  2. 0:18Websocket sends time out
  3. 0:39Speech-to-text keeps the turn
  4. 1:05Text transforms on LLMTextProcessor
  5. 1:22New services
  6. 1:46Rime V1 needs a model
  7. 2:05Defaults that moved
  8. 2:30Deprecations
  9. 2:50Security
  10. 3:12Upgrade
Show transcript
  1. Pipecat 1.14.0 is mostly about connections that used to hang. A peer that stops reading or a session that drops mid-sentence could stall a bot. Now they fail fast, keep what the user said, and recover. There are new services too, and a short list of things to do before you upgrade.

    Slide text
    Pipecat
    Release · v1.14.0

    Pipecat 1.14.0

    A stuck connection fails fast now, and the bot keeps talking

    Transport websocket sends
    Daily callbacks
    STT Deepgram Flux
    Cartesia · Sarvam
    LLM Perplexity · Omni
    Smallest
    TTS Rime · Deepgram
    Inworld
  2. When a websocket peer stopped reading, a send could wait many minutes for TCP to give up while the whole pipeline behind it waited. Now each send is bounded at 5 seconds. One that runs over drops the connection, and the normal reconnect takes over. A send timeout setting on the websocket service changes the bound, and None turns it off.

    Slide text
    Pipecat
    Fixed · WebsocketService

    A websocket send now gives up after 5 seconds

    Before

    Waits on a full write buffer until TCP gives up: many minutes, with every processor after it stuck

    1.14.0

    Drops the connection, raises ConnectionClosedError, and the service reconnects

    Change the bound with ws_send_timeout on WebsocketService, or set it to None

  3. Deepgram Flux, Cartesia Turns, and Sarvam Realtime share a set of fixes. If the connection ends partway through a turn, the turn now ends with the transcript received so far. Flux and Cartesia Turns reconnect in the background, so audio keeps moving. A connection that opens but is never confirmed is retried, and the service gives up after three in a row. A rejected setting names the provider's reason.

    Slide text
    Pipecat
    Fixed · streaming STT

    When the connection drops mid-turn, speech-to-text keeps what the user said

    Deepgram FluxCartesia TurnsSarvam Realtime
    Ends the turn with the transcript so far✓✓✓
    Reconnects in the background✓✓–
    Retries an unconfirmed connection, gives up after 3✓✓✓
    Rejected settings name the provider's reason✓✓✓
  4. The LLM text processor now takes text transforms. In the updated example, one strips emoji right after the LLM. Because it runs before the text splits toward the voice, the context, and the client, the LLM never sees its own emoji, and stops adding more.

    Slide text
    Pipecat
    Added · LLMTextProcessor

    One text transform now rewrites what the bot says, remembers and shows

    LLM
    LLMTextProcessor text_transforms
    TTS the voice
    Context what the LLM sees next turn
    Client the app
    llm_text_processor = LLMTextProcessor(text_transforms=[("*", strip_emoji)])
  5. A new Perplexity service uses its Agent API, which answers with web search and supports function calling. NVIDIA's Nemotron Omni hears the user directly, so in audio mode it replaces your speech-to-text. Zoom Scribe Live gets a streaming speech-to-text service. And Smallest AI's Electron model connects through its OpenAI-compatible Waves API.

    Slide text
    Pipecat
    Added · services

    Perplexity's Agent API, Nemotron Omni, Zoom Scribe and Electron plug in

    Perplexity Agent PerplexityAgentHttpLLMService

    Answers with web search, supports function calling

    NVIDIA Nemotron Omni NvidiaOmniLLMService

    Hears the user directly and replaces the STT service

    Zoom Scribe Live ZoomAISTTService

    Streaming speech-to-text, pipecat-ai[zoom-ai]

    Smallest Electron SmallestLLMService

    OpenAI-compatible Waves API; pipecat init offers it

  6. This is the change you have to make. RimeV1TTSService now requires a model in its settings. Set coda or mistv3, and the service connects to that model's public endpoint. A custom deployment also passes a websocket URL; the path in that URL doesn't select the model.

    Slide text
    Pipecat
    Changed · RimeV1TTSService

    Action required

    RimeV1TTSService now needs an explicit model

    1.13

    RimeV1TTSService(
        api_key=os.environ["RIME_API_KEY"],
        settings=RimeV1TTSService.Settings(
    
            voice="astra",
        ),
    )

    1.14.0

    RimeV1TTSService(
        api_key=os.environ["RIME_API_KEY"],
        settings=RimeV1TTSService.Settings(
            model="coda",  # or "mistv3"
            voice="astra",
        ),
    )
  7. Some defaults change under you. Google Vertex moves to Gemini 3.8 Flash, because Vertex retires 3.6 Flash on November 19, 2026. NVIDIA moves to Nemotron 3.5 Super, and Speechify to Simba 3.5. And strip_markdown now reduces a link to its label, so the URL isn't read aloud. The right-hand column keeps the old behavior.

    Slide text
    Pipecat
    Changed · defaults

    Three default models moved, and strip_markdown drops link URLs

    ServiceNew defaultTo keep the old one, set
    Google Vertexgemini-3.8-flashmodel="gemini-3.6-flash"
    retired by Vertex AI on 2026-11-19
    NVIDIAnemotron-3.5-super-
    vl-120b-a12b
    model="nvidia/nemotron-3-
    super-120b-a12b"
    Speechify HTTPsimba-3.5model="simba-3.2"
    strip_markdownlink → its label onlyStripMarkdown(strip_urls=False)
  8. Two deprecations can't wait. Perplexity has ended support for the Sonar API that PerplexityLLMService uses, so move to the Agent service. And workers on a shared bus now send tool schemas under a new module path, so upgrade them together. The rest keep working until 2.0.0.

    Slide text
    Pipecat
    Deprecated

    Do now

    Move off PerplexityLLMService, and upgrade bus workers together

    Perplexity has ended support for the Sonar API it uses. Workers on a shared bus send tool schemas under a new module path.

    Still works until 2.0.0

    text_filters → text_transforms
    MarkdownTextFilter → strip_markdown
    pipecat.adapters.schemas
    → pipecat.adapters.llm.schemas
    RTVI text_type → output_type
  9. redact_secrets, which ErrorFrame uses, left a credential unmasked when its pair followed another pair, like this API key after an error prefix. Now the prefix doesn't change what gets masked. And the minimum aiohttp is now 3.14.4, the first release with fixes for several of its security advisories.

    Slide text
    Pipecat
    Security

    redact_secrets no longer misses a credential after an error prefix

    Left unmasked in 1.13, masked in 1.14.0

    Unknown error occurred: api_key: abc123
    ValueError: Authorization: Bearer abc123

    pyproject.toml

    "aiohttp>=3.14.0,<4",
    "aiohttp>=3.14.4,<4",
  10. One limit: audio that arrives while a speech-to-text connection is down still isn't transcribed. Before you upgrade, set a model on any Rime V1 service, move Perplexity to the Agent service, and upgrade workers that share a bus together. Then install 1.14.0, and a stuck connection stops freezing your bot.

    Slide text
    Pipecat
    Upgrade · v1.14.0

    One limit

    Audio that arrives while a speech-to-text connection is down still isn't transcribed

    Before you upgrade

    Set model on every RimeV1TTSService
    Move Perplexity to the Agent service
    Upgrade bus workers together
    $ uv add "pipecat-ai==1.14.0"

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 ❤️