fix(router): skip Claude Code session binding without pre-routing strategies

This commit is contained in:
mateo-berri 2026-09-02 13:08:14 -07:00
parent 01b20b78c0
commit 0f6d983c70
2 changed files with 22 additions and 0 deletions

View file

@ -12636,6 +12636,8 @@ class Router:
registered_model_name: str,
request_kwargs: Mapping[str, object],
) -> str:
if not any((self.auto_routers, self.complexity_routers, self.adaptive_routers, self.quality_routers)):
return registered_model_name
cache_key: Final = self._claude_code_session_router_cache_key(request_kwargs)
if cache_key is None or not isinstance(request_kwargs, dict):
return registered_model_name

View file

@ -8499,6 +8499,26 @@ class TestClaudeCodeSubagentSessionRouterBinding:
assert response is None
redis_cache.async_delete_cache.assert_awaited_once()
@pytest.mark.asyncio
async def test_no_pre_routing_strategies_means_no_session_cache_traffic(self):
from litellm.caching.caching import RedisCache
router = self._router()
router.complexity_routers = {}
redis_cache = MagicMock(spec=RedisCache)
redis_cache.async_get_cache = AsyncMock(return_value=None)
redis_cache.async_set_cache = AsyncMock()
redis_cache.async_delete_cache = AsyncMock()
router._update_redis_cache(cache=redis_cache)
for request_kwargs in (self._request_kwargs(), self._request_kwargs(agent_id="agent-1234")):
response = await router.async_pre_routing_hook(model="expensive-model", request_kwargs=request_kwargs)
assert response is None
redis_cache.async_get_cache.assert_not_awaited()
redis_cache.async_set_cache.assert_not_awaited()
redis_cache.async_delete_cache.assert_not_awaited()
@pytest.mark.asyncio
async def test_session_bindings_do_not_evict_router_rate_limit_state(self):
router = self._router()