diff --git a/src/pipecat/services/cartesia.py b/src/pipecat/services/cartesia.py index ac02ea469..a9d5aae67 100644 --- a/src/pipecat/services/cartesia.py +++ b/src/pipecat/services/cartesia.py @@ -161,6 +161,25 @@ class CartesiaTTSService(AsyncWordTTSService): await self.push_frame(LLMFullResponseEndFrame()) self._context_id = None + async def flush_audio(self): + if not self._context_id or not self._websocket: + return + logger.debug("Flushing audio") + msg = { + "transcript": "", + "continue": False, + "context_id": self._context_id, + "model_id": self._model_id, + "voice": { + "mode": "id", + "id": self._voice_id + }, + "output_format": self._output_format, + "language": self._language, + "add_timestamps": True, + } + await self._websocket.send(json.dumps(msg)) + async def _receive_task_handler(self): try: async for message in self._websocket: diff --git a/src/pipecat/transports/network/fastapi_websocket.py b/src/pipecat/transports/network/fastapi_websocket.py index 16c5e81fc..2c4bd187b 100644 --- a/src/pipecat/transports/network/fastapi_websocket.py +++ b/src/pipecat/transports/network/fastapi_websocket.py @@ -101,7 +101,7 @@ class FastAPIWebsocketOutputTransport(BaseOutputTransport): async def write_raw_audio_frames(self, frames: bytes): self._websocket_audio_buffer += frames - while len(self._websocket_audio_buffer) >= self._params.audio_frame_size: + while len(self._websocket_audio_buffer): frame = AudioRawFrame( audio=self._websocket_audio_buffer[: self._params.audio_frame_size],