From b67411f49527781fd412fe924f73820b4f2b2260 Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Mon, 28 Sep 2026 19:42:53 -0700 Subject: [PATCH] fix(proxy): price RAG routes by the model the router's global alias serves --- litellm/proxy/auth/auth_checks.py | 4 ++++ litellm/proxy/auth/user_api_key_auth.py | 3 +++ tests/unit/proxy/auth/test_user_api_key_auth.py | 8 ++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index 1cfda5cd9bf..704507081a2 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -472,6 +472,10 @@ def _is_model_cost_zero(model: str | list[str] | None, llm_router: Router | None ) +def is_router_resolved_model_cost_zero(model: str | list[str] | None, llm_router: Router | None) -> bool: + return _is_model_cost_zero(model=model, llm_router=llm_router) + + def is_requested_model_cost_zero(model: str | list[str] | None, llm_router: Router | None) -> bool: if llm_router is None: return False diff --git a/litellm/proxy/auth/user_api_key_auth.py b/litellm/proxy/auth/user_api_key_auth.py index 0bc891722d5..03ac36fc934 100644 --- a/litellm/proxy/auth/user_api_key_auth.py +++ b/litellm/proxy/auth/user_api_key_auth.py @@ -66,6 +66,7 @@ from litellm.proxy.auth.auth_checks import ( get_user_object, is_dispatched_model_cost_zero, is_requested_model_cost_zero, + is_router_resolved_model_cost_zero, is_valid_fallback_model, jwt_key_mapping_cache_key, key_model_aliases_for_auth_check, @@ -3160,6 +3161,8 @@ async def _is_dispatched_model_cost_zero( request: Request | None, route: str, ) -> bool: + if route in LiteLLMRoutes.litellm_native_routes.value: + return is_router_resolved_model_cost_zero(model=model, llm_router=llm_router) if not RouteChecks.is_unified_llm_api_route(route): return is_requested_model_cost_zero(model=model, llm_router=llm_router) diff --git a/tests/unit/proxy/auth/test_user_api_key_auth.py b/tests/unit/proxy/auth/test_user_api_key_auth.py index 61af2e270a0..b3e2ba886df 100644 --- a/tests/unit/proxy/auth/test_user_api_key_auth.py +++ b/tests/unit/proxy/auth/test_user_api_key_auth.py @@ -1881,10 +1881,14 @@ async def test_budget_skip_judges_the_model_the_key_aliases_dispatch_to( ("/anthropic/v1/messages", "my-alias", {"my-alias": "free-model"}, None, False), ("/anthropic/v1/messages", "rs-alias", {}, {"model_group_alias": {"rs-alias": "free-model"}}, False), ("/anthropic/v1/messages", "free-model", {"free-model": "paid-model"}, None, True), - ("/rag/query", "free-alias", {}, None, False), + ("/rag/query", "free-alias", {}, None, True), + ("/v1/rag/query", "free-alias", {}, None, True), + ("/rag/query", "my-alias", {"my-alias": "free-model"}, None, False), + ("/rag/query", "rs-alias", {}, {"model_group_alias": {"rs-alias": "free-model"}}, False), + ("/rag/query", "free-model", {"free-model": "paid-model"}, None, True), ], ) -async def test_budget_skip_prices_the_requested_name_on_routes_that_forward_it_unaliased( +async def test_budget_skip_off_the_unified_routes_prices_the_model_each_route_dispatches( route: str, model: str, key_aliases: dict[str, str],