From 6e4da1da65578de5697a11067d90cbebde5cd879 Mon Sep 17 00:00:00 2001 From: AlexsanderHamir Date: Wed, 15 Oct 2025 16:41:40 -0700 Subject: [PATCH 1/2] perf(router): optimize model lookups with O(1) data structures Replace O(n) scans with index map lookups and convert model_names to set. Standardize timing calls. --- litellm/router.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 5972b06f01a..05fff0afaf5 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -189,7 +189,7 @@ class RoutingArgs(enum.Enum): class Router: - model_names: List = [] + model_names: set = set() cache_responses: Optional[bool] = False default_cache_time_seconds: int = 1 * 60 * 60 # 1 hour tenacity = None @@ -5154,7 +5154,7 @@ class Router: verbose_router_logger.debug( f"\nInitialized Model List {self.get_model_names()}" ) - self.model_names = [m["model_name"] for m in model_list] + self.model_names = {m["model_name"] for m in model_list} # Build model_name index for O(1) lookups self._build_model_name_index(self.model_list) @@ -5360,7 +5360,7 @@ class Router: self._add_model_to_list_and_index_map( model=_deployment, model_id=deployment.model_info.id ) - self.model_names.append(deployment.model_name) + self.model_names.add(deployment.model_name) return deployment def _update_deployment_indices_after_removal( From 56838e2388d92073f95ddcec1287df2ae7d76819 Mon Sep 17 00:00:00 2001 From: AlexsanderHamir Date: Wed, 15 Oct 2025 17:52:44 -0700 Subject: [PATCH 2/2] test: ensure model_names is a O(1) datastructure --- tests/router_unit_tests/test_router_index_management.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/router_unit_tests/test_router_index_management.py b/tests/router_unit_tests/test_router_index_management.py index 04ea9214991..63f9d118349 100644 --- a/tests/router_unit_tests/test_router_index_management.py +++ b/tests/router_unit_tests/test_router_index_management.py @@ -177,3 +177,11 @@ class TestRouterIndexManagement: # Verify: New entry is added assert "claude-3" in router.model_name_to_deployment_indices assert router.model_name_to_deployment_indices["claude-3"] == [0] + + def test_model_names_is_set(self): + """Verify that model_names uses a set for O(1) lookups, not a list (O(n))""" + router = Router(model_list=[]) + + assert isinstance(router.model_names, set), ( + f"model_names should be a set for O(1) lookups, but got {type(router.model_names)}" + )