Merge pull request #4057 from pipecat-ai/mb/fix-4053

Fix stale state in user turn stop strategies between turns
This commit is contained in:
Mark Backman
2026-03-17 16:19:31 -04:00
committed by GitHub
6 changed files with 123 additions and 0 deletions

View File

@@ -64,6 +64,9 @@ class SpeechTimeoutUserTurnStopStrategy(BaseUserTurnStopStrategy):
self._vad_user_speaking = False
self._transcript_finalized = False
self._vad_stopped_time = None
if self._timeout_task:
await self.task_manager.cancel_task(self._timeout_task)
self._timeout_task = None
async def setup(self, task_manager: BaseTaskManager):
"""Initialize the strategy with the given task manager.

View File

@@ -68,6 +68,9 @@ class TurnAnalyzerUserTurnStopStrategy(BaseUserTurnStopStrategy):
self._vad_user_speaking = False
self._vad_stopped_time = None
self._transcript_finalized = False
if self._timeout_task:
await self.task_manager.cancel_task(self._timeout_task)
self._timeout_task = None
async def setup(self, task_manager: BaseTaskManager):
"""Initialize the strategy with the given task manager.

View File

@@ -256,6 +256,10 @@ class UserTurnController(BaseObject):
for s in self._user_turn_strategies.start or []:
await s.reset()
# Reset all user turn stop strategies to start fresh for the new turn.
for s in self._user_turn_strategies.stop or []:
await s.reset()
await self._call_event_handler("on_user_turn_started", strategy, params)
async def _trigger_user_turn_stop(