frames: indicate if UserStartedSpeakingFrame/UserStoppedSpeakingFrame are emulated

This commit is contained in:
Aleix Conchillo Flaqué
2025-03-26 14:37:36 -07:00
parent 86701fd3c7
commit c4f9171fe1
3 changed files with 14 additions and 6 deletions

View File

@@ -5,6 +5,13 @@ All notable changes to **Pipecat** will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- It is now possible to tell whether `UserStartedSpeakingFrame` or
`UserStoppedSpeakingFrame` have been generated because of emulation frames.
## [0.0.61] - 2025-03-26 ## [0.0.61] - 2025-03-26
### Added ### Added
@@ -21,9 +28,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- ElevenLabs TTS services now support a sample rate of 8000. - ElevenLabs TTS services now support a sample rate of 8000.
- Added support for `instructions` in `OpenAITTSService` - Added support for `instructions` in `OpenAITTSService`.
- Added support for `base_url` in `OpenAIImageGenService` and `OpenAITTSService` - Added support for `base_url` in `OpenAIImageGenService` and
`OpenAITTSService`.
### Fixed ### Fixed

View File

@@ -562,14 +562,14 @@ class UserStartedSpeakingFrame(SystemFrame):
""" """
pass emulated: bool = False
@dataclass @dataclass
class UserStoppedSpeakingFrame(SystemFrame): class UserStoppedSpeakingFrame(SystemFrame):
"""Emitted by the VAD to indicate that a user stopped speaking.""" """Emitted by the VAD to indicate that a user stopped speaking."""
pass emulated: bool = False
@dataclass @dataclass

View File

@@ -117,10 +117,10 @@ class BaseInputTransport(FrameProcessor):
await self._handle_bot_interruption(frame) await self._handle_bot_interruption(frame)
elif isinstance(frame, EmulateUserStartedSpeakingFrame): elif isinstance(frame, EmulateUserStartedSpeakingFrame):
logger.debug("Emulating user started speaking") logger.debug("Emulating user started speaking")
await self._handle_user_interruption(UserStartedSpeakingFrame()) await self._handle_user_interruption(UserStartedSpeakingFrame(emulated=True))
elif isinstance(frame, EmulateUserStoppedSpeakingFrame): elif isinstance(frame, EmulateUserStoppedSpeakingFrame):
logger.debug("Emulating user stopped speaking") logger.debug("Emulating user stopped speaking")
await self._handle_user_interruption(UserStoppedSpeakingFrame()) await self._handle_user_interruption(UserStoppedSpeakingFrame(emulated=True))
# All other system frames # All other system frames
elif isinstance(frame, SystemFrame): elif isinstance(frame, SystemFrame):
await self.push_frame(frame, direction) await self.push_frame(frame, direction)