diff --git a/litellm/litellm_core_utils/model_param_helper.py b/litellm/litellm_core_utils/model_param_helper.py index 91f2f1341cf..4d45c47c224 100644 --- a/litellm/litellm_core_utils/model_param_helper.py +++ b/litellm/litellm_core_utils/model_param_helper.py @@ -17,15 +17,16 @@ from litellm.types.rerank import RerankRequest class ModelParamHelper: + # Cached at class level — deterministic set built from static OpenAI type annotations + _relevant_logging_args: frozenset = frozenset() + @staticmethod def get_standard_logging_model_parameters( model_parameters: dict, ) -> dict: """ """ standard_logging_model_parameters: dict = {} - supported_model_parameters = ( - ModelParamHelper._get_relevant_args_to_use_for_logging() - ) + supported_model_parameters = ModelParamHelper._relevant_logging_args for key, value in model_parameters.items(): if key in supported_model_parameters: @@ -172,3 +173,8 @@ class ModelParamHelper: Get the kwargs to exclude from the cache key """ return set(["metadata"]) + + +ModelParamHelper._relevant_logging_args = frozenset( + ModelParamHelper._get_relevant_args_to_use_for_logging() +) diff --git a/tests/test_litellm/test_model_param_helper.py b/tests/test_litellm/test_model_param_helper.py new file mode 100644 index 00000000000..c6e4b864a22 --- /dev/null +++ b/tests/test_litellm/test_model_param_helper.py @@ -0,0 +1,33 @@ +from litellm.litellm_core_utils.model_param_helper import ModelParamHelper + + +def test_cached_relevant_logging_args_matches_dynamic(): + """Verify the cached frozenset matches the dynamically computed set.""" + cached = ModelParamHelper._relevant_logging_args + dynamic = ModelParamHelper._get_relevant_args_to_use_for_logging() + assert cached == dynamic + assert isinstance(cached, frozenset) + + +def test_get_standard_logging_model_parameters_filters(): + """Verify model parameters are filtered to only supported keys.""" + params = {"temperature": 0.7, "messages": [{"role": "user"}], "max_tokens": 100} + result = ModelParamHelper.get_standard_logging_model_parameters(params) + assert "temperature" in result + assert "max_tokens" in result + assert "messages" not in result # excluded prompt content + + +def test_get_standard_logging_model_parameters_excludes_prompt_content(): + """Verify all prompt content keys are excluded.""" + params = { + "messages": [{"role": "user", "content": "hi"}], + "prompt": "hello", + "input": "test", + "temperature": 0.5, + } + result = ModelParamHelper.get_standard_logging_model_parameters(params) + assert "messages" not in result + assert "prompt" not in result + assert "input" not in result + assert result == {"temperature": 0.5}