perf: use frozenset for enum membership checks to avoid O(n) iteration

Replace O(n) list/enum iteration with O(1) frozenset lookups:
- route_checks.py: frozenset for LiteLLMRoutes._member_names_
- types/utils.py: cache DynamicPromptManagementParamLiteral.list_all_params()
- utils.py: use existing LlmProvidersSet instead of _member_map_.values()
This commit is contained in:
Ryan Crabbe 2026-02-20 09:32:06 -08:00
parent 8356dfa045
commit 476aed3fd6
3 changed files with 11 additions and 4 deletions

View file

@ -12,6 +12,8 @@ from litellm.proxy._types import (
UserAPIKeyAuth,
)
_LITELLM_ROUTES_MEMBER_NAMES: frozenset = frozenset(LiteLLMRoutes._member_names_)
from .auth_checks_organization import _user_is_org_admin
@ -61,11 +63,11 @@ class RouteChecks:
## check if 'allowed_route' is a field name in LiteLLMRoutes
if any(
allowed_route in LiteLLMRoutes._member_names_
allowed_route in _LITELLM_ROUTES_MEMBER_NAMES
for allowed_route in valid_token.allowed_routes
):
for allowed_route in valid_token.allowed_routes:
if allowed_route in LiteLLMRoutes._member_names_:
if allowed_route in _LITELLM_ROUTES_MEMBER_NAMES:
if RouteChecks.check_route_access(
route=route,
allowed_routes=LiteLLMRoutes._member_map_[allowed_route].value,

View file

@ -3430,7 +3430,12 @@ class DynamicPromptManagementParamLiteral(str, Enum):
@classmethod
def list_all_params(cls):
return [param.value for param in cls]
return _DYNAMIC_PROMPT_MANAGEMENT_PARAMS
_DYNAMIC_PROMPT_MANAGEMENT_PARAMS: frozenset = frozenset(
param.value for param in DynamicPromptManagementParamLiteral
)
class CallbacksByType(TypedDict):

View file

@ -3167,7 +3167,7 @@ def get_optional_params_embeddings( # noqa: PLR0915
optional_params = {}
if (
custom_llm_provider is not None
and custom_llm_provider in LlmProviders._member_map_.values()
and custom_llm_provider in LlmProvidersSet
):
provider_config = ProviderConfigManager.get_provider_embedding_config(
model=model,