From cfbf089204313f7e272f807eaad016b56af261c1 Mon Sep 17 00:00:00 2001 From: shivam Date: Thu, 12 Feb 2026 18:06:33 -0800 Subject: [PATCH] resolved greptile comments --- litellm/proxy/litellm_pre_call_utils.py | 31 ++++++++++--------- litellm/proxy/proxy_server.py | 24 +++++++++----- litellm/utils.py | 2 +- .../litellm/proxy/test_mask_secret_fields.py | 22 +++++++++++++ 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index f3fc65aa4a1..8f4828a7307 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -1,5 +1,6 @@ import asyncio import copy +import logging import time from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union @@ -916,13 +917,14 @@ async def add_litellm_data_to_request( # noqa: PLR0915 cache_dict = parse_cache_control(cache_control_header) data["ttl"] = cache_dict.get("s-maxage") - 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() - }, - ) + 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() + }, + ) # Parse metadata if it's a string (e.g., from multipart/form-data) if "metadata" in data and data["metadata"] is not None: @@ -1149,13 +1151,14 @@ async def add_litellm_data_to_request( # noqa: PLR0915 user_api_key_dict=user_api_key_dict, ) - 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() - }, - ) + 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() + }, + ) ## ENFORCED PARAMS CHECK # loop through each enforced param diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 3459f3823d9..5ecaae13224 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -9842,17 +9842,25 @@ async def async_queue_request( data["proxy_server_request"] = { "url": str(request.url), "method": request.method, - "headers": clean_headers(request.headers), + "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 } - 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() - }, - ) + 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() + }, + ) data["model"] = ( general_settings.get("completion_model", None) # server default or user_model # model name passed via cli args diff --git a/litellm/utils.py b/litellm/utils.py index 635c80a8950..11f00b56ef3 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -7268,7 +7268,7 @@ def get_valid_models( _SENSITIVE_HEADER_KEYS = frozenset( - {"authorization", "x-api-key", "api-key", "x-litellm-api-key"} + {"authorization", "x-api-key", "api-key", "x-litellm-api-key", "x-goog-api-key", "ocp-apim-subscription-key"} ) diff --git a/tests/litellm/proxy/test_mask_secret_fields.py b/tests/litellm/proxy/test_mask_secret_fields.py index b74127c20b9..dc3b28de7a7 100644 --- a/tests/litellm/proxy/test_mask_secret_fields.py +++ b/tests/litellm/proxy/test_mask_secret_fields.py @@ -71,6 +71,28 @@ class TestMaskSecretFieldsForLogging: result = _mask_secret_fields_for_logging(secret_fields) assert "****" in result["raw_headers"]["API-Key"] + def test_should_mask_google_ai_studio_key_header(self): + secret_fields = { + "raw_headers": { + "x-goog-api-key": "AIzaSyB-some-long-google-api-key-1234567890", + "host": "localhost:4000", + } + } + result = _mask_secret_fields_for_logging(secret_fields) + assert "****" in result["raw_headers"]["x-goog-api-key"] + assert result["raw_headers"]["host"] == "localhost:4000" + + def test_should_mask_azure_apim_subscription_key_header(self): + secret_fields = { + "raw_headers": { + "Ocp-Apim-Subscription-Key": "abcdef1234567890abcdef1234567890", + "host": "localhost:4000", + } + } + result = _mask_secret_fields_for_logging(secret_fields) + assert "****" in result["raw_headers"]["Ocp-Apim-Subscription-Key"] + assert result["raw_headers"]["host"] == "localhost:4000" + def test_should_mask_short_auth_values(self): secret_fields = { "raw_headers": {