From d832327ccfc16b1d397bc2844f706e11a6ed79ed Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 14:32:27 -0700 Subject: [PATCH 1/7] fix(user_api_key_auth.py): respect team budgets over user budget, if key belongs to team Closes https://github.com/BerriAI/litellm/issues/5097 --- litellm/proxy/auth/auth_checks.py | 21 +++-- litellm/proxy/auth/user_api_key_auth.py | 119 ++++-------------------- litellm/tests/test_user_api_key_auth.py | 62 ++++++++++++ 3 files changed, 92 insertions(+), 110 deletions(-) diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index 2d306ceb314..950e457f710 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -55,11 +55,11 @@ def common_checks( 1. If team is blocked 2. If team can call model 3. If team is in budget - 5. If user passed in (JWT or key.user_id) - is in budget - 4. If end_user (either via JWT or 'user' passed to /chat/completions, /embeddings endpoint) is in budget - 5. [OPTIONAL] If 'enforce_end_user' enabled - did developer pass in 'user' param for openai endpoints - 6. [OPTIONAL] If 'litellm.max_budget' is set (>0), is proxy under budget - 7. [OPTIONAL] If guardrails modified - is request allowed to change this + 4. If user passed in (JWT or key.user_id) - is in budget + 5. If end_user (either via JWT or 'user' passed to /chat/completions, /embeddings endpoint) is in budget + 6. [OPTIONAL] If 'enforce_end_user' enabled - did developer pass in 'user' param for openai endpoints + 7. [OPTIONAL] If 'litellm.max_budget' is set (>0), is proxy under budget + 8. [OPTIONAL] If guardrails modified - is request allowed to change this """ _model = request_body.get("model", None) if team_object is not None and team_object.blocked is True: @@ -91,12 +91,19 @@ def common_checks( raise Exception( f"Team={team_object.team_id} over budget. Spend={team_object.spend}, Budget={team_object.max_budget}" ) - if user_object is not None and user_object.max_budget is not None: + # 4. If user is in budget + ## 4.1 check personal budget, if personal key + if ( + (team_object is None or team_object.team_id is None) + and user_object is not None + and user_object.max_budget is not None + ): user_budget = user_object.max_budget - if user_budget > user_object.spend: + if user_budget < user_object.spend: raise Exception( f"ExceededBudget: User={user_object.user_id} over budget. Spend={user_object.spend}, Budget={user_budget}" ) + ## 4.2 check team member budget, if team key # 5. If end_user ('user' passed to /chat/completions, /embeddings endpoint) is in budget if end_user_object is not None and end_user_object.litellm_budget_table is not None: end_user_budget = end_user_object.litellm_budget_table.max_budget diff --git a/litellm/proxy/auth/user_api_key_auth.py b/litellm/proxy/auth/user_api_key_auth.py index 3ba5ea9fdac..3e03888526c 100644 --- a/litellm/proxy/auth/user_api_key_auth.py +++ b/litellm/proxy/auth/user_api_key_auth.py @@ -552,6 +552,7 @@ async def user_api_key_auth( key=api_key ) if valid_token is None: + user_obj: Optional[LiteLLM_UserTable] = None ## check db verbose_proxy_logger.debug("api key: %s", api_key) if prisma_client is not None: @@ -650,114 +651,26 @@ async def user_api_key_auth( valid_token=valid_token, ) - # Check 2. If user_id for this token is in budget + # Check 2. If user_id for this token is in budget - done in common_checks() if valid_token.user_id is not None: - user_id_list = [valid_token.user_id] - for id in user_id_list: - value = user_api_key_cache.get_cache(key=id) - if value is not None: - if user_id_information is None: - user_id_information = [] - user_id_information.append(value) - if user_id_information is None or ( - isinstance(user_id_information, list) - and len(user_id_information) < 1 - ): - if prisma_client is not None: - user_id_information = await prisma_client.get_data( - user_id_list=[ - valid_token.user_id, - ], - table_name="user", - query_type="find_all", - ) - if user_id_information is not None: - for _id in user_id_information: - await user_api_key_cache.async_set_cache( - key=_id["user_id"], - value=_id, - ) + user_obj = await get_user_object( + user_id=valid_token.user_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + user_id_upsert=False, + parent_otel_span=parent_otel_span, + proxy_logging_obj=proxy_logging_obj, + ) + # value = user_api_key_cache.get_cache(key=id) + if user_obj is not None: + if user_id_information is None: + user_id_information = [] + user_id_information.append(user_obj.model_dump()) verbose_proxy_logger.debug( f"user_id_information: {user_id_information}" ) - if user_id_information is not None: - if isinstance(user_id_information, list): - ## Check if user in budget - for _user in user_id_information: - if _user is None: - continue - assert isinstance(_user, dict) - # check if user is admin # - - # Token exists, not expired now check if its in budget for the user - user_max_budget = _user.get("max_budget", None) - user_current_spend = _user.get("spend", None) - - verbose_proxy_logger.debug( - f"user_id: {_user.get('user_id', None)}; user_max_budget: {user_max_budget}; user_current_spend: {user_current_spend}" - ) - - if ( - user_max_budget is not None - and user_current_spend is not None - ): - call_info = CallInfo( - token=valid_token.token, - spend=user_current_spend, - max_budget=user_max_budget, - user_id=_user.get("user_id", None), - user_email=_user.get("user_email", None), - key_alias=valid_token.key_alias, - ) - asyncio.create_task( - proxy_logging_obj.budget_alerts( - type="user_budget", - user_info=call_info, - ) - ) - - _user_id = _user.get("user_id", None) - if user_current_spend > user_max_budget: - raise litellm.BudgetExceededError( - current_cost=user_current_spend, - max_budget=user_max_budget, - ) - else: - # Token exists, not expired now check if its in budget for the user - user_max_budget = getattr( - user_id_information, "max_budget", None - ) - user_current_spend = getattr(user_id_information, "spend", None) - - if ( - user_max_budget is not None - and user_current_spend is not None - ): - call_info = CallInfo( - token=valid_token.token, - spend=user_current_spend, - max_budget=user_max_budget, - user_id=getattr(user_id_information, "user_id", None), - user_email=getattr( - user_id_information, "user_email", None - ), - key_alias=valid_token.key_alias, - ) - asyncio.create_task( - proxy_logging_obj.budget_alerts( - type="user_budget", - user_info=call_info, - ) - ) - - if user_current_spend > user_max_budget: - raise litellm.BudgetExceededError( - current_cost=user_current_spend, - max_budget=user_max_budget, - ) - # Check 3. Check if user is in their team budget if valid_token.team_member_spend is not None: if prisma_client is not None: @@ -983,7 +896,7 @@ async def user_api_key_auth( _ = common_checks( request_body=request_data, team_object=_team_obj, - user_object=None, + user_object=user_obj, end_user_object=_end_user_object, general_settings=general_settings, global_proxy_spend=global_proxy_spend, diff --git a/litellm/tests/test_user_api_key_auth.py b/litellm/tests/test_user_api_key_auth.py index 1ba81d4fa4a..e8f5a8e08ac 100644 --- a/litellm/tests/test_user_api_key_auth.py +++ b/litellm/tests/test_user_api_key_auth.py @@ -116,3 +116,65 @@ def test_returned_user_api_key_auth(user_role): assert new_obj.user_role == user_role else: assert new_obj.user_role == "internal_user" + + +@pytest.mark.parametrize("key_ownership", ["user_key", "team_key"]) +@pytest.mark.asyncio +async def test_user_personal_budgets(key_ownership): + """ + Set a personal budget on a user + + - have it only apply when key belongs to user -> raises BudgetExceededError + - if key belongs to team, have key respect team budget -> allows call to go through + """ + import asyncio + import time + + from fastapi import Request + from starlette.datastructures import URL + + from litellm.proxy._types import LiteLLM_UserTable, UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + from litellm.proxy.proxy_server import hash_token, user_api_key_cache + + _user_id = "1234" + user_key = "sk-12345678" + + if key_ownership == "user_key": + valid_token = UserAPIKeyAuth( + token=hash_token(user_key), + last_refreshed_at=time.time(), + user_id=_user_id, + spend=20, + ) + elif key_ownership == "team_key": + valid_token = UserAPIKeyAuth( + token=hash_token(user_key), + last_refreshed_at=time.time(), + user_id=_user_id, + team_id="my-special-team", + team_max_budget=100, + spend=20, + ) + await asyncio.sleep(1) + user_obj = LiteLLM_UserTable( + user_id=_user_id, spend=11, max_budget=10, user_email="" + ) + user_api_key_cache.set_cache(key=hash_token(user_key), value=valid_token) + user_api_key_cache.set_cache(key="{}".format(_user_id), value=user_obj) + + setattr(litellm.proxy.proxy_server, "user_api_key_cache", user_api_key_cache) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm.proxy.proxy_server, "prisma_client", "hello-world") + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + try: + await user_api_key_auth(request=request, api_key="Bearer " + user_key) + + if key_ownership == "user_key": + pytest.fail("Expected this call to fail. User is over limit.") + except Exception: + if key_ownership == "team_key": + pytest.fail("Expected this call to work. Key is below team budget.") From ff373663a36507c9ca5ac752b5295acc2eacc48a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 15:02:04 -0700 Subject: [PATCH 2/7] fix: fix tests --- litellm/exceptions.py | 9 +++++++-- litellm/proxy/auth/auth_checks.py | 18 ++++++++++++------ litellm/proxy/auth/user_api_key_auth.py | 2 +- litellm/tests/test_key_generate_prisma.py | 9 ++++----- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/litellm/exceptions.py b/litellm/exceptions.py index 0abe3e33afb..dd9953a3218 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -730,10 +730,15 @@ LITELLM_EXCEPTION_TYPES = [ class BudgetExceededError(Exception): - def __init__(self, current_cost, max_budget): + def __init__( + self, current_cost: float, max_budget: float, message: Optional[str] = None + ): self.current_cost = current_cost self.max_budget = max_budget - message = f"Budget has been exceeded! Current cost: {current_cost}, Max budget: {max_budget}" + message = ( + message + or f"Budget has been exceeded! Current cost: {current_cost}, Max budget: {max_budget}" + ) self.message = message super().__init__(message) diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index 950e457f710..6ab63d8cb23 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -88,8 +88,10 @@ def common_checks( and team_object.spend is not None and team_object.spend > team_object.max_budget ): - raise Exception( - f"Team={team_object.team_id} over budget. Spend={team_object.spend}, Budget={team_object.max_budget}" + raise litellm.BudgetExceededError( + current_cost=team_object.spend, + max_budget=team_object.max_budget, + message=f"Team={team_object.team_id} over budget. Spend={team_object.spend}, Budget={team_object.max_budget}", ) # 4. If user is in budget ## 4.1 check personal budget, if personal key @@ -100,16 +102,20 @@ def common_checks( ): user_budget = user_object.max_budget if user_budget < user_object.spend: - raise Exception( - f"ExceededBudget: User={user_object.user_id} over budget. Spend={user_object.spend}, Budget={user_budget}" + raise litellm.BudgetExceededError( + current_cost=user_object.spend, + max_budget=user_budget, + message=f"ExceededBudget: User={user_object.user_id} over budget. Spend={user_object.spend}, Budget={user_budget}", ) ## 4.2 check team member budget, if team key # 5. If end_user ('user' passed to /chat/completions, /embeddings endpoint) is in budget if end_user_object is not None and end_user_object.litellm_budget_table is not None: end_user_budget = end_user_object.litellm_budget_table.max_budget if end_user_budget is not None and end_user_object.spend > end_user_budget: - raise Exception( - f"ExceededBudget: End User={end_user_object.user_id} over budget. Spend={end_user_object.spend}, Budget={end_user_budget}" + raise litellm.BudgetExceededError( + current_cost=end_user_object.spend, + max_budget=end_user_budget, + message=f"ExceededBudget: End User={end_user_object.user_id} over budget. Spend={end_user_object.spend}, Budget={end_user_budget}", ) # 6. [OPTIONAL] If 'enforce_user_param' enabled - did developer pass in 'user' param for openai endpoints if ( diff --git a/litellm/proxy/auth/user_api_key_auth.py b/litellm/proxy/auth/user_api_key_auth.py index 3e03888526c..115c90bb6a7 100644 --- a/litellm/proxy/auth/user_api_key_auth.py +++ b/litellm/proxy/auth/user_api_key_auth.py @@ -552,7 +552,6 @@ async def user_api_key_auth( key=api_key ) if valid_token is None: - user_obj: Optional[LiteLLM_UserTable] = None ## check db verbose_proxy_logger.debug("api key: %s", api_key) if prisma_client is not None: @@ -584,6 +583,7 @@ async def user_api_key_auth( user_id_information: Optional[List] = None if valid_token is not None: + user_obj: Optional[LiteLLM_UserTable] = None # Got Valid Token from Cache, DB # Run checks for # 1. If token can call model diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index d210b1d23e0..12204ec066b 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -504,7 +504,7 @@ def test_call_with_user_over_budget(prisma_client): asyncio.run(test()) except Exception as e: error_detail = e.message - assert "Budget has been exceeded" in error_detail + assert "ExceededBudget:" in error_detail assert isinstance(e, ProxyException) assert e.type == ProxyErrorTypes.budget_exceeded print(vars(e)) @@ -607,7 +607,7 @@ def test_call_with_end_user_over_budget(prisma_client): # use generated key to auth in result = await user_api_key_auth(request=request, api_key=bearer_token) print("result from user auth with new key", result) - pytest.fail(f"This should have failed!. They key crossed it's budget") + pytest.fail("This should have failed!. They key crossed it's budget") asyncio.run(test()) except Exception as e: @@ -779,12 +779,12 @@ def test_call_with_user_over_budget_stream(prisma_client): # use generated key to auth in result = await user_api_key_auth(request=request, api_key=bearer_token) print("result from user auth with new key", result) - pytest.fail(f"This should have failed!. They key crossed it's budget") + pytest.fail("This should have failed!. They key crossed it's budget") asyncio.run(test()) except Exception as e: error_detail = e.message - assert "Budget has been exceeded" in error_detail + assert "ExceededBudget:" in error_detail assert isinstance(e, ProxyException) assert e.type == ProxyErrorTypes.budget_exceeded print(vars(e)) @@ -2511,7 +2511,6 @@ async def test_update_user_role(prisma_client): Tests if we update user role, incorrect values are not stored in cache -> create a user with role == INTERNAL_USER -> access an Admin only route -> expect to fail - -> update user role to == PROXY_ADMIN -> access an Admin only route -> expect to succeed """ From f76261af356faad003eeaea26b370f1c5f6a161d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 15:33:55 -0700 Subject: [PATCH 3/7] refactor(user_api_key_auth.py): refactor to replace user_id_information list with pydantic user_obj Allows using the 'get_user_object' function in user_api_key_auth, keeping it consistent across jwt-auth and key-auth --- litellm/proxy/_types.py | 1 + litellm/proxy/auth/user_api_key_auth.py | 97 +++++++---------------- litellm/tests/test_key_generate_prisma.py | 1 + litellm/tests/test_user_api_key_auth.py | 22 ++--- 4 files changed, 42 insertions(+), 79 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 286857eb06f..3fa0ef51f5b 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1338,6 +1338,7 @@ class LiteLLM_UserTable(LiteLLMBase): models: list = [] tpm_limit: Optional[int] = None rpm_limit: Optional[int] = None + user_role: Optional[str] = None @model_validator(mode="before") @classmethod diff --git a/litellm/proxy/auth/user_api_key_auth.py b/litellm/proxy/auth/user_api_key_auth.py index 115c90bb6a7..ca1a1a787c0 100644 --- a/litellm/proxy/auth/user_api_key_auth.py +++ b/litellm/proxy/auth/user_api_key_auth.py @@ -581,7 +581,6 @@ async def user_api_key_auth( "allowed_model_region" ) - user_id_information: Optional[List] = None if valid_token is not None: user_obj: Optional[LiteLLM_UserTable] = None # Got Valid Token from Cache, DB @@ -661,15 +660,6 @@ async def user_api_key_auth( parent_otel_span=parent_otel_span, proxy_logging_obj=proxy_logging_obj, ) - # value = user_api_key_cache.get_cache(key=id) - if user_obj is not None: - if user_id_information is None: - user_id_information = [] - user_id_information.append(user_obj.model_dump()) - - verbose_proxy_logger.debug( - f"user_id_information: {user_id_information}" - ) # Check 3. Check if user is in their team budget if valid_token.team_member_spend is not None: @@ -742,11 +732,8 @@ async def user_api_key_auth( user_email: Optional[str] = None # Check if the token has any user id information - if user_id_information is not None and len(user_id_information) > 0: - specific_user_id_information = user_id_information[0] - _user_email = specific_user_id_information.get("user_email", None) - if _user_email is not None: - user_email = str(_user_email) + if user_obj is not None: + user_email = user_obj.user_email call_info = CallInfo( token=valid_token.token, @@ -920,9 +907,9 @@ async def user_api_key_auth( if _end_user_object is not None: valid_token_dict.update(end_user_params) - _user_role = _get_user_role(user_id_information=user_id_information) + _user_role = _get_user_role(user_obj=user_obj) - if not _is_user_proxy_admin(user_id_information): # if non-admin + if not _is_user_proxy_admin(user_obj=user_obj): # if non-admin if is_llm_api_route(route=route): pass elif is_llm_api_route(route=request["route"].name): @@ -1004,14 +991,9 @@ async def user_api_key_auth( else: user_role = "unknown" user_id = "unknown" - if ( - user_id_information is not None - and isinstance(user_id_information, list) - and len(user_id_information) > 0 - ): - _user = user_id_information[0] - user_role = _user.get("user_role", "unknown") - user_id = _user.get("user_id", "unknown") + if user_obj is not None: + user_role = user_obj.user_role or "unknown" + user_id = user_obj.user_id or "unknown" raise Exception( f"Only proxy admin can be used to generate, delete, update info for new keys/users/teams. Route={route}. Your role={user_role}. Your user_id={user_id}" ) @@ -1057,9 +1039,7 @@ async def user_api_key_auth( # Do something if the current route starts with any of the allowed routes pass else: - if user_id_information is not None and _is_user_proxy_admin( - user_id_information - ): + if user_obj is not None and _is_user_proxy_admin(user_obj=user_obj): return UserAPIKeyAuth( api_key=api_key, user_role=LitellmUserRoles.PROXY_ADMIN, @@ -1085,7 +1065,7 @@ async def user_api_key_auth( raise Exception("Invalid proxy server token passed") if valid_token_dict is not None: return _return_user_api_key_auth_obj( - user_id_information=user_id_information, + user_obj=user_obj, api_key=api_key, parent_otel_span=parent_otel_span, valid_token_dict=valid_token_dict, @@ -1132,17 +1112,16 @@ async def user_api_key_auth( def _return_user_api_key_auth_obj( - user_id_information: Optional[list], + user_obj: Optional[LiteLLM_UserTable], api_key: str, parent_otel_span: Optional[Span], valid_token_dict: dict, route: str, ) -> UserAPIKeyAuth: retrieved_user_role = ( - _get_user_role(user_id_information=user_id_information) - or LitellmUserRoles.INTERNAL_USER + _get_user_role(user_obj=user_obj) or LitellmUserRoles.INTERNAL_USER ) - if user_id_information is not None and _is_user_proxy_admin(user_id_information): + if user_obj is not None and _is_user_proxy_admin(user_obj=user_obj): return UserAPIKeyAuth( api_key=api_key, user_role=LitellmUserRoles.PROXY_ADMIN, @@ -1183,30 +1162,19 @@ def _has_user_setup_sso(): return sso_setup -def _is_user_proxy_admin(user_id_information: Optional[list]): - if user_id_information is None: +def _is_user_proxy_admin(user_obj: Optional[LiteLLM_UserTable]): + if user_obj is None: return False - if len(user_id_information) == 0 or user_id_information[0] is None: - return False - - _user = user_id_information[0] if ( - _user.get("user_role", None) is not None - and _user.get("user_role") == LitellmUserRoles.PROXY_ADMIN.value + user_obj.user_role is not None + and user_obj.user_role == LitellmUserRoles.PROXY_ADMIN.value ): return True - # if user_id_information contains litellm-proxy-budget - # get first user_id that is not litellm-proxy-budget - for user in user_id_information: - if user.get("user_id") != "litellm-proxy-budget": - _user = user - break - if ( - _user.get("user_role", None) is not None - and _user.get("user_role") == LitellmUserRoles.PROXY_ADMIN.value + user_obj.user_role is not None + and user_obj.user_role == LitellmUserRoles.PROXY_ADMIN.value ): return True @@ -1214,29 +1182,20 @@ def _is_user_proxy_admin(user_id_information: Optional[list]): def _get_user_role( - user_id_information: Optional[list], -) -> Optional[ - Literal[ - LitellmUserRoles.PROXY_ADMIN, - LitellmUserRoles.PROXY_ADMIN_VIEW_ONLY, - LitellmUserRoles.INTERNAL_USER, - LitellmUserRoles.INTERNAL_USER_VIEW_ONLY, - LitellmUserRoles.TEAM, - LitellmUserRoles.CUSTOMER, - ] -]: - if user_id_information is None: + user_obj: Optional[LiteLLM_UserTable], +) -> Optional[LitellmUserRoles]: + if user_obj is None: return None - if len(user_id_information) == 0 or user_id_information[0] is None: - return None + _user = user_obj - _user = user_id_information[0] + _user_role = _user.user_role + try: + role = LitellmUserRoles(_user_role) + except ValueError: + return LitellmUserRoles.INTERNAL_USER - _user_role = _user.get("user_role") - if _user_role in list(LitellmUserRoles.__annotations__.keys()): - return _user_role - return LitellmUserRoles.INTERNAL_USER + return role def _check_valid_ip(allowed_ips: Optional[List[str]], request: Request) -> bool: diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index 12204ec066b..93110ffb6e3 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -2555,6 +2555,7 @@ async def test_update_user_role(prisma_client): await asyncio.sleep(2) # use generated key to auth in + print("\n\nMAKING NEW REQUEST WITH UPDATED USER ROLE\n\n") result = await user_api_key_auth(request=request, api_key=api_key) print("result from user auth with new key", result) diff --git a/litellm/tests/test_user_api_key_auth.py b/litellm/tests/test_user_api_key_auth.py index e8f5a8e08ac..33f055b37d8 100644 --- a/litellm/tests/test_user_api_key_auth.py +++ b/litellm/tests/test_user_api_key_auth.py @@ -96,26 +96,28 @@ async def test_check_blocked_team(): @pytest.mark.parametrize( - "user_role", ["app_user", "internal_user", "proxy_admin_viewer"] + "user_role, expected_role", + [ + ("app_user", "internal_user"), + ("internal_user", "internal_user"), + ("proxy_admin_viewer", "proxy_admin_viewer"), + ], ) -def test_returned_user_api_key_auth(user_role): - from litellm.proxy._types import LitellmUserRoles +def test_returned_user_api_key_auth(user_role, expected_role): + from litellm.proxy._types import LiteLLM_UserTable, LitellmUserRoles from litellm.proxy.auth.user_api_key_auth import _return_user_api_key_auth_obj - user_id_information = [{"user_role": user_role}] - new_obj = _return_user_api_key_auth_obj( - user_id_information, + user_obj=LiteLLM_UserTable( + user_role=user_role, user_id="", max_budget=None, user_email="" + ), api_key="hello-world", parent_otel_span=None, valid_token_dict={}, route="/chat/completion", ) - if user_role in list(LitellmUserRoles.__annotations__.keys()): - assert new_obj.user_role == user_role - else: - assert new_obj.user_role == "internal_user" + assert new_obj.user_role == expected_role @pytest.mark.parametrize("key_ownership", ["user_key", "team_key"]) From 639f84d609ace7c34e68a3d6c488f6ba42055d3e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 15:58:47 -0700 Subject: [PATCH 4/7] test(test_completion.py): handle gemini instability --- litellm/tests/test_completion.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index c26035ad0ad..0ad40e34e57 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -934,15 +934,18 @@ def test_completion_function_plus_image(model): } ] - response = completion( - model=model, - messages=[image_message], - tool_choice=tool_choice, - tools=tools, - stream=False, - ) + try: + response = completion( + model=model, + messages=[image_message], + tool_choice=tool_choice, + tools=tools, + stream=False, + ) - print(response) + print(response) + except litellm.InternalServerError: + pass @pytest.mark.parametrize( From b7e31638fdbdade189e931fccd5c9188f12f6976 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 18:50:40 -0700 Subject: [PATCH 5/7] fix(internal_user_endpoints.py): respect 'max_user_budget' for new internal user's --- .../internal_user_endpoints.py | 4 +++ litellm/tests/test_proxy_server.py | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/litellm/proxy/management_endpoints/internal_user_endpoints.py b/litellm/proxy/management_endpoints/internal_user_endpoints.py index b132761ae5d..de109db46ba 100644 --- a/litellm/proxy/management_endpoints/internal_user_endpoints.py +++ b/litellm/proxy/management_endpoints/internal_user_endpoints.py @@ -87,6 +87,10 @@ async def new_user( "user" # only create a user, don't create key if 'auto_create_key' set to False ) + if "max_budget" in data_json and data_json["max_budget"] is None: + if litellm.max_user_budget is not None: + data_json["max_budget"] = litellm.max_user_budget + response = await generate_key_helper_fn(request_type="user", **data_json) # Admin UI Logic diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index b0a972bddc8..35198af807e 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -800,3 +800,39 @@ async def test_get_team_redis(client_no_auth): pass mock_client.assert_called_once() + + +import random +import uuid +from unittest.mock import AsyncMock, MagicMock, patch + +from litellm.proxy._types import LitellmUserRoles, NewUserRequest, UserAPIKeyAuth +from litellm.proxy.management_endpoints.internal_user_endpoints import new_user +from litellm.tests.test_key_generate_prisma import prisma_client + + +@pytest.mark.asyncio +async def test_create_user_default_budget(prisma_client): + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm, "max_user_budget", 10) + await litellm.proxy.proxy_server.prisma_client.connect() + user = f"ishaan {uuid.uuid4().hex}" + request = NewUserRequest(user_id=user) # create a key with no budget + with patch.object( + litellm.proxy.proxy_server.prisma_client, "insert_data", new=AsyncMock() + ) as mock_client: + await new_user( + request, + ) + + mock_client.assert_called() + + print(f"mock_client.call_args: {mock_client.call_args}") + print("mock_client.call_args.kwargs: {}".format(mock_client.call_args.kwargs)) + + assert ( + mock_client.call_args.kwargs["data"]["max_budget"] + == litellm.max_user_budget + ) From ec0b511119be88a928052d2af6ab0824ec0dbdac Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 18:59:46 -0700 Subject: [PATCH 6/7] fix: use more descriptive flag --- litellm/__init__.py | 1 + litellm/proxy/management_endpoints/internal_user_endpoints.py | 4 ++-- litellm/tests/test_proxy_server.py | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index dfc3f3fc1bb..b284525d743 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -259,6 +259,7 @@ upperbound_key_generate_params: Optional[LiteLLM_UpperboundKeyGenerateParams] = default_user_params: Optional[Dict] = None default_team_settings: Optional[List] = None max_user_budget: Optional[float] = None +max_internal_user_budget: Optional[float] = None max_end_user_budget: Optional[float] = None #### REQUEST PRIORITIZATION #### priority_reservation: Optional[Dict[str, float]] = None diff --git a/litellm/proxy/management_endpoints/internal_user_endpoints.py b/litellm/proxy/management_endpoints/internal_user_endpoints.py index de109db46ba..f54eca9a2fc 100644 --- a/litellm/proxy/management_endpoints/internal_user_endpoints.py +++ b/litellm/proxy/management_endpoints/internal_user_endpoints.py @@ -88,8 +88,8 @@ async def new_user( ) if "max_budget" in data_json and data_json["max_budget"] is None: - if litellm.max_user_budget is not None: - data_json["max_budget"] = litellm.max_user_budget + if litellm.max_internal_user_budget is not None: + data_json["max_budget"] = litellm.max_internal_user_budget response = await generate_key_helper_fn(request_type="user", **data_json) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 35198af807e..a7bc1c4a224 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -816,7 +816,7 @@ async def test_create_user_default_budget(prisma_client): setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") - setattr(litellm, "max_user_budget", 10) + setattr(litellm, "max_internal_user_budget", 10) await litellm.proxy.proxy_server.prisma_client.connect() user = f"ishaan {uuid.uuid4().hex}" request = NewUserRequest(user_id=user) # create a key with no budget @@ -834,5 +834,5 @@ async def test_create_user_default_budget(prisma_client): assert ( mock_client.call_args.kwargs["data"]["max_budget"] - == litellm.max_user_budget + == litellm.max_internal_user_budget ) From 7e1f296981c0a30277b7e4977b9174104ad76788 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 7 Aug 2024 19:58:36 -0700 Subject: [PATCH 7/7] docs(self_serve.md): cleanup docs on how to onboard new users + teams --- docs/my-website/docs/proxy/self_serve.md | 20 ++++++ docs/my-website/docs/proxy/ui.md | 6 ++ .../img/max_budget_for_internal_users.png | Bin 0 -> 133363 bytes .../src/components/view_user_spend.tsx | 58 +++++++++++------- 4 files changed, 63 insertions(+), 21 deletions(-) create mode 100644 docs/my-website/img/max_budget_for_internal_users.png diff --git a/docs/my-website/docs/proxy/self_serve.md b/docs/my-website/docs/proxy/self_serve.md index 0b1b8a23f7d..94e5af848aa 100644 --- a/docs/my-website/docs/proxy/self_serve.md +++ b/docs/my-website/docs/proxy/self_serve.md @@ -173,3 +173,23 @@ export PROXY_LOGOUT_URL="https://www.google.com" +### Set max budget for internal users + +Automatically apply budget per internal user when they sign up + +```yaml +litellm_settings: + max_internal_user_budget: 10 +``` + +This sets a max budget of $10 USD for internal users when they sign up. + +This budget only applies to personal keys created by that user - seen under `Default Team` on the UI. + + + +This budget does not apply to keys created under non-default teams. + +### Set max budget for teams + +[**Go Here**](./team_budgets.md) \ No newline at end of file diff --git a/docs/my-website/docs/proxy/ui.md b/docs/my-website/docs/proxy/ui.md index a3eaac3c000..f587624597e 100644 --- a/docs/my-website/docs/proxy/ui.md +++ b/docs/my-website/docs/proxy/ui.md @@ -53,6 +53,12 @@ UI_PASSWORD=langchain # password to sign in on UI On accessing the LiteLLM UI, you will be prompted to enter your username, password +## Invite-other users + +Allow others to create/delete their own keys. + +[**Go Here**](./self_serve.md) + ## ✨ Enterprise Features Features here are behind a commercial license in our `/enterprise` folder. [**See Code**](https://github.com/BerriAI/litellm/tree/main/enterprise) diff --git a/docs/my-website/img/max_budget_for_internal_users.png b/docs/my-website/img/max_budget_for_internal_users.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b8f3402efa0c7fcf3be83c77b248580ec50790 GIT binary patch literal 133363 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�q#A{vTCn`o#)ev@6_Av6)M3Nq(A}>AI$l7Z=czt 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 Kns6%c?*9QP3Wr?) literal 0 HcmV?d00001 diff --git a/ui/litellm-dashboard/src/components/view_user_spend.tsx b/ui/litellm-dashboard/src/components/view_user_spend.tsx index 7879dfdb570..9fa0455b4ae 100644 --- a/ui/litellm-dashboard/src/components/view_user_spend.tsx +++ b/ui/litellm-dashboard/src/components/view_user_spend.tsx @@ -45,32 +45,33 @@ interface ViewUserSpendProps { const ViewUserSpend: React.FC = ({ userID, userRole, accessToken, userSpend, selectedTeam }) => { console.log(`userSpend: ${userSpend}`) let [spend, setSpend] = useState(userSpend !== null ? userSpend : 0.0); - const [maxBudget, setMaxBudget] = useState(0.0); + const [maxBudget, setMaxBudget] = useState(selectedTeam ? selectedTeam.max_budget : null); + console.log(`maxBudget: ${maxBudget}, selectedTeam.max_budget: ${selectedTeam.max_budget}, selectedTeam: ${JSON.stringify(selectedTeam)}`) const [userModels, setUserModels] = useState([]); useEffect(() => { const fetchData = async () => { if (!accessToken || !userID || !userRole) { return; } - if (userRole === "Admin" && userSpend == null) { - try { - const globalSpend = await getTotalSpendCall(accessToken); - if (globalSpend) { - if (globalSpend.spend) { - setSpend(globalSpend.spend); - } else { - setSpend(0.0); - } - if (globalSpend.max_budget) { - setMaxBudget(globalSpend.max_budget); - } else { - setMaxBudget(0.0); - } - } - } catch (error) { - console.error("Error fetching global spend data:", error); - } - } + // if (userRole === "Admin" && userSpend == null) { + // try { + // const globalSpend = await getTotalSpendCall(accessToken); + // if (globalSpend) { + // if (globalSpend.spend) { + // setSpend(globalSpend.spend); + // } else { + // setSpend(0.0); + // } + // if (globalSpend.max_budget) { + // setMaxBudget(globalSpend.max_budget); + // } else { + // setMaxBudget(null); + // } + // } + // } catch (error) { + // console.error("Error fetching global spend data:", error); + // } + // } }; const fetchUserModels = async () => { try { @@ -102,6 +103,11 @@ const ViewUserSpend: React.FC = ({ userID, userRole, accessT setSpend(userSpend) } }, [userSpend]) + useEffect(() => { + if (selectedTeam && selectedTeam.max_budget !== maxBudget) { + setMaxBudget(selectedTeam.max_budget); + } + }, [selectedTeam, maxBudget]); // logic to decide what models to display let modelsToDisplay = []; @@ -127,14 +133,24 @@ const ViewUserSpend: React.FC = ({ userID, userRole, accessT console.log(`spend in view user spend: ${spend}`) return (
+

- Total Spend{" "} + Total Spend

${roundedSpend}

+
+

+ Max Budget +

+

+ {displayMaxBudget} +

+
+
{/*
Team Models