From dff6b5402a41aefe7fdc102c9a96fd87d04037f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Mon, 15 Dec 2025 14:16:47 -0800 Subject: [PATCH] LLMUserAggregator: use TranscriptionUserTurnStartStrategy for emulated interruptions --- src/pipecat/pipeline/task.py | 5 ++++- .../processors/aggregators/llm_response_universal.py | 12 ------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/pipecat/pipeline/task.py b/src/pipecat/pipeline/task.py index 388723acd..56cf7d2a1 100644 --- a/src/pipecat/pipeline/task.py +++ b/src/pipecat/pipeline/task.py @@ -51,6 +51,9 @@ from pipecat.turns.bot.transcription_bot_turn_start_strategy import ( TranscriptionBotTurnStartStrategy, ) from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user.transcription_user_turn_start_strategy import ( + TranscriptionUserTurnStartStrategy, +) from pipecat.turns.user.vad_user_turn_start_strategy import VADUserTurnStartStrategy from pipecat.utils.asyncio.task_manager import BaseTaskManager, TaskManager, TaskManagerParams from pipecat.utils.tracing.setup import is_tracing_available @@ -293,7 +296,7 @@ class PipelineTask(BasePipelineTask): # Initialize default user and bot turn start strategies. if not self._params.turn_start_strategies: self._params.turn_start_strategies = TurnStartStrategies( - user=[VADUserTurnStartStrategy()], + user=[VADUserTurnStartStrategy(), TranscriptionUserTurnStartStrategy()], bot=[TranscriptionBotTurnStartStrategy()], ) diff --git a/src/pipecat/processors/aggregators/llm_response_universal.py b/src/pipecat/processors/aggregators/llm_response_universal.py index 145dec0ec..0b56fccaf 100644 --- a/src/pipecat/processors/aggregators/llm_response_universal.py +++ b/src/pipecat/processors/aggregators/llm_response_universal.py @@ -231,8 +231,6 @@ class LLMUserAggregator(LLMContextAggregator): super().__init__(context=context, role="user", **kwargs) self._params = params or LLMUserAggregatorParams() - self._user_speaking = False - async def cleanup(self): """Clean up processor resources.""" await super().cleanup() @@ -390,11 +388,6 @@ class LLMUserAggregator(LLMContextAggregator): await self.broadcast_frame(frame_cls, **kwargs) async def _trigger_user_turn_start(self, strategy: BaseUserTurnStartStrategy): - if self._user_speaking: - return - - self._user_speaking = True - # Reset all user turn start strategies to start fresh. if self.turn_start_strategies: for s in self.turn_start_strategies.user: @@ -407,11 +400,6 @@ class LLMUserAggregator(LLMContextAggregator): await self.broadcast_frame(InterruptionFrame) async def _trigger_bot_turn_start(self, strategy: BaseBotTurnStartStrategy): - if not self._user_speaking: - return - - self._user_speaking = False - # Reset all bot turn start strategies to start fresh. if self.turn_start_strategies: for s in self.turn_start_strategies.bot: