From 039e86f0106174aa66533bbc743c07d8468f52c5 Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Sat, 23 May 2026 01:56:11 +0000 Subject: [PATCH] fix(gemini realtime): redact realtime payloads from debug logs The transform_realtime_response debug logs were dumping the raw inbound Gemini frame and each outbound OpenAI event payload (up to 500 chars). Realtime frames carry transcripts, model output, and tool-call arguments, so those strings ended up in application logs whenever DEBUG was enabled. Replace the inbound dump with just the top-level frame keys and the outbound dump with just the event type. --- litellm/llms/gemini/realtime/transformation.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/litellm/llms/gemini/realtime/transformation.py b/litellm/llms/gemini/realtime/transformation.py index 48ae79bfbe9..c5a02df499f 100644 --- a/litellm/llms/gemini/realtime/transformation.py +++ b/litellm/llms/gemini/realtime/transformation.py @@ -1198,7 +1198,12 @@ class GeminiRealtimeConfig(BaseRealtimeConfig): raise ValueError(f"Invalid JSON message: {message_str}") verbose_logger.debug( - f"Realtime Response Transform: Gemini message={json.dumps(json_message)[:500]}" + "Realtime Response Transform: Gemini frame keys=%s", + ( + sorted(json_message.keys()) + if isinstance(json_message, dict) + else type(json_message).__name__ + ), ) logging_session_id = logging_obj.litellm_trace_id @@ -1586,11 +1591,10 @@ class GeminiRealtimeConfig(BaseRealtimeConfig): current_item_chunks=current_item_chunks, ) - # Log the transformed events for msg in returned_message: event_type = msg.get("type") if isinstance(msg, dict) else "unknown" verbose_logger.debug( - f"Realtime Response Transform: OpenAI event={event_type}, data={json.dumps(msg)[:500] if isinstance(msg, dict) else str(msg)[:500]}" + "Realtime Response Transform: OpenAI event=%s", event_type ) return {