diff --git a/src/pipecat/processors/frame_processor.py b/src/pipecat/processors/frame_processor.py index b117cec83..97fe6b7f6 100644 --- a/src/pipecat/processors/frame_processor.py +++ b/src/pipecat/processors/frame_processor.py @@ -665,7 +665,6 @@ class FrameProcessor(BaseObject): ``` """ error_message = error_msg or f"{self} exception: {exception}" - logger.error(error_message) error_frame = ErrorFrame( error=error_message, fatal=fatal, exception=exception, processor=self ) @@ -680,6 +679,7 @@ class FrameProcessor(BaseObject): if not error.processor: error.processor = self await self._call_event_handler("on_error", error) + logger.error(error.error) await self.push_frame(error, FrameDirection.UPSTREAM) async def push_frame(self, frame: Frame, direction: FrameDirection = FrameDirection.DOWNSTREAM): diff --git a/src/pipecat/services/asyncai/tts.py b/src/pipecat/services/asyncai/tts.py index a6b71ba60..4c9c0c96c 100644 --- a/src/pipecat/services/asyncai/tts.py +++ b/src/pipecat/services/asyncai/tts.py @@ -285,12 +285,11 @@ class AsyncAITTSService(InterruptibleTTSService): ) await self.push_frame(frame) elif msg.get("error_code"): - logger.error(f"{self} error: {msg}") await self.push_frame(TTSStoppedFrame()) await self.stop_all_metrics() await self.push_error(error_msg=f"{self} error: {msg['message']}") else: - logger.error(f"{self} error, unknown message type: {msg}") + await self.push_error(error_msg=f"{self} error, unknown message type: {msg}") async def _keepalive_task_handler(self): """Send periodic keepalive messages to maintain WebSocket connection.""" @@ -333,7 +332,6 @@ class AsyncAITTSService(InterruptibleTTSService): await self._get_websocket().send(msg) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -341,7 +339,6 @@ class AsyncAITTSService(InterruptibleTTSService): return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/aws/nova_sonic/llm.py b/src/pipecat/services/aws/nova_sonic/llm.py index 2572b03cb..4058aeb2d 100644 --- a/src/pipecat/services/aws/nova_sonic/llm.py +++ b/src/pipecat/services/aws/nova_sonic/llm.py @@ -452,7 +452,7 @@ class AWSNovaSonicLLMService(LLMService): self._ready_to_send_context = True await self._finish_connecting_if_context_available() except Exception as e: - logger.error(f"{self} initialization error: {e}") + await self.push_error(exception=e) await self._disconnect() async def _process_completed_function_calls(self, send_new_results: bool): @@ -576,7 +576,7 @@ class AWSNovaSonicLLMService(LLMService): logger.info("Finished disconnecting") except Exception as e: - logger.error(f"{self} error disconnecting: {e}") + await self.push_error(error_msg=f"Error disconnecting: {e}", exception=e) def _create_client(self) -> BedrockRuntimeClient: config = Config( @@ -884,7 +884,7 @@ class AWSNovaSonicLLMService(LLMService): # Errors are kind of expected while disconnecting, so just # ignore them and do nothing return - logger.error(f"{self} error processing responses: {e}") + await self.push_error(exception=e) if self._wants_connection: await self.reset_conversation() diff --git a/src/pipecat/services/aws/stt.py b/src/pipecat/services/aws/stt.py index 81140876d..58123ac69 100644 --- a/src/pipecat/services/aws/stt.py +++ b/src/pipecat/services/aws/stt.py @@ -181,7 +181,6 @@ class AWSTranscribeSTTService(STTService): try: await self._connect() except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") return @@ -199,12 +198,10 @@ class AWSTranscribeSTTService(STTService): await self._disconnect() # Don't yield error here - we'll retry on next frame except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") await self._disconnect() except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") await self._disconnect() @@ -526,13 +523,14 @@ class AWSTranscribeSTTService(STTService): ) elif headers.get(":message-type") == "exception": error_msg = payload.get("Message", "Unknown error") - logger.error(f"{self} Exception from AWS: {error_msg}") - await self.push_frame(ErrorFrame(f"AWS Transcribe error: {error_msg}")) + await self.push_error(error_msg=f"AWS Transcribe error: {error_msg}") else: logger.debug(f"{self} Other message type received: {headers}") logger.debug(f"{self} Payload: {payload}") except websockets.exceptions.ConnectionClosed as e: - logger.error(f"{self} WebSocket connection closed in receive loop: {e}") + await self.push_error( + error_msg=f"WebSocket connection closed in receive loop", exception=e + ) break except Exception as e: await self.push_error(exception=e) diff --git a/src/pipecat/services/aws/tts.py b/src/pipecat/services/aws/tts.py index 47e40d6cf..7e319abea 100644 --- a/src/pipecat/services/aws/tts.py +++ b/src/pipecat/services/aws/tts.py @@ -312,7 +312,6 @@ class AWSPollyTTSService(TTSService): yield TTSStoppedFrame() except (BotoCoreError, ClientError) as error: - logger.error(f"{self} error generating TTS: {error}") error_message = f"AWS Polly TTS error: {str(error)}" yield ErrorFrame(error=error_message) diff --git a/src/pipecat/services/azure/image.py b/src/pipecat/services/azure/image.py index f07b86f83..6b0b140e0 100644 --- a/src/pipecat/services/azure/image.py +++ b/src/pipecat/services/azure/image.py @@ -91,7 +91,6 @@ class AzureImageGenServiceREST(ImageGenService): while status != "succeeded": attempts_left -= 1 if attempts_left == 0: - logger.error(f"{self} error: image generation timed out") yield ErrorFrame("Image generation timed out") return @@ -104,7 +103,6 @@ class AzureImageGenServiceREST(ImageGenService): image_url = json_response["result"]["data"][0]["url"] if json_response else None if not image_url: - logger.error(f"{self} error: image generation failed") yield ErrorFrame("Image generation failed") return diff --git a/src/pipecat/services/azure/realtime/llm.py b/src/pipecat/services/azure/realtime/llm.py index 66ba95eea..2b159c380 100644 --- a/src/pipecat/services/azure/realtime/llm.py +++ b/src/pipecat/services/azure/realtime/llm.py @@ -61,5 +61,5 @@ class AzureRealtimeLLMService(OpenAIRealtimeLLMService): ) self._receive_task = self.create_task(self._receive_task_handler()) except Exception as e: - logger.error(f"{self} initialization error: {e}") + await self.push_error(exception=e) self._websocket = None diff --git a/src/pipecat/services/azure/stt.py b/src/pipecat/services/azure/stt.py index 036b402e8..cb3af8fa1 100644 --- a/src/pipecat/services/azure/stt.py +++ b/src/pipecat/services/azure/stt.py @@ -121,7 +121,6 @@ class AzureSTTService(STTService): self._audio_stream.write(audio) yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") async def start(self, frame: StartFrame): diff --git a/src/pipecat/services/azure/tts.py b/src/pipecat/services/azure/tts.py index a1040f312..4ec4d795f 100644 --- a/src/pipecat/services/azure/tts.py +++ b/src/pipecat/services/azure/tts.py @@ -327,7 +327,6 @@ class AzureTTSService(AzureBaseTTSService): try: if self._speech_synthesizer is None: error_msg = "Speech synthesizer not initialized." - logger.error(error_msg) yield ErrorFrame(error=error_msg) return @@ -355,14 +354,12 @@ class AzureTTSService(AzureBaseTTSService): yield TTSStoppedFrame() except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() # Could add reconnection logic here if needed return except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -440,5 +437,4 @@ class AzureHttpTTSService(AzureBaseTTSService): cancellation_details = result.cancellation_details logger.warning(f"Speech synthesis canceled: {cancellation_details.reason}") if cancellation_details.reason == CancellationReason.Error: - logger.error(f"{self} error: {cancellation_details.error_details}") yield ErrorFrame(error=f"{self} error: {cancellation_details.error_details}") diff --git a/src/pipecat/services/cartesia/tts.py b/src/pipecat/services/cartesia/tts.py index 850a27fd1..70ce91f30 100644 --- a/src/pipecat/services/cartesia/tts.py +++ b/src/pipecat/services/cartesia/tts.py @@ -467,7 +467,7 @@ class CartesiaTTSService(AudioContextWordTTSService): await self.push_error(error_msg=f"{self} error: {msg}") self._context_id = None else: - logger.error(f"{self} error, unknown message type: {msg}") + await self.push_error(error_msg=f"{self} error, unknown message type: {msg}") async def _receive_messages(self): while True: @@ -505,7 +505,6 @@ class CartesiaTTSService(AudioContextWordTTSService): await self._get_websocket().send(msg) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -513,7 +512,6 @@ class CartesiaTTSService(AudioContextWordTTSService): return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/deepgram/flux/stt.py b/src/pipecat/services/deepgram/flux/stt.py index 94010362f..0313a5b05 100644 --- a/src/pipecat/services/deepgram/flux/stt.py +++ b/src/pipecat/services/deepgram/flux/stt.py @@ -378,7 +378,6 @@ class DeepgramFluxSTTService(WebsocketSTTService): are issues sending the audio data. """ if not self._websocket: - logger.error("Not connected to Deepgram Flux.") yield ErrorFrame("Not connected to Deepgram Flux.") return @@ -386,7 +385,6 @@ class DeepgramFluxSTTService(WebsocketSTTService): self._last_stt_time = time.monotonic() await self.send_with_retry(audio, self._report_error) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") return diff --git a/src/pipecat/services/deepgram/stt.py b/src/pipecat/services/deepgram/stt.py index a4162840a..6513fb186 100644 --- a/src/pipecat/services/deepgram/stt.py +++ b/src/pipecat/services/deepgram/stt.py @@ -233,7 +233,7 @@ class DeepgramSTTService(STTService): ) if not await self._connection.start(options=self._settings, addons=self._addons): - logger.error(f"{self}: unable to connect to Deepgram") + await self.push_error(error_msg=f"Unable to connect to Deepgram") async def _disconnect(self): if await self._connection.is_connected(): diff --git a/src/pipecat/services/deepgram/tts.py b/src/pipecat/services/deepgram/tts.py index 49e101d81..b9ef2d4ac 100644 --- a/src/pipecat/services/deepgram/tts.py +++ b/src/pipecat/services/deepgram/tts.py @@ -116,7 +116,6 @@ class DeepgramTTSService(TTSService): yield TTSStoppedFrame() except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -227,5 +226,4 @@ class DeepgramHttpTTSService(TTSService): yield TTSStoppedFrame() except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(f"Error getting audio: {str(e)}") diff --git a/src/pipecat/services/elevenlabs/stt.py b/src/pipecat/services/elevenlabs/stt.py index 034532496..763852dca 100644 --- a/src/pipecat/services/elevenlabs/stt.py +++ b/src/pipecat/services/elevenlabs/stt.py @@ -351,7 +351,6 @@ class ElevenLabsSTTService(SegmentedSTTService): ) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -586,7 +585,6 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService): } await self._websocket.send(json.dumps(message)) except Exception as e: - logger.error(f"Error sending audio: {e}") yield ErrorFrame(f"ElevenLabs Realtime STT error: {str(e)}") yield None @@ -656,7 +654,7 @@ class ElevenLabsRealtimeSTTService(WebsocketSTTService): logger.debug("Disconnecting from ElevenLabs Realtime STT") await self._websocket.close() except Exception as e: - logger.error(f"{self} error closing websocket: {e}") + await self.push_error(error_msg=f"Error closing websocket: {e}", exception=e) finally: self._websocket = None await self._call_event_handler("on_disconnected") diff --git a/src/pipecat/services/elevenlabs/tts.py b/src/pipecat/services/elevenlabs/tts.py index 1fd99d575..46ffee31c 100644 --- a/src/pipecat/services/elevenlabs/tts.py +++ b/src/pipecat/services/elevenlabs/tts.py @@ -535,9 +535,8 @@ class ElevenLabsTTSService(AudioContextWordTTSService): await self._call_event_handler("on_connected") except Exception as e: - logger.error(f"{self} exception: {e}") self._websocket = None - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(exception=e) await self._call_event_handler("on_connection_error", f"{e}") async def _disconnect_websocket(self): @@ -582,8 +581,7 @@ class ElevenLabsTTSService(AudioContextWordTTSService): json.dumps({"context_id": self._context_id, "close_context": True}) ) except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(exception=e) self._context_id = None self._started = False self._partial_word = "" @@ -738,14 +736,12 @@ class ElevenLabsTTSService(AudioContextWordTTSService): else: await self._send_text(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield TTSStoppedFrame() yield ErrorFrame(error=f"{self} error: {e}") self._started = False return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -1041,7 +1037,6 @@ class ElevenLabsHttpTTSService(WordTTSService): ) as response: if response.status != 200: error_text = await response.text() - logger.error(f"{self} error: {error_text}") yield ErrorFrame(error=f"ElevenLabs API error: {error_text}") return @@ -1089,7 +1084,6 @@ class ElevenLabsHttpTTSService(WordTTSService): logger.warning(f"Failed to parse JSON from stream: {e}") continue except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") continue @@ -1114,7 +1108,6 @@ class ElevenLabsHttpTTSService(WordTTSService): self._previous_text = text except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") finally: await self.stop_ttfb_metrics() diff --git a/src/pipecat/services/fal/image.py b/src/pipecat/services/fal/image.py index c110ec3be..6bca6701a 100644 --- a/src/pipecat/services/fal/image.py +++ b/src/pipecat/services/fal/image.py @@ -110,7 +110,6 @@ class FalImageGenService(ImageGenService): image_url = response["images"][0]["url"] if response else None if not image_url: - logger.error(f"{self} error: image generation failed") yield ErrorFrame("Image generation failed") return diff --git a/src/pipecat/services/fal/stt.py b/src/pipecat/services/fal/stt.py index 8b84aaeeb..f70dfcab3 100644 --- a/src/pipecat/services/fal/stt.py +++ b/src/pipecat/services/fal/stt.py @@ -290,5 +290,4 @@ class FalSTTService(SegmentedSTTService): ) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/fish/tts.py b/src/pipecat/services/fish/tts.py index 950db6464..7326439c0 100644 --- a/src/pipecat/services/fish/tts.py +++ b/src/pipecat/services/fish/tts.py @@ -320,7 +320,6 @@ class FishAudioTTSService(InterruptibleTTSService): flush_message = {"event": "flush"} await self._get_websocket().send(ormsgpack.packb(flush_message)) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -329,5 +328,4 @@ class FishAudioTTSService(InterruptibleTTSService): yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/gladia/stt.py b/src/pipecat/services/gladia/stt.py index 4ba359c06..9b3fb11f7 100644 --- a/src/pipecat/services/gladia/stt.py +++ b/src/pipecat/services/gladia/stt.py @@ -558,8 +558,7 @@ class GladiaSTTService(STTService): except websockets.exceptions.ConnectionClosed: logger.debug("Connection closed during keepalive") except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(exception=e) async def _receive_task_handler(self): try: @@ -630,7 +629,10 @@ class GladiaSTTService(STTService): return False self._reconnection_attempts += 1 if self._reconnection_attempts > self._max_reconnection_attempts: - logger.error(f"Max reconnection attempts ({self._max_reconnection_attempts}) reached") + await self.push_error( + error_msg=f"Max reconnection attempts ({self._max_reconnection_attempts}) reached", + fatal=True, + ) self._should_reconnect = False return False delay = self._reconnection_delay * (2 ** (self._reconnection_attempts - 1)) diff --git a/src/pipecat/services/google/gemini_live/llm.py b/src/pipecat/services/google/gemini_live/llm.py index ae34ae517..fc0fc069a 100644 --- a/src/pipecat/services/google/gemini_live/llm.py +++ b/src/pipecat/services/google/gemini_live/llm.py @@ -1251,11 +1251,11 @@ class GeminiLiveLLMService(LLMService): ) if self._consecutive_failures >= MAX_CONSECUTIVE_FAILURES: - logger.error( + error_msg = ( f"Max consecutive failures ({MAX_CONSECUTIVE_FAILURES}) reached, " "treating as fatal error" ) - await self.push_error(ErrorFrame(error=f"{self} Error in receive loop: {error}")) + await self.push_error(error_msg=error_msg, exception=error, fatal=True) return False else: logger.info( @@ -1283,7 +1283,7 @@ class GeminiLiveLLMService(LLMService): self._completed_tool_calls = set() self._disconnecting = False except Exception as e: - logger.error(f"{self} error disconnecting: {e}") + await self.push_error(error_msg=f"Error disconnecting: {e}", exception=e) async def _send_user_audio(self, frame): """Send user audio frame to Gemini Live API.""" diff --git a/src/pipecat/services/google/image.py b/src/pipecat/services/google/image.py index 5d7a461b3..f92c7bb2b 100644 --- a/src/pipecat/services/google/image.py +++ b/src/pipecat/services/google/image.py @@ -110,7 +110,6 @@ class GoogleImageGenService(ImageGenService): await self.stop_ttfb_metrics() if not response or not response.generated_images: - logger.error(f"{self} error: image generation failed") yield ErrorFrame("Image generation failed") return @@ -128,5 +127,4 @@ class GoogleImageGenService(ImageGenService): yield frame except Exception as e: - logger.error(f"{self} error generating image: {e}") yield ErrorFrame(f"Image generation error: {str(e)}") diff --git a/src/pipecat/services/google/llm.py b/src/pipecat/services/google/llm.py index 4bfa7e1d7..3c4350c7e 100644 --- a/src/pipecat/services/google/llm.py +++ b/src/pipecat/services/google/llm.py @@ -983,7 +983,7 @@ class GoogleLLMService(LLMService): except DeadlineExceeded: await self._call_event_handler("on_completion_timeout") except Exception as e: - logger.error(f"{self} exception: {e}") + await self.push_error(exception=e) finally: if grounding_metadata and isinstance(grounding_metadata, dict): llm_search_frame = LLMSearchResponseFrame( diff --git a/src/pipecat/services/google/stt.py b/src/pipecat/services/google/stt.py index 6d78a1f54..96e2ecb84 100644 --- a/src/pipecat/services/google/stt.py +++ b/src/pipecat/services/google/stt.py @@ -805,8 +805,7 @@ class GoogleSTTService(STTService): break except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(exception=e) await asyncio.sleep(1) # Brief delay before reconnecting self._stream_start_time = int(time.time() * 1000) @@ -900,8 +899,7 @@ class GoogleSTTService(STTService): ) raise except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(exception=e) # Re-raise the exception to let it propagate (e.g. in the case of a # timeout, propagate to _stream_audio to reconnect) raise diff --git a/src/pipecat/services/google/tts.py b/src/pipecat/services/google/tts.py index cf03e2d52..8395c68aa 100644 --- a/src/pipecat/services/google/tts.py +++ b/src/pipecat/services/google/tts.py @@ -737,7 +737,6 @@ class GoogleHttpTTSService(TTSService): yield TTSStoppedFrame() except Exception as e: - logger.error(f"{self} exception: {e}") error_message = f"TTS generation error: {str(e)}" yield ErrorFrame(error=error_message) @@ -996,9 +995,7 @@ class GoogleTTSService(GoogleBaseTTSService): yield frame except Exception as e: - logger.error(f"{self} exception: {e}") - error_message = f"TTS generation error: {str(e)}" - yield ErrorFrame(error=error_message) + await self.push_error(exception=e) class GeminiTTSService(GoogleBaseTTSService): @@ -1248,6 +1245,5 @@ class GeminiTTSService(GoogleBaseTTSService): yield frame except Exception as e: - logger.error(f"{self} exception: {e}") error_message = f"Gemini TTS generation error: {str(e)}" yield ErrorFrame(error=error_message) diff --git a/src/pipecat/services/groq/tts.py b/src/pipecat/services/groq/tts.py index 9026c4c4c..aecfdf584 100644 --- a/src/pipecat/services/groq/tts.py +++ b/src/pipecat/services/groq/tts.py @@ -146,7 +146,6 @@ class GroqTTSService(TTSService): bytes = w.readframes(num_frames) yield TTSAudioRawFrame(bytes, frame_rate, channels) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() diff --git a/src/pipecat/services/lmnt/tts.py b/src/pipecat/services/lmnt/tts.py index 27f215b47..31bb3aaf3 100644 --- a/src/pipecat/services/lmnt/tts.py +++ b/src/pipecat/services/lmnt/tts.py @@ -230,8 +230,7 @@ class LmntTTSService(InterruptibleTTSService): # await self._websocket.send(json.dumps({"eof": True})) await self._websocket.close() except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error disconnecting from LMNT: {e}", exception=e) finally: self._started = False self._websocket = None @@ -300,7 +299,6 @@ class LmntTTSService(InterruptibleTTSService): await self._get_websocket().send(json.dumps({"flush": True})) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -308,5 +306,4 @@ class LmntTTSService(InterruptibleTTSService): return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/mcp_service.py b/src/pipecat/services/mcp_service.py index ccfb47adb..2c1a53768 100644 --- a/src/pipecat/services/mcp_service.py +++ b/src/pipecat/services/mcp_service.py @@ -176,7 +176,6 @@ class MCPClient(BaseObject): except Exception as e: error_msg = f"Error calling mcp tool {params.function_name}: {str(e)}" logger.error(error_msg) - logger.exception("Full exception details:") await params.result_callback(error_msg) async def _stdio_list_tools(self) -> ToolsSchema: @@ -207,7 +206,6 @@ class MCPClient(BaseObject): except Exception as e: error_msg = f"Error calling mcp tool {params.function_name}: {str(e)}" logger.error(error_msg) - logger.exception("Full exception details:") await params.result_callback(error_msg) async def _streamable_http_list_tools(self) -> ToolsSchema: @@ -246,7 +244,6 @@ class MCPClient(BaseObject): except Exception as e: error_msg = f"Error calling mcp tool {params.function_name}: {str(e)}" logger.error(error_msg) - logger.exception("Full exception details:") await params.result_callback(error_msg) async def _call_tool(self, session, function_name, arguments, result_callback): @@ -302,7 +299,6 @@ class MCPClient(BaseObject): except Exception as e: logger.error(f"Failed to read tool '{tool_name}': {str(e)}") - logger.exception("Full exception details:") continue logger.debug(f"Completed reading {len(tool_schemas)} tools") diff --git a/src/pipecat/services/mem0/memory.py b/src/pipecat/services/mem0/memory.py index a80398728..f0983eb9b 100644 --- a/src/pipecat/services/mem0/memory.py +++ b/src/pipecat/services/mem0/memory.py @@ -253,8 +253,7 @@ class Mem0MemoryService(FrameProcessor): # Otherwise, pass the enhanced context frame downstream await self.push_frame(frame) except Exception as e: - logger.error(f"Error processing with Mem0: {str(e)}") - await self.push_frame(ErrorFrame(f"Error processing with Mem0: {str(e)}")) + await self.push_error(exception=e) await self.push_frame(frame) # Still pass the original frame through else: # For non-context frames, just pass them through diff --git a/src/pipecat/services/minimax/tts.py b/src/pipecat/services/minimax/tts.py index 05e2dac3b..992809a83 100644 --- a/src/pipecat/services/minimax/tts.py +++ b/src/pipecat/services/minimax/tts.py @@ -264,7 +264,6 @@ class MiniMaxHttpTTSService(TTSService): ) as response: if response.status != 200: error_message = f"MiniMax TTS error: HTTP {response.status}" - logger.error(error_message) yield ErrorFrame(error=error_message) return @@ -338,8 +337,7 @@ class MiniMaxHttpTTSService(TTSService): continue except Exception as e: - logger.error(f"{self} exception: {e}") - yield ErrorFrame(error=f"{self} error: {e}") + await self.push_error(exception=e) finally: await self.stop_ttfb_metrics() yield TTSStoppedFrame() diff --git a/src/pipecat/services/moondream/vision.py b/src/pipecat/services/moondream/vision.py index b7527f76c..e9ce86383 100644 --- a/src/pipecat/services/moondream/vision.py +++ b/src/pipecat/services/moondream/vision.py @@ -110,7 +110,6 @@ class MoondreamService(VisionService): if analysis fails. """ if not self._model: - logger.error(f"{self} error: Moondream model not available ({self.model_name})") yield ErrorFrame("Moondream model not available") return diff --git a/src/pipecat/services/neuphonic/tts.py b/src/pipecat/services/neuphonic/tts.py index 3faedee40..28d92ec89 100644 --- a/src/pipecat/services/neuphonic/tts.py +++ b/src/pipecat/services/neuphonic/tts.py @@ -298,8 +298,7 @@ class NeuphonicTTSService(InterruptibleTTSService): logger.debug("Disconnecting from Neuphonic") await self._websocket.close() except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(exception=e) finally: self._started = False self._websocket = None @@ -364,7 +363,6 @@ class NeuphonicTTSService(InterruptibleTTSService): await self._send_text(text) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -372,7 +370,6 @@ class NeuphonicTTSService(InterruptibleTTSService): return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -538,7 +535,6 @@ class NeuphonicHttpTTSService(TTSService): error_text = await response.text() error_message = f"Neuphonic API error: HTTP {response.status} - {error_text}" logger.error(error_message) - yield ErrorFrame(error=error_message) return await self.start_tts_usage_metrics(text) @@ -567,7 +563,6 @@ class NeuphonicHttpTTSService(TTSService): yield TTSAudioRawFrame(audio_bytes, self.sample_rate, 1) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") # Don't yield error frame for individual message failures continue @@ -576,7 +571,6 @@ class NeuphonicHttpTTSService(TTSService): logger.debug("TTS generation cancelled") raise except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") finally: await self.stop_ttfb_metrics() diff --git a/src/pipecat/services/openai/image.py b/src/pipecat/services/openai/image.py index 9501aace9..9daa8f2b9 100644 --- a/src/pipecat/services/openai/image.py +++ b/src/pipecat/services/openai/image.py @@ -76,7 +76,6 @@ class OpenAIImageGenService(ImageGenService): image_url = image.data[0].url if not image_url: - logger.error(f"{self} No image provided in response: {image}") yield ErrorFrame("Image generation failed") return diff --git a/src/pipecat/services/openai/realtime/llm.py b/src/pipecat/services/openai/realtime/llm.py index ab5079f68..d36a49304 100644 --- a/src/pipecat/services/openai/realtime/llm.py +++ b/src/pipecat/services/openai/realtime/llm.py @@ -443,7 +443,7 @@ class OpenAIRealtimeLLMService(LLMService): ) self._receive_task = self.create_task(self._receive_task_handler()) except Exception as e: - logger.error(f"{self} initialization error: {e}") + await self.push_error(error_msg=f"Error connecting: {e}", exception=e) self._websocket = None async def _disconnect(self): @@ -460,7 +460,7 @@ class OpenAIRealtimeLLMService(LLMService): self._completed_tool_calls = set() self._disconnecting = False except Exception as e: - logger.error(f"{self} error disconnecting: {e}") + await self.push_error(error_msg=f"Error disconnecting: {e}", exception=e) async def _ws_send(self, realtime_message): try: @@ -473,7 +473,6 @@ class OpenAIRealtimeLLMService(LLMService): # somehow *started* the websocket send attempt while we still # had a connection) return - logger.error(f"Error sending message to websocket: {e}") # In server-to-server contexts, a WebSocket error should be quite rare. Given how hard # it is to recover from a send-side error with proper state management, and that exponential # backoff for retries can have cost/stability implications for a service cluster, let's just diff --git a/src/pipecat/services/openai/tts.py b/src/pipecat/services/openai/tts.py index bb2d08883..62f930307 100644 --- a/src/pipecat/services/openai/tts.py +++ b/src/pipecat/services/openai/tts.py @@ -206,5 +206,4 @@ class OpenAITTSService(TTSService): yield frame yield TTSStoppedFrame() except BadRequestError as e: - logger.error(f"{self} error generating TTS: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/openai_realtime_beta/azure.py b/src/pipecat/services/openai_realtime_beta/azure.py index 2ec556ee3..e55dd075f 100644 --- a/src/pipecat/services/openai_realtime_beta/azure.py +++ b/src/pipecat/services/openai_realtime_beta/azure.py @@ -79,5 +79,5 @@ class AzureRealtimeBetaLLMService(OpenAIRealtimeBetaLLMService): ) self._receive_task = self.create_task(self._receive_task_handler()) except Exception as e: - logger.error(f"{self} initialization error: {e}") + await self.push_error(error_msg=f"Error connecting: {e}", exception=e) self._websocket = None diff --git a/src/pipecat/services/openai_realtime_beta/openai.py b/src/pipecat/services/openai_realtime_beta/openai.py index f572f15ca..69378e32b 100644 --- a/src/pipecat/services/openai_realtime_beta/openai.py +++ b/src/pipecat/services/openai_realtime_beta/openai.py @@ -424,7 +424,7 @@ class OpenAIRealtimeBetaLLMService(LLMService): ) self._receive_task = self.create_task(self._receive_task_handler()) except Exception as e: - logger.error(f"{self} initialization error: {e}") + await self.push_error(error_msg=f"Error connecting: {e}", exception=e) self._websocket = None async def _disconnect(self): @@ -440,7 +440,7 @@ class OpenAIRealtimeBetaLLMService(LLMService): self._receive_task = None self._disconnecting = False except Exception as e: - logger.error(f"{self} error disconnecting: {e}") + await self.push_error(error_msg=f"Error disconnecting: {e}", exception=e) async def _ws_send(self, realtime_message): try: @@ -449,7 +449,6 @@ class OpenAIRealtimeBetaLLMService(LLMService): except Exception as e: if self._disconnecting: return - logger.error(f"Error sending message to websocket: {e}") # In server-to-server contexts, a WebSocket error should be quite rare. Given how hard # it is to recover from a send-side error with proper state management, and that exponential # backoff for retries can have cost/stability implications for a service cluster, let's just diff --git a/src/pipecat/services/piper/tts.py b/src/pipecat/services/piper/tts.py index dd842ff11..f3a76c9e7 100644 --- a/src/pipecat/services/piper/tts.py +++ b/src/pipecat/services/piper/tts.py @@ -88,9 +88,6 @@ class PiperTTSService(TTSService): ) as response: if response.status != 200: error = await response.text() - logger.error( - f"{self} error getting audio (status: {response.status}, error: {error})" - ) yield ErrorFrame( error=f"Error getting audio (status: {response.status}, error: {error})" ) diff --git a/src/pipecat/services/playht/tts.py b/src/pipecat/services/playht/tts.py index 9323755c4..9e10b413b 100644 --- a/src/pipecat/services/playht/tts.py +++ b/src/pipecat/services/playht/tts.py @@ -266,7 +266,7 @@ class PlayHTTTSService(InterruptibleTTSService): self._websocket = None await self._call_event_handler("on_connection_error", f"{e}") except Exception as e: - await self.push_error(exception=e) + await self.push_error(error_msg=f"Error connecting: {e}", exception=e) self._websocket = None await self._call_event_handler("on_connection_error", f"{e}") @@ -279,8 +279,7 @@ class PlayHTTTSService(InterruptibleTTSService): logger.debug("Disconnecting from PlayHT") await self._websocket.close() except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error disconnecting: {e}", exception=e) finally: self._request_id = None self._websocket = None @@ -350,7 +349,6 @@ class PlayHTTTSService(InterruptibleTTSService): await self.push_frame(TTSStoppedFrame()) self._request_id = None elif "error" in msg: - logger.error(f"{self} error: {msg}") await self.push_error(error_msg=f"{self} error: {msg['error']}") except json.JSONDecodeError: logger.error(f"Invalid JSON message: {message}") @@ -393,7 +391,6 @@ class PlayHTTTSService(InterruptibleTTSService): await self._get_websocket().send(json.dumps(tts_command)) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -404,7 +401,6 @@ class PlayHTTTSService(InterruptibleTTSService): yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -625,7 +621,6 @@ class PlayHTHttpTTSService(TTSService): yield frame except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") finally: await self.stop_ttfb_metrics() diff --git a/src/pipecat/services/rime/tts.py b/src/pipecat/services/rime/tts.py index e11160a73..c7052efab 100644 --- a/src/pipecat/services/rime/tts.py +++ b/src/pipecat/services/rime/tts.py @@ -259,7 +259,7 @@ class RimeTTSService(AudioContextWordTTSService): await self._call_event_handler("on_connected") except Exception as e: - await self.push_error(exception=e) + await self.push_error(error_msg=f"Error connecting: {e}", exception=e) self._websocket = None await self._call_event_handler("on_connection_error", f"{e}") @@ -271,8 +271,7 @@ class RimeTTSService(AudioContextWordTTSService): await self._websocket.send(json.dumps(self._build_eos_msg())) await self._websocket.close() except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error disconnecting: {e}", exception=e) finally: self._context_id = None self._websocket = None @@ -409,7 +408,6 @@ class RimeTTSService(AudioContextWordTTSService): await self._get_websocket().send(json.dumps(msg)) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -417,7 +415,6 @@ class RimeTTSService(AudioContextWordTTSService): return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") @@ -549,7 +546,6 @@ class RimeHttpTTSService(TTSService): ) as response: if response.status != 200: error_message = f"Rime TTS error: HTTP {response.status}" - logger.error(error_message) yield ErrorFrame(error=error_message) return @@ -567,7 +563,6 @@ class RimeHttpTTSService(TTSService): yield frame except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") finally: await self.stop_ttfb_metrics() diff --git a/src/pipecat/services/riva/stt.py b/src/pipecat/services/riva/stt.py index 25cc78c7a..cc4751815 100644 --- a/src/pipecat/services/riva/stt.py +++ b/src/pipecat/services/riva/stt.py @@ -655,11 +655,9 @@ class RivaSegmentedSTTService(SegmentedSTTService): logger.debug("No transcription results found in Riva response") except AttributeError as ae: - logger.error(f"Unexpected response structure from Riva: {ae}") yield ErrorFrame(f"Unexpected Riva response format: {str(ae)}") except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/riva/tts.py b/src/pipecat/services/riva/tts.py index 8b9effbba..a18938e5f 100644 --- a/src/pipecat/services/riva/tts.py +++ b/src/pipecat/services/riva/tts.py @@ -180,7 +180,6 @@ class RivaTTSService(TTSService): yield frame resp = await asyncio.wait_for(queue.get(), timeout=RIVA_TTS_TIMEOUT_SECS) except asyncio.TimeoutError: - logger.error(f"{self} timeout waiting for audio response") yield ErrorFrame(error=f"{self} error: {e}") await self.start_tts_usage_metrics(text) diff --git a/src/pipecat/services/sarvam/stt.py b/src/pipecat/services/sarvam/stt.py index ec5c6702f..29b6e9a90 100644 --- a/src/pipecat/services/sarvam/stt.py +++ b/src/pipecat/services/sarvam/stt.py @@ -348,7 +348,9 @@ class SarvamSTTService(STTService): # Exit the async context manager await self._websocket_context.__aexit__(None, None, None) except Exception as e: - logger.error(f"Error closing WebSocket connection: {e}") + await self.push_error( + error_msg=f"Error closing WebSocket connection: {e}", exception=e + ) finally: logger.debug("Disconnected from Sarvam WebSocket") self._socket_client = None @@ -368,8 +370,7 @@ class SarvamSTTService(STTService): # Messages will be handled via the _message_handler callback await self._socket_client.start_listening() except Exception as e: - logger.error(f"Error in Sarvam receive task: {e}") - await self.push_error(ErrorFrame(f"Sarvam receive task error: {e}")) + await self.push_error(error_msg=f"Sarvam receive task error: {e}", exception=e) async def _handle_message(self, message): """Handle incoming WebSocket message from Sarvam SDK. diff --git a/src/pipecat/services/sarvam/tts.py b/src/pipecat/services/sarvam/tts.py index 341e2dbf6..3add2c989 100644 --- a/src/pipecat/services/sarvam/tts.py +++ b/src/pipecat/services/sarvam/tts.py @@ -284,8 +284,7 @@ class SarvamHttpTTSService(TTSService): yield frame except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error generating TTS: {e}", exception=e) finally: await self.stop_ttfb_metrics() yield TTSStoppedFrame() @@ -582,8 +581,9 @@ class SarvamTTSService(InterruptibleTTSService): await self._call_event_handler("on_connected") except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error( + error_msg=f"Error connecting to Sarvam TTS Websocket: {e}", exception=e + ) self._websocket = None await self._call_event_handler("on_connection_error", f"{e}") @@ -611,8 +611,7 @@ class SarvamTTSService(InterruptibleTTSService): logger.debug("Disconnecting from Sarvam") await self._websocket.close() except Exception as e: - logger.error(f"{self} error closing websocket: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error closing websocket: {e}", exception=e) finally: self._started = False self._websocket = None @@ -636,7 +635,7 @@ class SarvamTTSService(InterruptibleTTSService): await self.push_frame(frame) elif msg.get("type") == "error": error_msg = msg["data"]["message"] - logger.error(f"TTS Error: {error_msg}") + await self.push_error(error_msg=f"TTS Error: {error_msg}") # If it's a timeout error, the connection might need to be reset if "too long" in error_msg.lower() or "timeout" in error_msg.lower(): @@ -698,7 +697,6 @@ class SarvamTTSService(InterruptibleTTSService): await self._send_text(text) await self.start_tts_usage_metrics(text) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") yield TTSStoppedFrame() await self._disconnect() @@ -706,5 +704,4 @@ class SarvamTTSService(InterruptibleTTSService): return yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/simli/video.py b/src/pipecat/services/simli/video.py index cb3c90dad..35961cff1 100644 --- a/src/pipecat/services/simli/video.py +++ b/src/pipecat/services/simli/video.py @@ -178,7 +178,7 @@ class SimliVideoService(FrameProcessor): self._audio_task = self.create_task(self._consume_and_process_audio()) self._video_task = self.create_task(self._consume_and_process_video()) except Exception as e: - logger.error(f"{self}: unable to start connection: {e}") + await self.push_error(error_msg=f"Unable to start connection: {e}", exception=e) async def _consume_and_process_audio(self): """Consume audio frames from Simli and push them downstream.""" @@ -256,7 +256,7 @@ class SimliVideoService(FrameProcessor): await self._simli_client.send(audioBytes) return except Exception as e: - logger.error(f"{self} exception: {e}") + await self.push_error(error_msg=f"Error sending audio: {e}", exception=e) elif isinstance(frame, TTSStoppedFrame): try: if self._previously_interrupted and len(self._audio_buffer) > 0: @@ -264,7 +264,7 @@ class SimliVideoService(FrameProcessor): self._previously_interrupted = False self._audio_buffer = bytearray() except Exception as e: - logger.error(f"{self} exception: {e}") + await self.push_error(error_msg=f"Error stopping TTS: {e}", exception=e) return elif isinstance(frame, (EndFrame, CancelFrame)): await self._stop() diff --git a/src/pipecat/services/soniox/stt.py b/src/pipecat/services/soniox/stt.py index 79957fd97..67d36bc3e 100644 --- a/src/pipecat/services/soniox/stt.py +++ b/src/pipecat/services/soniox/stt.py @@ -194,7 +194,7 @@ class SonioxSTTService(STTService): self._websocket = await websocket_connect(self._url) if not self._websocket: - logger.error(f"Unable to connect to Soniox API at {self._url}") + await self.push_error(error_msg=f"Unable to connect to Soniox API at {self._url}") # If vad_force_turn_endpoint is not enabled, we need to enable endpoint detection. # Either one or the other is required. @@ -419,5 +419,4 @@ class SonioxSTTService(STTService): # Expected when closing the connection. pass except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error receiving message: {e}", exception=e) diff --git a/src/pipecat/services/speechmatics/stt.py b/src/pipecat/services/speechmatics/stt.py index da3c0652a..465200998 100644 --- a/src/pipecat/services/speechmatics/stt.py +++ b/src/pipecat/services/speechmatics/stt.py @@ -467,7 +467,6 @@ class SpeechmaticsSTTService(STTService): await self._client.send_audio(audio) yield None except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") await self._disconnect() @@ -580,8 +579,7 @@ class SpeechmaticsSTTService(STTService): logger.debug(f"{self} Connected to Speechmatics STT service") await self._call_event_handler("on_connected") except Exception as e: - logger.error(f"{self} exception: {e}") - await self.push_error(ErrorFrame(error=f"{self} error: {e}")) + await self.push_error(error_msg=f"Error connecting to Speechmatics: {e}", exception=e) self._client = None async def _disconnect(self) -> None: @@ -595,7 +593,9 @@ class SpeechmaticsSTTService(STTService): except asyncio.TimeoutError: logger.warning(f"{self} Timeout while closing Speechmatics client connection") except Exception as e: - await self.push_error(exception=e) + await self.push_error( + error_msg=f"Error disconnecting from Speechmatics: {e}", exception=e + ) finally: self._client = None await self._call_event_handler("on_disconnected") diff --git a/src/pipecat/services/ultravox/stt.py b/src/pipecat/services/ultravox/stt.py index 49660f988..665b288ee 100644 --- a/src/pipecat/services/ultravox/stt.py +++ b/src/pipecat/services/ultravox/stt.py @@ -436,17 +436,11 @@ class UltravoxSTTService(AIService): yield LLMFullResponseEndFrame() except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") else: - logger.error("No model available for text generation") yield ErrorFrame("No model available for text generation") except Exception as e: - logger.error(f"{self} exception: {e}") - import traceback - - logger.error(traceback.format_exc()) yield ErrorFrame(f"Error processing audio: {str(e)}") finally: self._buffer.is_processing = False diff --git a/src/pipecat/services/whisper/base_stt.py b/src/pipecat/services/whisper/base_stt.py index 743895253..85eb5b63b 100644 --- a/src/pipecat/services/whisper/base_stt.py +++ b/src/pipecat/services/whisper/base_stt.py @@ -226,7 +226,6 @@ class BaseWhisperSTTService(SegmentedSTTService): logger.warning("Received empty transcription from API") except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") async def _transcribe(self, audio: bytes) -> Transcription: diff --git a/src/pipecat/services/whisper/stt.py b/src/pipecat/services/whisper/stt.py index 4e326e2ca..1be1bb20c 100644 --- a/src/pipecat/services/whisper/stt.py +++ b/src/pipecat/services/whisper/stt.py @@ -285,7 +285,6 @@ class WhisperSTTService(SegmentedSTTService): The service will normalize it to float32 in the range [-1, 1]. """ if not self._model: - logger.error(f"{self} error: Whisper model not available") yield ErrorFrame("Whisper model not available") return @@ -428,5 +427,4 @@ class WhisperSTTServiceMLX(WhisperSTTService): ) except Exception as e: - logger.error(f"{self} exception: {e}") yield ErrorFrame(error=f"{self} error: {e}") diff --git a/src/pipecat/services/xtts/tts.py b/src/pipecat/services/xtts/tts.py index 30b7b90d9..56741c416 100644 --- a/src/pipecat/services/xtts/tts.py +++ b/src/pipecat/services/xtts/tts.py @@ -181,7 +181,6 @@ class XTTSService(TTSService): async with self._aiohttp_session.post(url, json=payload) as r: if r.status != 200: text = await r.text() - logger.error(f"{self} error getting audio (status: {r.status}, error: {text})") yield ErrorFrame(error=f"Error getting audio (status: {r.status}, error: {text})") return