From 5328a06ea869b435b269cfe265e4e0b27e980952 Mon Sep 17 00:00:00 2001 From: Genmin Date: Thu, 30 Apr 2026 11:43:58 -0700 Subject: [PATCH] test: cover none client credential pruning --- .../clientside_credential_handler.py | 4 ++- tests/test_litellm/test_router.py | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/litellm/router_utils/clientside_credential_handler.py b/litellm/router_utils/clientside_credential_handler.py index 9d5eb7c9296..4a36893c8b9 100644 --- a/litellm/router_utils/clientside_credential_handler.py +++ b/litellm/router_utils/clientside_credential_handler.py @@ -69,7 +69,9 @@ def is_clientside_credential(request_kwargs: dict) -> bool: """ Check if the credential is a clientside credential. """ - return any(request_kwargs.get(key) is not None for key in clientside_credential_keys) + return any( + request_kwargs.get(key) is not None for key in clientside_credential_keys + ) def get_dynamic_litellm_params(litellm_params: dict, request_kwargs: dict) -> dict: diff --git a/tests/test_litellm/test_router.py b/tests/test_litellm/test_router.py index f8d29660169..f5ffa9d8dbd 100644 --- a/tests/test_litellm/test_router.py +++ b/tests/test_litellm/test_router.py @@ -14,6 +14,31 @@ sys.path.insert( import litellm +def test_router_drops_none_clientside_credentials_from_kwargs(): + deployment = { + "litellm_params": { + "model": "azure/gpt-5.4", + "api_base": "https://deployment-resource.cognitiveservices.azure.com", + "api_key": "deployment-key", + } + } + kwargs = { + "api_base": None, + "api_key": None, + "base_url": None, + "request_timeout": 30, + } + + litellm.Router._drop_none_clientside_credentials_from_kwargs( + deployment=deployment, kwargs=kwargs + ) + + assert "api_base" not in kwargs + assert "api_key" not in kwargs + assert kwargs["base_url"] is None + assert kwargs["request_timeout"] == 30 + + def test_update_kwargs_does_not_mutate_defaults_and_merges_metadata(): # initialize a real Router (env‑vars can be empty) router = litellm.Router(