mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 11:14:04 +00:00
Revert "test_team_and_key_budget_enforcement"
This reverts commit 9d44f51847
.
This commit is contained in:
parent
9d44f51847
commit
2017596913
2 changed files with 1 additions and 109 deletions
|
@ -1037,7 +1037,7 @@ async def _team_max_budget_check(
|
||||||
raise litellm.BudgetExceededError(
|
raise litellm.BudgetExceededError(
|
||||||
current_cost=team_object.spend,
|
current_cost=team_object.spend,
|
||||||
max_budget=team_object.max_budget,
|
max_budget=team_object.max_budget,
|
||||||
message=f"Budget has been exceeded! Team={team_object.team_id} 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}",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ import asyncio
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import json
|
import json
|
||||||
from httpx import AsyncClient
|
from httpx import AsyncClient
|
||||||
from typing import Any, Optional
|
|
||||||
|
|
||||||
|
|
||||||
async def make_calls_until_budget_exceeded(session, key: str, call_function, **kwargs):
|
async def make_calls_until_budget_exceeded(session, key: str, call_function, **kwargs):
|
||||||
|
@ -279,110 +278,3 @@ async def test_team_limit_modifications(field):
|
||||||
print("response: ", json.dumps(response.json(), indent=4))
|
print("response: ", json.dumps(response.json(), indent=4))
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert response.json()["data"][field] is None
|
assert response.json()["data"][field] is None
|
||||||
|
|
||||||
|
|
||||||
async def generate_team_key(
|
|
||||||
session,
|
|
||||||
team_id: str,
|
|
||||||
max_budget: Optional[float] = None,
|
|
||||||
):
|
|
||||||
"""Helper function to generate a key for a specific team"""
|
|
||||||
url = "http://0.0.0.0:4000/key/generate"
|
|
||||||
headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"}
|
|
||||||
data: dict[str, Any] = {"team_id": team_id}
|
|
||||||
if max_budget is not None:
|
|
||||||
data["max_budget"] = max_budget
|
|
||||||
async with session.post(url, headers=headers, json=data) as response:
|
|
||||||
return await response.json()
|
|
||||||
|
|
||||||
|
|
||||||
async def create_team(
|
|
||||||
session,
|
|
||||||
max_budget=None,
|
|
||||||
):
|
|
||||||
"""Helper function to create a new team"""
|
|
||||||
url = "http://0.0.0.0:4000/team/new"
|
|
||||||
headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"}
|
|
||||||
data = {
|
|
||||||
"max_budget": max_budget,
|
|
||||||
}
|
|
||||||
async with session.post(url, headers=headers, json=data) as response:
|
|
||||||
return await response.json()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
|
||||||
async def test_team_budget_enforcement():
|
|
||||||
"""
|
|
||||||
Test budget enforcement for team-wide budgets:
|
|
||||||
1. Create team with low budget
|
|
||||||
2. Create key for that team
|
|
||||||
3. Make calls until team budget exceeded
|
|
||||||
4. Verify budget exceeded error
|
|
||||||
"""
|
|
||||||
async with aiohttp.ClientSession() as session:
|
|
||||||
# Create team with low budget
|
|
||||||
team_response = await create_team(session=session, max_budget=0.0000000005)
|
|
||||||
team_id = team_response["team_id"]
|
|
||||||
|
|
||||||
# Create key for team (no specific budget)
|
|
||||||
key_gen = await generate_team_key(session=session, team_id=team_id)
|
|
||||||
key = key_gen["key"]
|
|
||||||
|
|
||||||
# Make calls until budget exceeded
|
|
||||||
calls_made = await make_calls_until_budget_exceeded(
|
|
||||||
session=session,
|
|
||||||
key=key,
|
|
||||||
call_function=chat_completion,
|
|
||||||
model="fake-openai-endpoint",
|
|
||||||
)
|
|
||||||
|
|
||||||
assert (
|
|
||||||
calls_made > 0
|
|
||||||
), "Should make at least one successful call before team budget exceeded"
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
|
||||||
async def test_team_and_key_budget_enforcement():
|
|
||||||
"""
|
|
||||||
Test budget enforcement when both team and key have budgets:
|
|
||||||
1. Create team with low budget
|
|
||||||
2. Create key with higher budget
|
|
||||||
3. Verify team budget is enforced first
|
|
||||||
"""
|
|
||||||
async with aiohttp.ClientSession() as session:
|
|
||||||
# Create team with very low budget
|
|
||||||
team_response = await create_team(session=session, max_budget=0.0000000005)
|
|
||||||
team_id = team_response["team_id"]
|
|
||||||
|
|
||||||
# Create key with higher budget
|
|
||||||
key_gen = await generate_team_key(
|
|
||||||
session=session,
|
|
||||||
team_id=team_id,
|
|
||||||
max_budget=0.001, # Higher than team budget
|
|
||||||
)
|
|
||||||
key = key_gen["key"]
|
|
||||||
|
|
||||||
# Make calls until budget exceeded
|
|
||||||
calls_made = await make_calls_until_budget_exceeded(
|
|
||||||
session=session,
|
|
||||||
key=key,
|
|
||||||
call_function=chat_completion,
|
|
||||||
model="fake-openai-endpoint",
|
|
||||||
)
|
|
||||||
|
|
||||||
assert (
|
|
||||||
calls_made > 0
|
|
||||||
), "Should make at least one successful call before team budget exceeded"
|
|
||||||
|
|
||||||
# Verify it was the team budget that was exceeded
|
|
||||||
try:
|
|
||||||
await chat_completion(
|
|
||||||
session=session, key=key, model="fake-openai-endpoint"
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
error_dict = e.body
|
|
||||||
assert (
|
|
||||||
"Budget has been exceeded! Team=" in error_dict["message"]
|
|
||||||
), "Error should mention team budget being exceeded"
|
|
||||||
|
|
||||||
assert team_id in error_dict["message"], "Error should mention team id"
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue