forked from phoenix/litellm-mirror
test - team member budgets
This commit is contained in:
parent
c535576af5
commit
20aa84e110
1 changed files with 63 additions and 2 deletions
|
@ -8,7 +8,13 @@ from openai import AsyncOpenAI
|
||||||
|
|
||||||
|
|
||||||
async def new_user(
|
async def new_user(
|
||||||
session, i, user_id=None, budget=None, budget_duration=None, models=["azure-models"]
|
session,
|
||||||
|
i,
|
||||||
|
user_id=None,
|
||||||
|
budget=None,
|
||||||
|
budget_duration=None,
|
||||||
|
models=["azure-models"],
|
||||||
|
team_id=None,
|
||||||
):
|
):
|
||||||
url = "http://0.0.0.0:4000/user/new"
|
url = "http://0.0.0.0:4000/user/new"
|
||||||
headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"}
|
headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"}
|
||||||
|
@ -23,6 +29,9 @@ async def new_user(
|
||||||
if user_id is not None:
|
if user_id is not None:
|
||||||
data["user_id"] = user_id
|
data["user_id"] = user_id
|
||||||
|
|
||||||
|
if team_id is not None:
|
||||||
|
data["team_id"] = team_id
|
||||||
|
|
||||||
async with session.post(url, headers=headers, json=data) as response:
|
async with session.post(url, headers=headers, json=data) as response:
|
||||||
status = response.status
|
status = response.status
|
||||||
response_text = await response.text()
|
response_text = await response.text()
|
||||||
|
@ -37,7 +46,9 @@ async def new_user(
|
||||||
return await response.json()
|
return await response.json()
|
||||||
|
|
||||||
|
|
||||||
async def add_member(session, i, team_id, user_id=None, user_email=None):
|
async def add_member(
|
||||||
|
session, i, team_id, user_id=None, user_email=None, max_budget=None
|
||||||
|
):
|
||||||
url = "http://0.0.0.0:4000/team/member_add"
|
url = "http://0.0.0.0:4000/team/member_add"
|
||||||
headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"}
|
headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"}
|
||||||
data = {"team_id": team_id, "member": {"role": "user"}}
|
data = {"team_id": team_id, "member": {"role": "user"}}
|
||||||
|
@ -46,6 +57,9 @@ async def add_member(session, i, team_id, user_id=None, user_email=None):
|
||||||
elif user_id is not None:
|
elif user_id is not None:
|
||||||
data["member"]["user_id"] = user_id
|
data["member"]["user_id"] = user_id
|
||||||
|
|
||||||
|
if max_budget is not None:
|
||||||
|
data["max_budget_in_team"] = max_budget
|
||||||
|
|
||||||
async with session.post(url, headers=headers, json=data) as response:
|
async with session.post(url, headers=headers, json=data) as response:
|
||||||
status = response.status
|
status = response.status
|
||||||
response_text = await response.text()
|
response_text = await response.text()
|
||||||
|
@ -475,3 +489,50 @@ async def test_team_alias():
|
||||||
key = key_gen["key"]
|
key = key_gen["key"]
|
||||||
## Test key
|
## Test key
|
||||||
response = await chat_completion(session=session, key=key, model="cheap-model")
|
response = await chat_completion(session=session, key=key, model="cheap-model")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_users_in_team_budget():
|
||||||
|
"""
|
||||||
|
- Create Team
|
||||||
|
- Create User
|
||||||
|
- Add User to team with budget = 0.0000001
|
||||||
|
- Make Call 1 -> pass
|
||||||
|
- Make Call 2 -> fail
|
||||||
|
"""
|
||||||
|
get_user = f"krrish_{time.time()}@berri.ai"
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
team = await new_team(session, 0, user_id=get_user)
|
||||||
|
print("New team=", team)
|
||||||
|
key_gen = await new_user(
|
||||||
|
session,
|
||||||
|
0,
|
||||||
|
user_id=get_user,
|
||||||
|
budget=10,
|
||||||
|
budget_duration="5s",
|
||||||
|
team_id=team["team_id"],
|
||||||
|
models=["fake-openai-endpoint"],
|
||||||
|
)
|
||||||
|
key = key_gen["key"]
|
||||||
|
|
||||||
|
# Add user to team
|
||||||
|
await add_member(
|
||||||
|
session, 0, team_id=team["team_id"], user_id=get_user, max_budget=0.0000001
|
||||||
|
)
|
||||||
|
|
||||||
|
# Call 1
|
||||||
|
result = await chat_completion(session, key, model="fake-openai-endpoint")
|
||||||
|
print("Call 1 passed", result)
|
||||||
|
|
||||||
|
await asyncio.sleep(2)
|
||||||
|
|
||||||
|
# Call 2
|
||||||
|
try:
|
||||||
|
await chat_completion(session, key, model="fake-openai-endpoint")
|
||||||
|
pytest.fail(
|
||||||
|
"Call 2 should have failed. The user crossed their budget within their team"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
print("got exception, this is expected")
|
||||||
|
print(e)
|
||||||
|
assert "Crossed spend within team" in str(e)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue