diff --git a/src/pipecat/services/soniox/stt.py b/src/pipecat/services/soniox/stt.py index dd425bcbf..b119a4265 100644 --- a/src/pipecat/services/soniox/stt.py +++ b/src/pipecat/services/soniox/stt.py @@ -176,14 +176,16 @@ class SonioxSTTService(STTService): await self._websocket.close() self._websocket = None - if self._receive_task: - await self.wait_for_task(self._receive_task) - self._receive_task = None - if self._finalize_if_no_tokens_task: await self.cancel_task(self._finalize_if_no_tokens_task) self._finalize_if_no_tokens_task = None + if self._receive_task: + # Task cannot cancel itself. If task called _cleanup() we expect it to cancel itself. + if self._receive_task != asyncio.current_task(): + await self.wait_for_task(self._receive_task) + self._receive_task = None + async def stop(self, frame: EndFrame): """Stop the Soniox STT websocket connection. @@ -323,6 +325,7 @@ class SonioxSTTService(STTService): await send_endpoint_transcript() logger.debug("Transcription finished.") await self._cleanup() + return except websockets.exceptions.ConnectionClosed: # Expected when closing the connection.