From b4b27203fca2439aa251ca4250ce25a78641793c Mon Sep 17 00:00:00 2001 From: Ryan Crabbe Date: Thu, 5 Feb 2026 10:34:53 -0800 Subject: [PATCH] perf: cache request.url.path in _get_metadata_variable_name (add_litellm_data_to_request) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cache request.url.path once instead of accessing it 6 times (2 in assistants check + 4 in LITELLM_METADATA_ROUTES loop). Reduces per-call time from 47µs to 20µs (-58%). Also inline the assistants API check to avoid function call overhead. Adds 8 tests for _get_metadata_variable_name covering all return paths. --- litellm/proxy/litellm_pre_call_utils.py | 8 ++-- .../proxy/test_litellm_pre_call_utils.py | 42 +++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index 9be78264e85..0ae2f899b8f 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -74,12 +74,14 @@ def _get_metadata_variable_name(request: Request) -> str: For all /thread or /assistant endpoints we need to call this "litellm_metadata" - For ALL other endpoints we call this "metadata + For ALL other endpoints we call this "metadata" """ - if RouteChecks._is_assistants_api_request(request): + path = request.url.path + + if "thread" in path or "assistant" in path: return "litellm_metadata" - if any(route in request.url.path for route in LITELLM_METADATA_ROUTES): + if any(route in path for route in LITELLM_METADATA_ROUTES): return "litellm_metadata" return "metadata" diff --git a/tests/test_litellm/proxy/test_litellm_pre_call_utils.py b/tests/test_litellm/proxy/test_litellm_pre_call_utils.py index da6a5aeab09..6801ecc288e 100644 --- a/tests/test_litellm/proxy/test_litellm_pre_call_utils.py +++ b/tests/test_litellm/proxy/test_litellm_pre_call_utils.py @@ -15,6 +15,7 @@ from litellm.proxy.litellm_pre_call_utils import ( LiteLLMProxyRequestSetup, _get_dynamic_logging_metadata, _get_enforced_params, + _get_metadata_variable_name, _update_model_if_key_alias_exists, add_guardrails_from_policy_engine, add_litellm_data_to_request, @@ -47,6 +48,47 @@ def test_check_if_token_is_service_account(): assert check_if_token_is_service_account(other_metadata_token) == False +class TestGetMetadataVariableName: + """Tests for _get_metadata_variable_name()""" + + def _make_request(self, path: str) -> MagicMock: + request = MagicMock(spec=Request) + request.url.path = path + return request + + def test_returns_litellm_metadata_for_thread_routes(self): + request = self._make_request("/v1/threads/thread_123/messages") + assert _get_metadata_variable_name(request) == "litellm_metadata" + + def test_returns_litellm_metadata_for_assistant_routes(self): + request = self._make_request("/v1/assistants/asst_123") + assert _get_metadata_variable_name(request) == "litellm_metadata" + + def test_returns_litellm_metadata_for_batches_route(self): + request = self._make_request("/v1/batches") + assert _get_metadata_variable_name(request) == "litellm_metadata" + + def test_returns_litellm_metadata_for_messages_route(self): + request = self._make_request("/v1/messages") + assert _get_metadata_variable_name(request) == "litellm_metadata" + + def test_returns_litellm_metadata_for_files_route(self): + request = self._make_request("/v1/files") + assert _get_metadata_variable_name(request) == "litellm_metadata" + + def test_returns_metadata_for_chat_completions(self): + request = self._make_request("/chat/completions") + assert _get_metadata_variable_name(request) == "metadata" + + def test_returns_metadata_for_completions(self): + request = self._make_request("/v1/completions") + assert _get_metadata_variable_name(request) == "metadata" + + def test_returns_metadata_for_embeddings(self): + request = self._make_request("/v1/embeddings") + assert _get_metadata_variable_name(request) == "metadata" + + def test_get_enforced_params_for_service_account_settings(): """ Test that service account enforced params are only added to service account keys