Pipecat v1.12.0 adds Classifiers for voicemail, turn-taking and the screen

1 hour ago

Pipecat v1.12.0 adds Classifiers: typed yes-or-no, choice and score questions about a call, answered by Jev in a few hundred milliseconds or by any Pipecat LLM. VoicemailDetector and UIWorker now use them, voice LLMs can ask about the screen without seeing it, a cough that interrupts the bot gets a reply, one pronunciation map works across TTS services, sentence splitting drops NLTK, and MOQTransport redials dropped relays. Release notes: https://github.com/pipecat-ai/pipecat/releases/tag/v1.12.0 CHANGELOG: https://github.com/pipecat-ai/pipecat/blob/v1.12.0/CHANGELOG.md Full diff: https://github.com/pipecat-ai/pipecat/compare/v1.11.0...v1.12.0 Docs: https://docs.pipecat.ai

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00Pipecat v1.12.0
  2. 0:15Classifiers
  3. 0:16JevClassifier
  4. 0:30LLMClassifier
  5. 0:43Voicemail detection
  6. 0:45VoicemailDetector waits for silence
  7. 1:02One processor
  8. 1:16Screen questions
  9. 1:17The screen job
  10. 1:31UIWorker classifier
  11. 1:47Speech and turns
  12. 1:49Empty user turns
  13. 2:01Pronunciation map
  14. 2:18Sentence splitting
  15. 2:34Transport and evals
  16. 2:36MOQTransport reconnect
  17. 2:51Eval judge
  18. 3:06Before you upgrade
  19. 3:08New requirements
  20. 3:24Fixes
  21. 3:41Upgrade notes
Show transcript

Pipecat v1.12.0

Pipecat01 · Classifiers

Pipecat v1.12.0 adds Classifiers for voicemail, turn-taking and the screen

Ask typed questions about a call and get a yes or no, a choice, or a score

CHANGELOG.md · 1.12.0

Pipecat adds Classifiers. A classifier answers typed questions about some state: a yes or no, a choice among options, or a score on a scale, several questions at once, each with a probability.

Classifiers

Pipecat
01

Classifiers.

JevClassifier

Pipecat01 · Classifiers

Jev answers each question in a few hundred milliseconds

classifier = JevClassifier(api_key=os.getenv("TYPESAFE_API_KEY"))
results = await classifier.choice(
    "I'd like to book a table for, um",
    {"turn": ChoiceQuestion(
        instructions="is the user's turn over?",
        options={
            "complete": "the user finished",
            "short": "a brief pause",
            "long": "asked for time",
        },
    )},
)
results["turn"].choice  # "short"
CHANGELOG.md · 1.12.0

The fast backend is Jev, TypeSafe's classification model. Ask whether a caller has finished their turn, and Jev answers in a few hundred milliseconds, with how sure it is. It needs a TypeSafe API key.

LLMClassifier

Pipecat01 · Classifiers

Any Pipecat LLM can answer the same questions

classifier = LLMClassifier(
    llm=OpenAILLMService(model="gpt-4o-mini"))
results = await classifier.yes_no(
    "Hi, you've reached Dana. Leave a message.",
    {"voicemail": YesNoQuestion(
        instructions="is this a voicemail greeting?")},
)
results["voicemail"].is_yes       # True
results["voicemail"].probability  # 0.97
CHANGELOG.md · 1.12.0

LLMClassifier asks the same questions of any Pipecat LLM service. All the questions about one state go out in one call and come back as one JSON object, with a ten second timeout by default.

Voicemail detection

Pipecat
02

Voicemail detection.

VoicemailDetector waits for silence

Pipecat02 · Voicemail detection

VoicemailDetector decides after one second of silence

“Hi, this is Sam”A person answering, or the start of a voicemail greeting
CHANGELOG.md · 1.12.0

VoicemailDetector now asks a classifier after every transcription and acts after a second of quiet. “Hi, this is Sam” opens a real answer and a voicemail greeting alike, and the silence after it tells them apart.

One processor

Pipecat02 · Voicemail detection

One processor replaces the parallel pipeline and its own LLM

  • Takes a classifier, such as Jev
  • Passing an LLM still works for now

The old gate classes and the detector’s prompt attributes are removed

CHANGELOG.md · 1.12.0

The detector is now one processor, in place of a parallel pipeline with its own LLM. Passing an LLM still works for now. The old gate classes are removed, so code importing them breaks.

Screen questions

Pipecat
03

Screen questions.

The screen job

Pipecat03 · Screen questions

A voice LLM can ask about the screen without seeing it

findcheckselectlistselectionclickscroll_tohighlightselect_textfill
context = LLMContext(tools=screen_tools("ui"))
CHANGELOG.md · 1.12.0

The UI worker has a built-in screen job. The voice LLM asks it to find an element, check the screen, or click and fill, and each answer comes back as short data, never the page.

UIWorker classifier

Pipecat03 · Screen questions

Small screen decisions skip the LLM turn

  • Which element the user means
  • Whether something is true on the screen
  • Whether a UI event deserves a reply

BaseUIWorker and ReplyToolMixin are deprecated, removed in 2.0

CHANGELOG.md · 1.12.0

Hand the UI worker a classifier such as Jev, and it decides which element the user means, or whether an event deserves a reply, without an LLM turn. Without one, its own LLM answers more slowly.

Speech and turns

Pipecat
04

Speech and turns.

Empty user turns

Pipecat04 · Speech and turns

A cough that cuts off the bot now gets a reply

InterruptedThe bot asks the user to repeat, or picks up where it left off
IdleNo reply, unless you set an idle prompt
CHANGELOG.md · 1.12.0

When a cough cuts the bot off and leaves no transcript, the bot now asks the user to repeat, or picks up where it left off. Noise during a pause gets no reply by default.

Pronunciation map

Pipecat04 · Speech and turns

One pronunciation map for every TTS service that takes hints

pronounce = CartesiaTTSService.pronunciation_transform_ipa(
    {"Metformin": "mɛtˈfɔɹmɪn"})

tts = CartesiaTTSService(
    text_transforms=[
        ("*", strip_markdown),
        ("*", pronounce),  # last, so nothing rewrites its markup
    ],
)

ElevenLabs: eleven_flash_v2 and eleven_turbo_v2 only

CHANGELOG.md · 1.12.0

Give Pipecat a map from words to IPA, and it writes the markup each TTS service expects: Cartesia, ElevenLabs, Inworld and Deepgram Aura-2. Deepgram Flux has no pronunciation markup, so those words are spoken as written.

Sentence splitting

Pipecat04 · Speech and turns

Sentence splitting drops NLTK and its data downloads

  • sentencex rules ship with Pipecat
  • Follows the TTS language setting

Some sentence boundaries may differ from NLTK’s Punkt

CHANGELOG.md · 1.12.0

Sentence splitting before TTS now runs on sentencex rules in place of NLTK, so the data downloads and tokenizer warm-up are gone. It follows the language setting, and some sentence boundaries may land differently than before.

Transport and evals

Pipecat
05

Transport and evals.

MOQTransport reconnect

Pipecat05 · Transport and evals

MOQTransport redials a dropped relay on its own

  • Redials with backoff and keeps its broadcast
  • A reconnect stops replaying the RTVI log
  • A missing client gets 60 seconds, up from 30

Needs moq-rs 0.4.6 or later; tested against moq-relay 0.14

CHANGELOG.md · 1.12.0

In client mode, the MOQ transport now redials a dropped relay with backoff, and a reconnect stops replaying the whole RTVI log. A missing client gets a minute to return, up from thirty seconds.

Eval judge

Pipecat05 · Transport and evals

Eval verdicts now come from a classifier

  • An LLM explains every failed verdict
  • One call per bot turn in a simulation

A borderline reply can get a different verdict than before

CHANGELOG.md · 1.12.0

The eval judge now decides every verdict with a classifier, and an LLM explains each failure. Borderline replies can get a different verdict than before, and simulations cost more calls, one per bot turn.

Before you upgrade

Pipecat
06

Before you upgrade.

New requirements

Pipecat06 · Before you upgrade

xAI, MCP and Transformers requirements move

  • xAI STT defaults to grok-voice-transcribe-2.0
  • The mcp extra needs the MCP SDK 2
  • local-smart-turn and moondream need transformers 5.10
CHANGELOG.md · 1.12.0

xAI speech-to-text now defaults to the second-generation Grok transcription model. The MCP extra runs only on version 2 of the MCP SDK. Local smart turn and Moondream now require Transformers 5.

Fixes

Pipecat06 · Before you upgrade

Word highlighting, Flows and Telnyx bugs are fixed

  • TTS word highlighting on markdown-heavy replies
  • Flows node changes during an interruption
  • RTVI messages over Telnyx
CHANGELOG.md · 1.12.0

Word highlighting stays in step on markdown-heavy replies. A Flows node change now delivers the new context and tools even when the user interrupts. And Telnyx calls now carry RTVI messages, which were silently dropped.

Upgrade notes

Pipecat06 · Before you upgrade

Most deprecated APIs keep working until Pipecat 2.0

Upgrade notesPipecat v1.12.0 release notesgithub.com/pipecat-ai/pipecat/releases/tag/v1.12.0
CHANGELOG.md · 1.12.0 · Deprecated

Most of what this release deprecates, from the base UI worker to passing an LLM to the eval judge, keeps working until Pipecat 2.0. The upgrade notes for each one are in the Pipecat release notes.