Files
pipecat/changelog
Paul Kompfner 47e2f7a037 realtime + local turn detection: drop the user-transcript wait
Add the configuration surface to drive a realtime service like Gemini
Live from local turn detection without paying user-transcript latency.
Cascaded pipelines wait for a transcript before ending the user's turn
because the downstream LLM needs the user's words recorded in context
— but that wait is pure latency in pipelines using local turn
detection to drive a realtime service, which consumes user audio
directly.

Set `wait_for_transcript_to_end_user_turn=False` on
`LLMUserAggregatorParams` to turn this on. With that single flag the
aggregator:

- drops `TranscriptionUserTurnStartStrategy` from the start strategies
  (so late-arriving realtime transcripts don't trigger new turns),
- sets `wait_for_transcript=False` on any stop strategy that supports
  it (so the turn ends on the audible end of the turn, without
  waiting for a transcript),
- fires `on_user_turn_stopped` on the audible end of the turn with
  empty `content` (since the transcript hasn't arrived), and
- defers the context flush until the transcript arrives or a backstop
  timer fires.

A new `on_user_turn_message_finalized` event fires when the user's
message has been written to context. In the default mode it
coincides with `on_user_turn_stopped`; in the delayed-transcript mode
it fires later. Consumers that want the populated transcript should
subscribe to `on_user_turn_message_finalized` — it's the event that
always carries the user message, regardless of mode.

Strategy mutations are logged: loudly when the user passed their own
strategies (we're overwriting parts of their config), quietly
otherwise. The strategy-level `wait_for_transcript` parameter on
`TurnAnalyzerUserTurnStopStrategy` and `SpeechTimeoutUserTurnStopStrategy`
remains exposed for advanced cases.

The example `realtime-gemini-live-local-vad.py` demonstrates the full
pattern.
2026-05-15 13:49:16 -04:00
..
2026-04-29 09:53:42 -04:00
2026-04-29 11:09:38 -04:00
2026-04-30 09:45:16 -04:00
2026-04-30 09:45:16 -04:00
2026-04-30 09:45:16 -04:00
2026-04-30 09:45:16 -04:00
2026-04-30 09:45:16 -04:00
2026-04-30 09:45:16 -04:00
2026-04-30 14:16:46 -04:00
2026-04-30 16:19:35 -04:00
2026-04-30 21:41:28 -04:00
2026-05-01 08:58:38 -04:00
2026-05-05 13:03:49 -04:00
2026-05-07 17:46:15 -07:00
2026-05-07 17:46:15 -07:00
2026-05-07 17:46:15 -07:00
2026-05-07 16:58:08 -07:00
2026-05-04 15:18:15 -04:00
2026-05-04 21:54:58 -04:00
2026-05-04 21:54:58 -04:00
2026-05-04 16:22:26 -04:00
2026-05-06 11:26:14 -03:00
2026-05-06 11:26:14 -03:00
2026-05-07 11:32:48 -03:00
2026-05-10 20:34:52 -07:00
2026-05-12 15:20:57 -04:00
2026-05-11 17:34:00 -04:00