Aleix Conchillo Flaqué
4945cfbd8f
Buffer internal frames during ParallelPipeline lifecycle synchronization
...
Processors inside parallel sub-pipelines can push frames during
StartFrame/EndFrame/CancelFrame processing. Previously these frames
could escape the ParallelPipeline before all branches finished
processing the lifecycle frame. Now they are buffered and flushed
after synchronization completes.
2026-02-06 15:15:46 -08:00
Mark Backman
d7b1624d3c
Merge pull request #3663 from lukepayyapilli/fix/stream-close-sambanova-google
...
fix: close stream on cancellation for SambaNova and Google OpenAI services
2026-02-06 14:02:31 -05:00
Aleix Conchillo Flaqué
d5105a78e6
STTMuteFilter should call frame.complete() when InterruptionFrame is blocked
2026-02-06 10:11:00 -08:00
Aleix Conchillo Flaqué
a352b2d7a0
Add tests for InterruptionFrame completion event
...
Add tests for the event-based interruption completion: complete() sets
the event, complete() is safe without an event, the event fires at
the pipeline sink, and a warning is logged when the frame is blocked.
Also remove the unconditional await after the timeout so the function
returns instead of hanging when complete() is never called.
2026-02-06 09:57:24 -08:00
Luke Payyapilli
29c53b99a4
fix: close stream on cancellation for SambaNova and Google OpenAI services
2026-02-06 10:02:40 -05:00
Mark Backman
fa85f7bbc7
Merge pull request #3640 from lukepayyapilli/fix/openai-stream-close
...
fix: close stream on cancellation to prevent socket leaks
2026-02-05 18:00:06 -05:00
Derek Haynes
f6c919354f
Add test for user bot latency
2026-02-05 14:29:45 -05:00
Luke Payyapilli
55a3b10e70
fix(openai): close stream on cancellation to prevent socket leaks
2026-02-04 09:59:10 -05:00
Mark Backman
2db3d94d06
Merge pull request #3628 from pipecat-ai/mb/broadcast-speech-control-params-frame
...
Fix: Broadcast SpeechControlParamsFrame from VADController
2026-02-03 18:44:15 -05:00
Mark Backman
2a26b9f7a3
Fix: Broadcast SpeechControlParamsFrame from VADController
2026-02-03 18:40:39 -05:00
Mark Backman
84ca0b6d58
Merge pull request #3629 from pipecat-ai/fix/telephony-websocket-stopasynciteration
...
Fix StopAsyncIteration in parse_telephony_websocket
2026-02-03 12:10:07 -05:00
Luke Payyapilli
8d3e10f054
Make EndFrame and StopFrame uninterruptible to prevent pipeline freeze
2026-02-03 09:12:59 -05:00
James Hush
90bead06ab
Apply suggestions from code review
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2026-02-03 16:42:13 +08:00
James Hush
b427d534ae
Add tests for parse_telephony_websocket StopAsyncIteration handling
...
Tests cover:
- No messages received (raises ValueError)
- One message received (logs warning, continues)
- Two messages received (normal operation)
- All telephony providers (Twilio, Telnyx, Plivo, Exotel)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-03 16:33:36 +08:00
James Hush
763002f2bc
Fix sentence splitting for CJK and other non-Latin languages in TTS pipeline
...
NLTK's sent_tokenize() only supports ~15 European languages and defaults to
English. For Japanese, Chinese, Korean, Hindi, Arabic, and other non-Latin
languages, NLTK fails to recognize sentence boundaries like 。?! causing
text to accumulate until flush instead of being emitted sentence-by-sentence.
Add a fallback in match_endofsentence() that scans for unambiguous non-Latin
sentence-ending punctuation when NLTK fails to split the text. Latin
punctuation (. ! ? ; …) is excluded from the fallback since NLTK handles
those correctly and they can be ambiguous (abbreviations, decimals, etc.).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 14:27:49 +08:00
Mark Backman
e779233918
Fix IVRNavigator to push AggregatedTextFrame when switching to conversation mode
2026-01-30 21:07:49 -05:00
Mark Backman
63a23246d5
Add UserTurnCompletionLLMServiceMixin ( #3518 )
...
* Added UserTurnCompletionLLMServiceMixin class
* Added 22-filter-incomplete-turns.py foundational example
* Removed old 22 natural conversation foundational examples
* Added test_user_turn_completion_mixin.py
2026-01-30 14:57:15 -05:00
Aleix Conchillo Flaqué
305ab44132
tests: add unittest.main() call
2026-01-30 10:07:34 -08:00
Aleix Conchillo Flaqué
b486f35c70
audio: add new VADProcessor
2026-01-30 10:07:34 -08:00
Aleix Conchillo Flaqué
ddfedaf478
audio(vad): add new VADController
2026-01-30 10:07:34 -08:00
Aleix Conchillo Flaqué
7eabaaa0ef
FrameProcessors: do not deepcopy fields when broadcasting frames
2026-01-29 11:47:57 -08:00
Aleix Conchillo Flaqué
f3b72e9263
Merge pull request #3585 from pipecat-ai/aleix/improve-piper-tts-support
...
improve Piper TTS support
2026-01-29 08:36:13 -08:00
Mark Backman
b77a50de73
Merge pull request #3529 from lukepayyapilli/fix/llm-timeout-without-retry
...
feat: handle exceptions for BaseOpenAILLMService
2026-01-29 09:12:54 -05:00
Luke Payyapilli
433c1b9b92
add catch-all exception handler per review feedback
2026-01-29 09:07:06 -05:00
Aleix Conchillo Flaqué
eb1bf1e446
tts: rename PiperTTSService to PiperHttpTTSService
2026-01-28 23:27:32 -08:00
Aleix Conchillo Flaqué
55dadc9118
tests(genesys): fix formatting
2026-01-28 09:15:42 -08:00
Luke Payyapilli
ff0eb6d286
fix: emit ErrorFrame on LLM completion timeout
2026-01-28 09:44:32 -05:00
ssillerom
105824a372
Merge main into feature/genesys_serializer
...
Incorporates latest changes from main branch including:
- AIC filter and VAD updates
- STT service improvements
- Base serializer changes
- Various bug fixes
2026-01-28 10:48:56 +01:00
ssillerom
55e0d4ecc4
ruff fixes done
2026-01-28 08:59:28 +01:00
ssillerom
9102e81cb8
added tests to the PR
2026-01-27 23:39:43 +01:00
ssillerom
d7d8e93a3d
feature: added custom params in closed message to genesys, simplified create_* functions, simplified constructor method and simplified opened message
2026-01-27 23:36:47 +01:00
Mark Backman
e80e0eab29
Emit on_assistant_turn_stopped and on_user_turn_stopped from EndFrame or CancelFrame
2026-01-27 14:50:10 -05:00
Gökmen Görgen
a824660df7
add unit tests for AICVADAnalyzer and AICFilter.
2026-01-26 09:56:36 +01:00
Aleix Conchillo Flaqué
eacd2a4b71
FrameProcessor: add broadcast_frame_instance()
2026-01-21 18:14:17 -08:00
Aleix Conchillo Flaqué
bd45ce2b4e
Merge pull request #3499 from lukepayyapilli/fix/livekit-video-queue-memory-leak
...
fix(livekit): prevent memory leak when video_in_enabled is False
2026-01-20 13:21:21 -08:00
Luke Payyapilli
f6359d460e
chore: install livekit as optional extra in CI instead of dev dep
2026-01-20 09:16:16 -05:00
Luke Payyapilli
c89ae717fe
style: fix ruff formatting
2026-01-19 11:13:41 -05:00
Luke Payyapilli
562bdd3084
test: add livekit to dev deps and improve test clarity
2026-01-19 11:11:54 -05:00
Luke Payyapilli
dfc1f09b77
fix(livekit): prevent memory leak when video_in_enabled is False
2026-01-19 11:00:23 -05:00
Mark Backman
ce7d823770
Remove unused imports
2026-01-18 08:22:22 -05:00
Mark Backman
1e1160906e
Update on_user_idle to on_user_turn_idle
2026-01-17 07:04:27 -05:00
Mark Backman
2e8e574ea5
Add UserIdleController, deprecate UserIdleProcessor
2026-01-16 18:44:19 -05:00
Aleix Conchillo Flaqué
c2a0735975
MinWordsUserTurnStartStrategy: don't aggregate transcriptions
...
If we aggregate transcriptions we will get incorrect interruptions. For example,
if we have a strategy with min_words=3 and we say "One" and pause, then "Two"
and pause and then "Three", this would trigger the start of the turn when it
shouldn't. We should only look at the incoming transcription text and don't
aggregate it with the previous.
2026-01-16 11:16:06 -08:00
Aleix Conchillo Flaqué
c7ab87b0cc
turns: move mute to user_mute
2026-01-16 11:07:20 -08:00
Mark Backman
f3c2e29fb4
Clean up CambTTSService
2026-01-15 15:59:17 -05:00
Aleix Conchillo Flaqué
9e705ce768
UserTurnController: reset user turn start strategies when turn triggered
2026-01-14 18:20:29 -08:00
Mark Backman
f3993f1775
fix to make on_user_turn_stop_timeout work with ExternalUserTurnStrategies
2026-01-14 20:10:56 -05:00
Aleix Conchillo Flaqué
24a52375c7
tests: added LLMAssistantAggregator unit tests
2026-01-09 09:50:21 -08:00
Aleix Conchillo Flaqué
4b61fd2d7d
LLMUserAggregator: add user turn stopped message argument
...
It is now possible to get the user aggregation when a `on_user_turn_stopped`
event is emitted.
2026-01-09 09:42:41 -08:00
Aleix Conchillo Flaqué
b0185e3539
tests: improve LLMUserAggregator tests
2026-01-09 09:21:28 -08:00