fix(auth): resolve hidden model_group_alias entries in the zero-cost budget check

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
jesus 2026-09-29 17:42:09 +00:00
parent 0c553f0398
commit 68b0d08b5f
2 changed files with 25 additions and 5 deletions

View file

@ -138,6 +138,7 @@ from litellm.repositories.table_repositories import (
from litellm.repositories.team_repository import TeamRepository
from litellm.repositories.user_repository import UserRepository
from litellm.router import Router
from litellm.router_utils.common_utils import resolve_model_group_alias
from litellm.types.proxy.auth.auth_checks import UserNotFoundError
from litellm.types.proxy.model_access_group_budget import ModelAccessGroupBudget
from litellm.utils import get_utc_datetime
@ -479,7 +480,8 @@ def _is_model_cost_zero(model: str | list[str] | None, llm_router: Router | None
continue
try:
# Use router's get_model_group_info method directly for better reliability
model_group_info = llm_router.get_model_group_info(model_group=model_name)
target_group = resolve_model_group_alias(llm_router.model_group_alias, model_name) or model_name
model_group_info = llm_router.get_model_group_info(model_group=target_group)
if model_group_info is None:
# Model not found or no pricing info available

View file

@ -285,9 +285,12 @@ class TestUnmappedModelBudgetEnforcement:
"An aliased PTU group must not be read as free"
)
def test_hidden_model_group_alias_enforces_budget(self):
"""A hidden alias keeps budget enforced: get_model_group_info() returns None for it,
so the cost is unknown before the configuration gate is reached."""
def test_hidden_model_group_alias_to_free_model_bypasses_budget(self):
"""A hidden alias to an explicitly free group bypasses budget, like the group itself.
``get_model_group_info`` returns None for hidden aliases, so the alias must be
resolved to its target group before the cost lookup.
"""
router = Router(
model_list=[
{
@ -304,7 +307,22 @@ class TestUnmappedModelBudgetEnforcement:
model_group_alias={"hidden-alias": {"model": "free-model", "hidden": True}},
)
assert _is_model_cost_zero(model="hidden-alias", llm_router=router) is False
assert _is_model_cost_zero(model="hidden-alias", llm_router=router) is True
def test_hidden_model_group_alias_to_paid_model_enforces_budget(self):
"""A hidden alias to a priced group keeps budget enforced."""
router = Router(
model_list=[
{
"model_name": "paid-model",
"litellm_params": {"model": "gpt-3.5-turbo", "api_key": "sk-fake"},
"model_info": {"id": "paid-model-id"},
},
],
model_group_alias={"hidden-paid-alias": {"model": "paid-model", "hidden": True}},
)
assert _is_model_cost_zero(model="hidden-paid-alias", llm_router=router) is False
def test_dangling_model_group_alias_enforces_budget(self):
"""An alias pointing at a group that does not exist keeps budget enforced."""