diff --git a/litellm/litellm_core_utils/core_helpers.py b/litellm/litellm_core_utils/core_helpers.py index 275c53ad308..28a0097c30d 100644 --- a/litellm/litellm_core_utils/core_helpers.py +++ b/litellm/litellm_core_utils/core_helpers.py @@ -70,6 +70,22 @@ def remove_index_from_tool_calls( return +def add_missing_spend_metadata_to_litellm_metadata( + litellm_metadata: dict, metadata: dict +) -> dict: + """ + Helper to get litellm metadata for spend tracking + + PATCH for issue where both `litellm_metadata` and `metadata` are present in the kwargs + and user_api_key values are in 'metadata'. + """ + potential_spend_tracking_metadata_substring = "user_api_key" + for key, value in metadata.items(): + if potential_spend_tracking_metadata_substring in key: + litellm_metadata[key] = value + return litellm_metadata + + def get_litellm_metadata_from_kwargs(kwargs: dict): """ Helper to get litellm metadata from all litellm request kwargs @@ -80,6 +96,10 @@ def get_litellm_metadata_from_kwargs(kwargs: dict): if litellm_params: metadata = litellm_params.get("metadata", {}) litellm_metadata = litellm_params.get("litellm_metadata", {}) + if litellm_metadata and metadata: + litellm_metadata = add_missing_spend_metadata_to_litellm_metadata( + litellm_metadata, metadata + ) if litellm_metadata: return litellm_metadata elif metadata: diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 04a58702e45..d5e7df9071b 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -295,7 +295,7 @@ class LiteLLMRoutes(enum.Enum): # rerank "/rerank", "/v1/rerank", - "/v2/rerank" + "/v2/rerank", # realtime "/realtime", "/v1/realtime", diff --git a/tests/litellm/litellm_core_utils/test_core_helpers.py b/tests/litellm/litellm_core_utils/test_core_helpers.py index 3b7acd0d50d..215663cae80 100644 --- a/tests/litellm/litellm_core_utils/test_core_helpers.py +++ b/tests/litellm/litellm_core_utils/test_core_helpers.py @@ -20,3 +20,18 @@ def test_get_litellm_metadata_from_kwargs(): }, } assert get_litellm_metadata_from_kwargs(kwargs) == {"user_api_key": "1234567890"} + + +def test_add_missing_spend_metadata_to_litellm_metadata(): + litellm_metadata = {"test_key": "test_value"} + metadata = {"user_api_key_hash_value": "1234567890"} + kwargs = { + "litellm_params": { + "litellm_metadata": litellm_metadata, + "metadata": metadata, + }, + } + assert get_litellm_metadata_from_kwargs(kwargs) == { + "test_key": "test_value", + "user_api_key_hash_value": "1234567890", + }