diff --git a/src/pipecat/transports/services/daily.py b/src/pipecat/transports/services/daily.py index 4d474e9c9..47575bcce 100644 --- a/src/pipecat/transports/services/daily.py +++ b/src/pipecat/transports/services/daily.py @@ -27,6 +27,7 @@ from pipecat.audio.vad.vad_analyzer import VADAnalyzer, VADParams from pipecat.frames.frames import ( CancelFrame, EndFrame, + ErrorFrame, Frame, InputAudioRawFrame, InterimTranscriptionFrame, @@ -921,6 +922,7 @@ class DailyTransport(BaseTransport): # these handlers. self._register_event_handler("on_joined") self._register_event_handler("on_left") + self._register_event_handler("on_error") self._register_event_handler("on_app_message") self._register_event_handler("on_call_state_updated") self._register_event_handler("on_dialin_connected") @@ -1035,9 +1037,17 @@ class DailyTransport(BaseTransport): await self._call_event_handler("on_left") async def _on_error(self, error): - # TODO(aleix): Report error to input/output transports. The one managing - # the client should report the error. - pass + await self._call_event_handler("on_error", error) + # Push error frame to notify the pipeline + error_frame = ErrorFrame(error) + + if self._input: + await self._input.push_error(error_frame) + elif self._output: + await self._output.push_error(error_frame) + else: + logger.error("Both input and output are None while trying to push error") + raise RuntimeError("No valid input or output channel to push error") async def _on_app_message(self, message: Any, sender: str): if self._input: