From cd7cb3b03ca858746f595cedb5f8b8eea3ddd3b2 Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:03:49 -0700 Subject: [PATCH] fix(proxy): read wildcard routing through the router registry entry points --- litellm/proxy/auth/model_checks.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/litellm/proxy/auth/model_checks.py b/litellm/proxy/auth/model_checks.py index 6042876d193..df8c46fb66c 100644 --- a/litellm/proxy/auth/model_checks.py +++ b/litellm/proxy/auth/model_checks.py @@ -17,6 +17,7 @@ from litellm.llms.azure.ptu_capacity import is_str_keyed_mapping from litellm.proxy._types import SpecialModelNames, UserAPIKeyAuth from litellm.repositories.object_permission_repository import ObjectPermissionRepository from litellm.router import Router +from litellm.router_api import RouterRegistry from litellm.router_utils.fallback_event_handlers import get_fallback_model_group from litellm.router_utils.pattern_match_deployments import PatternMatchRouter from litellm.types.router import CredentialLiteLLMParams, LiteLLM_Params @@ -552,12 +553,10 @@ def _litellm_model(deployment: Mapping[str, object]) -> object: return litellm_params.get("model") if is_str_keyed_mapping(litellm_params) else None -def _router_deployment(llm_router: Router | None, model_id: object) -> Mapping[str, object] | None: - if llm_router is None or not isinstance(model_id, str): +def _router_deployment(registry: RouterRegistry, model_id: object) -> Mapping[str, object] | None: + if not isinstance(model_id, str): return None - deployment: Final = _ROUTER_DEPLOYMENT.validate_python( - llm_router.get_model_info(id=model_id) # pyright: ignore[reportUnknownMemberType] # narrowed below - ) + deployment: Final = _ROUTER_DEPLOYMENT.validate_python(registry.deployment_dict(model_id)) return deployment if is_str_keyed_mapping(deployment) else None @@ -583,17 +582,20 @@ def _deployment_routed_model(source: Mapping[str, object], listed_name: str) -> def wildcard_routed_model(row: Mapping[str, object], llm_router: Router | None) -> str | None: - source: Final = _router_deployment(llm_router, _model_info_field(row, "id")) - listed_name: Final = row.get("model_name") - if llm_router is None or source is None or not isinstance(listed_name, str): + if llm_router is None: return None - if _litellm_model(row) == _litellm_model(source) or listed_name in llm_router.model_names: + registry: Final = llm_router.registry() + source: Final = _router_deployment(registry, _model_info_field(row, "id")) + listed_name: Final = row.get("model_name") + if source is None or not isinstance(listed_name, str): + return None + if _litellm_model(row) == _litellm_model(source) or listed_name in registry.names(kind="group_set"): return None routed_model: Final = _deployment_routed_model(source, listed_name) return ( routed_model if routed_model is not None - and routed_model in llm_router.wildcard_routed_models(listed_name, _deployment_team_id(row)) + and routed_model in registry.names(listed_name, kind="wildcard", team_id=_deployment_team_id(row)) else None )