From b6a7f8dcf64503c2f9775c9459426ae103e0b156 Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 28 Oct 2026 06:04:35 -0700 Subject: [PATCH] fix(caching): read the router's model group before the caller's metadata --- litellm/caching/caching.py | 6 ++++-- tests/unit/caching/test_unit_test_caching.py | 18 +++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/litellm/caching/caching.py b/litellm/caching/caching.py index 7173f941a8d..e8df765f83d 100644 --- a/litellm/caching/caching.py +++ b/litellm/caching/caching.py @@ -456,8 +456,10 @@ class Cache: """ litellm_params: Final[dict] = kwargs.get("litellm_params", {}) or {} metadata_sources: Final[tuple[dict, ...]] = ( - kwargs.get("litellm_metadata" if "litellm_metadata" in kwargs else "metadata") or {}, - litellm_params.get("litellm_metadata") or litellm_params.get("metadata") or {}, + kwargs.get("litellm_metadata") or {}, + kwargs.get("metadata") or {}, + litellm_params.get("litellm_metadata") or {}, + litellm_params.get("metadata") or {}, ) model_group: Final[str | None] = next( (source["model_group"] for source in metadata_sources if source.get("model_group")), None diff --git a/tests/unit/caching/test_unit_test_caching.py b/tests/unit/caching/test_unit_test_caching.py index 06b8a4d9cac..fffce818766 100644 --- a/tests/unit/caching/test_unit_test_caching.py +++ b/tests/unit/caching/test_unit_test_caching.py @@ -278,7 +278,7 @@ def test_get_model_param_value_reads_model_group_from_litellm_metadata(): ) -def test_get_model_param_value_ignores_a_caller_model_group_outside_the_router_bucket(): +def test_get_model_param_value_prefers_the_router_group_over_a_caller_model_group(): cache = Cache() request = {"model": "openai/gpt-5.6", "input": "search this text"} @@ -288,23 +288,23 @@ def test_get_model_param_value_ignores_a_caller_model_group_outside_the_router_b ) == "caller" ) - assert ( - cache._get_model_param_value({**request, "metadata": {"model_group": "target"}, "litellm_metadata": {}}) - == "openai/gpt-5.6" - ) assert ( cache._get_model_param_value( { **request, - "metadata": {"model_group": "target"}, - "litellm_metadata": {"user_api_key": "hashed"}, "litellm_params": { "metadata": {"model_group": "target"}, - "litellm_metadata": {"user_api_key": "hashed"}, + "litellm_metadata": {"model_group": "caller"}, }, } ) - == "openai/gpt-5.6" + == "caller" + ) + assert ( + cache._get_model_param_value( + {**request, "metadata": {"model_group": "group-a"}, "litellm_metadata": {"attempted_retries": 0}} + ) + == "group-a" ) def test_preset_cache_key():