Paul Kompfner
913194844e
Make the mechanism of adding spaces when concatenating TTS (or speech-to-speech LLM) output text explicit and deterministic, rather than heuristic-based.
...
This fixes a bug where spaces were sometimes missing from assistant messages in context.
2025-11-10 14:22:32 -05:00
Mark Backman
2300941bb8
Revert "Merge pull request #3004 from pipecat-ai/mb/improve-concat-aggregated-text"
...
This reverts commit 5e7f59a0b0 , reversing
changes made to 2ad4122b77 .
2025-11-10 09:58:19 -05:00
Mark Backman
03001f8047
Update TranscriptProcessor unit tests
2025-11-07 11:44:04 -05:00
Mark Backman
f6b6aa8766
fix: STTMuteFilter no longer sends STTMuteFrame
2025-11-06 11:53:32 -05:00
Aleix Conchillo Flaqué
d844829538
Revert "fix interruption task frame context ordering"
2025-11-05 12:14:03 -08:00
Aleix Conchillo Flaqué
e4212fb3c0
tests: add interruption strategies context ordering tests
2025-11-05 09:38:18 -08:00
Aleix Conchillo Flaqué
0f5030bafa
tests: add unit test to check for idle timeout on swallowed frames
2025-10-31 08:45:56 -07:00
Paul Kompfner
ac5734d0ed
Deprecate expect_stripped_words option from LLMAssistantAggregatorParams, when used with the newer LLMAssistantAggregator, which now handles word spacing automatically.
...
This commit does not change how it works in the older `LLMAssistantContextAggregator`.
2025-10-30 17:22:47 -04:00
Paul Kompfner
ea6e146f2d
Update TestServiceSwitcher to exercise targeting system frames only to the active service
2025-10-22 11:14:27 -04:00
Aleix Conchillo Flaqué
1b9e96c016
PipelineTask: fix task cancellation issues
2025-10-16 13:16:19 -07:00
Aleix Conchillo Flaqué
62b7c3d3b2
PipelineTask: add on_pipeline_error event
2025-10-07 18:36:38 -07:00
Aleix Conchillo Flaqué
7c15a8c800
Revert "fix context order when using interruption strategies"
...
This reverts commit de8ee96927 .
2025-10-07 17:42:35 -07:00
Aleix Conchillo Flaqué
de8ee96927
fix context order when using interruption strategies
2025-10-06 22:43:01 -07:00
Aleix Conchillo Flaqué
4dc1e15a99
frames: use OutputTransportMessage(Urgent)Frame instead of TransportMessage(Urgent)Frame
2025-10-01 16:00:42 -07:00
Paul Kompfner
6faa50ae5b
Remove remaining usage of OpenAILLMContext throughout the codebase in favor of LLMContext, except for:
...
- Usage in classes that are already deprecated
- Usage related to realtime LLMs, which don't yet support `LLMContext`
- Usage in (soon-to-be-deprecated) code paths related to `OpenAILLMContext` itself and associated machinery
2025-09-24 16:35:03 -04:00
Aleix Conchillo Flaqué
2571cb2e69
tests: fix formatting
2025-09-23 15:28:07 -07:00
Aleix Conchillo Flaqué
15782be27c
Merge pull request #2676 from golbin/main
...
Fix audio buffer flush and silence handling
2025-09-23 15:27:31 -07:00
Aleix Conchillo Flaqué
3d88b42e0b
FrameProcessor: add before/after events for processed/pushed frames
2025-09-19 20:47:21 -07:00
Jin Kim
58f70e7e0d
Add tests for audio buffer processor flush alignment
2025-09-18 22:19:32 +09:00
Aleix Conchillo Flaqué
42344125b1
tests: add unit tests for push_interruption_task_frame_and_wait()
2025-09-17 13:38:22 -07:00
Paul Kompfner
8bc3c89140
Fix a bug preventing usage of multiple ServiceSwitchers in a pipeline
2025-09-17 16:09:18 -04:00
Paul Kompfner
2cd2567a37
Add a unit tests validating that multiple ServiceSwitchers can be used in the same pipeline (currently failing)
2025-09-17 16:04:30 -04:00
Paul Kompfner
a12392182c
Simplify, undoing the change allowing controlling ServiceSwitcher with immediate frames (SystemFrames). Service switcher frames are ControlFrames, which are easier to reason about. We can always build the immediate option later if needed (i.e. if there's sufficient user pull for it)
2025-09-17 15:35:02 -04:00
Paul Kompfner
b814b70e1e
Allow controlling ServiceSwitcher with either immediate frames (SystemFrames) or in-order frames (ControlFrames).
...
Immediate is the "default", i.e. has the more obvious name (e.g. `ManuallySwitchServiceFrame` v `ManuallySwitchServiceControlFrame`), since that's *probably* what users will want to reach for. Also, the immediate frames are more likely to behave like what we had before the last few commits, where the service switch would always "jump the queue" by having an immediate effect once it hit the `ServiceSwitcher` in the pipeline, jumping ahead of frames in front of it destined for the service.
2025-09-17 15:35:02 -04:00
Paul Kompfner
a1f84e1b50
Remove extraneous unit tests
2025-09-17 15:35:02 -04:00
Paul Kompfner
e1b1dc16ec
Add unit tests for ServiceSwitcher
2025-09-17 15:35:02 -04:00
Aleix Conchillo Flaqué
db71089f5e
PipelineTask: add on_pipeline_finished event
...
This deprecates `on_pipeline_stopped`, `on_pipeline_ended` and
`on_pipeline_cancelled`.
2025-09-15 15:28:33 -07:00
kompfner
81cede2c60
Merge pull request #2653 from pipecat-ai/pk/llm-context-adapting-tests
...
`LLMContext`-adapting unit tests
2025-09-15 16:38:46 -04:00
Paul Kompfner
fe42187dc1
Implement LLMService.create_llm_specific_message() so that users don't need to just know what value of llm to provide to the LLMSpecificMessage constructor
2025-09-15 14:15:22 -04:00
Paul Kompfner
999e88c942
Add unit tests for AWSBedrockLLMAdapter.get_llm_invocation_params(), focusing on messages specifically
2025-09-15 12:08:21 -04:00
Paul Kompfner
c04df2f28b
Add unit tests for AnthropicLLMAdapter.get_llm_invocation_params(), focusing on messages specifically
2025-09-15 11:55:48 -04:00
Paul Kompfner
100ef0ab5c
Add unit tests for GeminiLLMAdapter.get_llm_invocation_params(), focusing on messages specifically
2025-09-15 11:38:23 -04:00
Paul Kompfner
42886d7105
Add unit tests for OpenAILLMAdapter.get_llm_invocation_params(), focusing on messages specifically. Also, fix a bug in OpenAILLMAdapter (found thanks to the unit tests) where it wasn't "unwrapping" LLMSpecificMessages.
2025-09-15 11:17:11 -04:00
Paul Kompfner
9f82c6b4a4
Add unit tests for run_inference
2025-09-12 11:07:11 -04:00
Aleix Conchillo Flaqué
57add41971
tests: add unit test for MinWordsInterruptionStrategy
2025-09-11 13:07:30 -07:00
Aleix Conchillo Flaqué
74b38b59d6
tests(utils): allow passing PipelineParams to run_test()
2025-09-11 13:02:21 -07:00
Aleix Conchillo Flaqué
0b21f8a6bd
FrameProcessor: add push_interruption_task_frame_and_wait()
2025-09-11 09:19:44 -07:00
Aleix Conchillo Flaqué
9d9f10ae0e
frames: StartInterruptionFrame is deprecated, use InterruptionFrame
2025-09-11 09:01:54 -07:00
Mark Backman
972546b24f
Add IVR navigation ( #2529 )
2025-08-29 20:08:17 -04:00
Aleix Conchillo Flaqué
a5c5e069ba
move pipecat.frames.frames.KeypadEntry to pipecat.audio.dtmf.types.KeypadEntry
2025-08-28 17:43:29 -07:00
Aleix Conchillo Flaqué
8ab81d289a
PipelineTask: warn if CancelFrame doesn't reach the end
2025-08-26 10:36:33 -07:00
Aleix Conchillo Flaqué
8044c4170d
PipelineRunner/PipelineTask: fix asyncio task cancellation
2025-08-21 23:50:00 -07:00
Aleix Conchillo Flaqué
24a628c85e
remove watchdog timers and specific asyncio implementations
...
Watchdog timers have been removed. They were introduced in 0.0.72 to help
diagnose pipeline freezes. Unfortunately, they proved ineffective since they
required developers to use Pipecat-specific queues, iterators, and events to
correctly reset the timer, which limited their usefulness and added friction.
2025-08-21 18:09:56 -07:00
Aleix Conchillo Flaqué
28c729cc36
replace asyncio.wait_for for wait_for2.wait_for
2025-08-20 15:26:57 -07:00
Aleix Conchillo Flaqué
f387776985
add custom asyncio.wait_for()
...
This patch uses `wait_for2` package to implement `asyncio.wait_for()` for
Python < 3.12.
In Python 3.12, `asyncio.wait_for()` is implemented in terms of
`asyncio.timeout()` which fixed a bunch of issues. However, this was never
backported (because of the lack of `async.timeout()`) and there are still many
remainig issues, specially in Python 3.10, in `async.wait_for()`.
See https://github.com/python/cpython/pull/98518
2025-08-20 14:09:05 -07:00
Aleix Conchillo Flaqué
4e3af00b6d
tests: try to use default SleepFrame time
2025-08-20 10:08:54 -07:00
Aleix Conchillo Flaqué
4015aedb86
tests: fix unit tests
2025-08-20 10:08:54 -07:00
Aleix Conchillo Flaqué
0508ddddfb
WatchdogPriorityQueue: fix watchdog sentinel insertion
...
We now force each inserted item in the priority queue to be a tuple and the
actual value to be last in the tuple. All the previous values in the tuple also
need to be numeric.
2025-08-12 17:40:58 -07:00
Aleix Conchillo Flaqué
3f3d757581
tests: added WatchdogQueue and WatchdogPriorityQueue unit tests
2025-08-12 11:48:22 -07:00
Captain Caius
3fae00e067
Add VADUserStartSpeakingFrame VADUserStopSpeakingFrame to STTMuteFilter
2025-08-10 19:35:04 -07:00