Merge pull request #3453 from pipecat-ai/pk/consistency-pass-on-user-started-stopped-speaking-frames
Do a consistency pass on how we're sending `UserStartedSpeakingFrame`…
This commit is contained in:
@@ -119,7 +119,7 @@ class CompletenessCheck(FrameProcessor):
|
|||||||
|
|
||||||
if isinstance(frame, TextFrame) and frame.text == "YES":
|
if isinstance(frame, TextFrame) and frame.text == "YES":
|
||||||
logger.debug("Completeness check YES")
|
logger.debug("Completeness check YES")
|
||||||
await self.push_frame(UserStoppedSpeakingFrame())
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
await self._notifier.notify()
|
await self._notifier.notify()
|
||||||
elif isinstance(frame, TextFrame) and frame.text == "NO":
|
elif isinstance(frame, TextFrame) and frame.text == "NO":
|
||||||
logger.debug("Completeness check NO")
|
logger.debug("Completeness check NO")
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ class CompletenessCheck(FrameProcessor):
|
|||||||
|
|
||||||
if isinstance(frame, TextFrame) and frame.text == "YES":
|
if isinstance(frame, TextFrame) and frame.text == "YES":
|
||||||
logger.debug("!!! Completeness check YES")
|
logger.debug("!!! Completeness check YES")
|
||||||
await self.push_frame(UserStoppedSpeakingFrame())
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
await self._notifier.notify()
|
await self._notifier.notify()
|
||||||
elif isinstance(frame, TextFrame) and frame.text == "NO":
|
elif isinstance(frame, TextFrame) and frame.text == "NO":
|
||||||
logger.debug("!!! Completeness check NO")
|
logger.debug("!!! Completeness check NO")
|
||||||
|
|||||||
@@ -451,7 +451,7 @@ class CompletenessCheck(FrameProcessor):
|
|||||||
logger.debug("Completeness check YES")
|
logger.debug("Completeness check YES")
|
||||||
if self._idle_task:
|
if self._idle_task:
|
||||||
await self.cancel_task(self._idle_task)
|
await self.cancel_task(self._idle_task)
|
||||||
await self.push_frame(UserStoppedSpeakingFrame())
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
await self._audio_accumulator.reset()
|
await self._audio_accumulator.reset()
|
||||||
await self._notifier.notify()
|
await self._notifier.notify()
|
||||||
elif isinstance(frame, TextFrame):
|
elif isinstance(frame, TextFrame):
|
||||||
|
|||||||
@@ -1187,7 +1187,7 @@ class AWSNovaSonicLLMService(LLMService):
|
|||||||
logger.debug(
|
logger.debug(
|
||||||
"Wrapping assistant response trigger transcription with upstream UserStarted/StoppedSpeakingFrames"
|
"Wrapping assistant response trigger transcription with upstream UserStarted/StoppedSpeakingFrames"
|
||||||
)
|
)
|
||||||
await self.push_frame(UserStartedSpeakingFrame(), direction=FrameDirection.UPSTREAM)
|
await self.broadcast_frame(UserStartedSpeakingFrame)
|
||||||
|
|
||||||
# Send the transcription upstream for the user context aggregator
|
# Send the transcription upstream for the user context aggregator
|
||||||
frame = TranscriptionFrame(
|
frame = TranscriptionFrame(
|
||||||
@@ -1197,7 +1197,7 @@ class AWSNovaSonicLLMService(LLMService):
|
|||||||
|
|
||||||
# Finish wrapping the upstream transcription in UserStarted/StoppedSpeakingFrames if needed
|
# Finish wrapping the upstream transcription in UserStarted/StoppedSpeakingFrames if needed
|
||||||
if should_wrap_in_user_started_stopped_speaking_frames:
|
if should_wrap_in_user_started_stopped_speaking_frames:
|
||||||
await self.push_frame(UserStoppedSpeakingFrame(), direction=FrameDirection.UPSTREAM)
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
|
|
||||||
# Clear out the buffered user text
|
# Clear out the buffered user text
|
||||||
self._user_text_buffer = ""
|
self._user_text_buffer = ""
|
||||||
|
|||||||
@@ -676,8 +676,7 @@ class DeepgramFluxSTTService(WebsocketSTTService):
|
|||||||
|
|
||||||
await self._handle_transcription(transcript, True, self._language)
|
await self._handle_transcription(transcript, True, self._language)
|
||||||
await self.stop_processing_metrics()
|
await self.stop_processing_metrics()
|
||||||
await self.push_frame(UserStoppedSpeakingFrame(), FrameDirection.DOWNSTREAM)
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
await self.push_frame(UserStoppedSpeakingFrame(), FrameDirection.UPSTREAM)
|
|
||||||
await self._call_event_handler("on_end_of_turn", transcript)
|
await self._call_event_handler("on_end_of_turn", transcript)
|
||||||
|
|
||||||
async def _handle_eager_end_of_turn(self, transcript: str, data: Dict[str, Any]):
|
async def _handle_eager_end_of_turn(self, transcript: str, data: Dict[str, Any]):
|
||||||
|
|||||||
@@ -659,7 +659,7 @@ class GrokRealtimeLLMService(LLMService):
|
|||||||
"""Handle speech stopped event from VAD."""
|
"""Handle speech stopped event from VAD."""
|
||||||
await self.start_ttfb_metrics()
|
await self.start_ttfb_metrics()
|
||||||
await self.start_processing_metrics()
|
await self.start_processing_metrics()
|
||||||
await self.push_frame(UserStoppedSpeakingFrame())
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
|
|
||||||
async def _handle_evt_error(self, evt):
|
async def _handle_evt_error(self, evt):
|
||||||
"""Handle error event."""
|
"""Handle error event."""
|
||||||
|
|||||||
@@ -776,7 +776,7 @@ class OpenAIRealtimeLLMService(LLMService):
|
|||||||
async def _handle_evt_speech_stopped(self, evt):
|
async def _handle_evt_speech_stopped(self, evt):
|
||||||
await self.start_ttfb_metrics()
|
await self.start_ttfb_metrics()
|
||||||
await self.start_processing_metrics()
|
await self.start_processing_metrics()
|
||||||
await self.push_frame(UserStoppedSpeakingFrame())
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
|
|
||||||
async def _maybe_handle_evt_retrieve_conversation_item_error(self, evt: events.ErrorEvent):
|
async def _maybe_handle_evt_retrieve_conversation_item_error(self, evt: events.ErrorEvent):
|
||||||
"""Maybe handle an error event related to retrieving a conversation item.
|
"""Maybe handle an error event related to retrieving a conversation item.
|
||||||
|
|||||||
@@ -662,7 +662,7 @@ class OpenAIRealtimeBetaLLMService(LLMService):
|
|||||||
async def _handle_evt_speech_stopped(self, evt):
|
async def _handle_evt_speech_stopped(self, evt):
|
||||||
await self.start_ttfb_metrics()
|
await self.start_ttfb_metrics()
|
||||||
await self.start_processing_metrics()
|
await self.start_processing_metrics()
|
||||||
await self.push_frame(UserStoppedSpeakingFrame())
|
await self.broadcast_frame(UserStoppedSpeakingFrame)
|
||||||
|
|
||||||
async def _maybe_handle_evt_retrieve_conversation_item_error(self, evt: events.ErrorEvent):
|
async def _maybe_handle_evt_retrieve_conversation_item_error(self, evt: events.ErrorEvent):
|
||||||
"""Maybe handle an error event related to retrieving a conversation item.
|
"""Maybe handle an error event related to retrieving a conversation item.
|
||||||
|
|||||||
Reference in New Issue
Block a user