diff --git a/litellm/litellm_core_utils/litellm_logging.py b/litellm/litellm_core_utils/litellm_logging.py index 6b281b911fe..b47f27da2cd 100644 --- a/litellm/litellm_core_utils/litellm_logging.py +++ b/litellm/litellm_core_utils/litellm_logging.py @@ -608,7 +608,7 @@ class Logging(LiteLLMLoggingBaseClass): if "litellm_metadata" in kwargs and isinstance( kwargs["litellm_metadata"], dict ): - base_litellm_params["litellm_metadata"] = kwargs["litellm_metadata"] + base_litellm_params["litellm_metadata"] = kwargs["litellm_metadata"].copy() if litellm_params: base_litellm_params.update(litellm_params) diff --git a/tests/test_litellm/litellm_core_utils/test_litellm_logging.py b/tests/test_litellm/litellm_core_utils/test_litellm_logging.py index f9cc7bd43e9..d93b17b715e 100644 --- a/tests/test_litellm/litellm_core_utils/test_litellm_logging.py +++ b/tests/test_litellm/litellm_core_utils/test_litellm_logging.py @@ -466,6 +466,8 @@ class TestUpdateFromKwargs: result_meta = logging_obj.litellm_params["metadata"] assert result_meta["from_caller"] is True assert result_meta["user_api_key_hash"] == "hashed-xyz" + # caller's dict must not be mutated by the merge + assert "user_api_key_hash" not in caller_metadata def test_merge_handles_metadata_none(self, logging_obj): """When metadata=None is explicitly in kwargs alongside litellm_metadata,