mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
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:
parent
0c553f0398
commit
68b0d08b5f
2 changed files with 25 additions and 5 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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."""
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue