diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e2b7fc0d..be8b5dba7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add additional fixups to Mistral context messages to ensure they meet Mistral-specific requirements, avoiding Mistral "invalid request" errors. +- Fixed `DailyTransport` transcription handling to gracefully handle missing + `rawResponse` field in transcription messages, preventing KeyError crashes. + ## [0.0.84] - 2025-09-05 ### Added diff --git a/src/pipecat/transports/daily/transport.py b/src/pipecat/transports/daily/transport.py index 22bd4716d..8c9874a47 100644 --- a/src/pipecat/transports/daily/transport.py +++ b/src/pipecat/transports/daily/transport.py @@ -61,9 +61,7 @@ try: VirtualCameraDevice, VirtualSpeakerDevice, ) - from daily import ( - LogLevel as DailyLogLevel, - ) + from daily import LogLevel as DailyLogLevel except ModuleNotFoundError as e: logger.error(f"Exception: {e}") logger.error( @@ -2317,7 +2315,7 @@ class DailyTransport(BaseTransport): """Handle participant updated events.""" await self._call_event_handler("on_participant_updated", participant) - async def _on_transcription_message(self, message): + async def _on_transcription_message(self, message: Dict[str, Any]) -> None: """Handle transcription message events.""" await self._call_event_handler("on_transcription_message", message) @@ -2329,9 +2327,10 @@ class DailyTransport(BaseTransport): text = message["text"] timestamp = message["timestamp"] - is_final = message["rawResponse"]["is_final"] + raw_response = message.get("rawResponse", {}) + is_final = raw_response.get("is_final", False) try: - language = message["rawResponse"]["channel"]["alternatives"][0]["languages"][0] + language = raw_response["channel"]["alternatives"][0]["languages"][0] language = Language(language) except KeyError: language = None