diff --git a/CHANGELOG.md b/CHANGELOG.md index eeb3dde3e..46bebfc13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `pyneuphonic` package. This removes a package requirement, allowing Neuphonic to work with more services. +- Updated `ElevenLabsTTSService` to handle the case where + `allow_interruptions=False`. Now, when interruptions are disabled, the same + context ID will be used throughout the conversation. + - Updated the `deepgram` optional dependency to 4.7.0, which downgrades the `tasks cancelled error` to a debug log. This removes the log from appearing in Pipecat logs upon leaving. diff --git a/src/pipecat/services/elevenlabs/tts.py b/src/pipecat/services/elevenlabs/tts.py index 80f0371b6..7ea3f92f1 100644 --- a/src/pipecat/services/elevenlabs/tts.py +++ b/src/pipecat/services/elevenlabs/tts.py @@ -642,8 +642,14 @@ class ElevenLabsTTSService(AudioContextWordTTSService): yield TTSStartedFrame() self._started = True self._cumulative_time = 0 - # Create new context ID and register it - self._context_id = str(uuid.uuid4()) + # If a context ID does not exist, create a new one and + # register it. If an ID exists, that means the Pipeline is + # configured for allow_interruptions=False, so continue + # using the current ID. When interruptions are enabled + # (e.g. allow_interruptions=True), user speech results in + # an interruption, which resets the context ID. + if not self._context_id: + self._context_id = str(uuid.uuid4()) await self.create_audio_context(self._context_id) # Initialize context with voice settings