From 4e66d82127e008f0205717692b72324ea882067c Mon Sep 17 00:00:00 2001 From: shivam Date: Sat, 14 Feb 2026 19:52:01 -0800 Subject: [PATCH] removed debug conditionals and addressed clean_headers --- litellm/proxy/litellm_pre_call_utils.py | 51 ++++++++++++------------- litellm/proxy/proxy_server.py | 21 ++++++---- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index 66f9f4d689e..a6f513d11cf 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -901,31 +901,29 @@ async def add_litellm_data_to_request( # noqa: PLR0915 ## Cache Controls headers = request.headers - if verbose_proxy_logger.isEnabledFor(logging.DEBUG): - verbose_proxy_logger.debug( - "Request Headers: %s", - clean_headers( - headers, - litellm_key_header_name=( - general_settings.get("litellm_key_header_name") - if general_settings is not None - else None - ), + verbose_proxy_logger.debug( + "Request Headers: %s", + clean_headers( + headers, + litellm_key_header_name=( + general_settings.get("litellm_key_header_name") + if general_settings is not None + else None ), - ) + ), + ) cache_control_header = headers.get("Cache-Control", None) if cache_control_header: cache_dict = parse_cache_control(cache_control_header) data["ttl"] = cache_dict.get("s-maxage") - if verbose_proxy_logger.isEnabledFor(logging.DEBUG): - verbose_proxy_logger.debug( - "receiving data: %s", - { - k: (_mask_secret_fields_for_logging(v) if k == "secret_fields" else v) - for k, v in data.items() - }, - ) + verbose_proxy_logger.debug( + "receiving data: %s", + { + k: (_mask_secret_fields_for_logging(v) if k == "secret_fields" else v) + for k, v in data.items() + }, + ) # Parse metadata if it's a string (e.g., from multipart/form-data) if "metadata" in data and data["metadata"] is not None: @@ -1152,14 +1150,13 @@ async def add_litellm_data_to_request( # noqa: PLR0915 user_api_key_dict=user_api_key_dict, ) - if verbose_proxy_logger.isEnabledFor(logging.DEBUG): - verbose_proxy_logger.debug( - "[PROXY] returned data from litellm_pre_call_utils: %s", - { - k: (_mask_secret_fields_for_logging(v) if k == "secret_fields" else v) - for k, v in data.items() - }, - ) + verbose_proxy_logger.debug( + "[PROXY] returned data from litellm_pre_call_utils: %s", + { + k: (_mask_secret_fields_for_logging(v) if k == "secret_fields" else v) + for k, v in data.items() + }, + ) ## ENFORCED PARAMS CHECK # loop through each enforced param diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 5ecaae13224..1080085552c 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -9842,22 +9842,29 @@ async def async_queue_request( data["proxy_server_request"] = { "url": str(request.url), "method": request.method, - "headers": clean_headers( + "headers": dict(request.headers), + "body": copy.copy(data), # use copy instead of deepcopy + } + + if verbose_proxy_logger.isEnabledFor(logging.DEBUG): + # Use clean_headers only for logging to avoid logging JWT/auth tokens + # while preserving all headers (including MCP headers) in the stored data + _safe_headers = clean_headers( request.headers, litellm_key_header_name=( general_settings.get("litellm_key_header_name") if general_settings is not None else None ), - ), - "body": copy.copy(data), # use copy instead of deepcopy - } - - if verbose_proxy_logger.isEnabledFor(logging.DEBUG): + ) verbose_proxy_logger.debug( "receiving data: %s", { - k: (_mask_secret_fields_for_logging(v) if k == "secret_fields" else v) + k: ( + _mask_secret_fields_for_logging(v) if k == "secret_fields" + else {**v, "headers": _safe_headers} if k == "proxy_server_request" + else v + ) for k, v in data.items() }, )