diff --git a/litellm/proxy/spend_tracking/spend_tracking_utils.py b/litellm/proxy/spend_tracking/spend_tracking_utils.py index bf95ceffbde..f918350a889 100644 --- a/litellm/proxy/spend_tracking/spend_tracking_utils.py +++ b/litellm/proxy/spend_tracking/spend_tracking_utils.py @@ -58,7 +58,9 @@ def _get_spend_logs_metadata(metadata: Optional[dict]) -> SpendLogsMetadata: return clean_metadata -def get_logging_payload(kwargs, response_obj, start_time, end_time) -> SpendLogsPayload: +def get_logging_payload( # noqa: PLR0915 + kwargs, response_obj, start_time, end_time +) -> SpendLogsPayload: from litellm.proxy.proxy_server import general_settings, master_key if kwargs is None: @@ -84,8 +86,27 @@ def get_logging_payload(kwargs, response_obj, start_time, end_time) -> SpendLogs ) end_user_id = get_end_user_id_for_cost_tracking(litellm_params) - if standard_logging_payload is not None: - api_key = standard_logging_payload["metadata"].get("user_api_key_hash") or "" + + api_key = metadata.get("user_api_key", "") + + if api_key is not None and isinstance(api_key, str): + if api_key.startswith("sk-"): + # hash the api_key + api_key = hash_token(api_key) + if ( + _is_master_key(api_key=api_key, _master_key=master_key) + and general_settings.get("disable_adding_master_key_hash_to_db") is True + ): + api_key = "litellm_proxy_master_key" # use a known alias, if the user disabled storing master key in db + + if ( + standard_logging_payload is not None + ): # [TODO] migrate completely to sl payload. currently missing pass-through endpoint data + api_key = ( + api_key + or standard_logging_payload["metadata"].get("user_api_key_hash") + or "" + ) end_user_id = end_user_id or standard_logging_payload["metadata"].get( "user_api_key_end_user_id" ) diff --git a/tests/llm_translation/test_groq.py b/tests/llm_translation/test_groq.py index 359787b2da8..dd1ae0aed6d 100644 --- a/tests/llm_translation/test_groq.py +++ b/tests/llm_translation/test_groq.py @@ -4,7 +4,7 @@ from base_llm_unit_tests import BaseLLMChatTest class TestGroq(BaseLLMChatTest): def get_base_completion_call_args(self) -> dict: return { - "model": "groq/llama-3.1-70b-versatile", + "model": "groq/llama-3.3-70b-versatile", } def test_tool_call_no_arguments(self, tool_call_no_arguments):