forked from phoenix/litellm-mirror
add test for ui usage endpoints
This commit is contained in:
parent
94d6e800ee
commit
9aff6a4c9d
1 changed files with 148 additions and 0 deletions
|
@ -73,6 +73,8 @@ from litellm.proxy.proxy_server import (
|
||||||
from litellm.proxy.spend_tracking.spend_management_endpoints import (
|
from litellm.proxy.spend_tracking.spend_management_endpoints import (
|
||||||
global_spend,
|
global_spend,
|
||||||
global_spend_logs,
|
global_spend_logs,
|
||||||
|
global_spend_models,
|
||||||
|
global_spend_keys,
|
||||||
spend_key_fn,
|
spend_key_fn,
|
||||||
spend_user_fn,
|
spend_user_fn,
|
||||||
view_spend_logs,
|
view_spend_logs,
|
||||||
|
@ -171,3 +173,149 @@ async def test_view_daily_spend_ui(prisma_client):
|
||||||
assert (
|
assert (
|
||||||
admin_total_spend > internal_user_total_spend
|
admin_total_spend > internal_user_total_spend
|
||||||
), "Admin should have more spend than internal user"
|
), "Admin should have more spend than internal user"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_global_spend_models(prisma_client):
|
||||||
|
print("prisma client=", prisma_client)
|
||||||
|
setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client)
|
||||||
|
setattr(litellm.proxy.proxy_server, "master_key", "sk-1234")
|
||||||
|
|
||||||
|
await litellm.proxy.proxy_server.prisma_client.connect()
|
||||||
|
|
||||||
|
# Test for admin user
|
||||||
|
models_spend_for_admin = await global_spend_models(
|
||||||
|
limit=10,
|
||||||
|
user_api_key_dict=UserAPIKeyAuth(
|
||||||
|
api_key="sk-1234",
|
||||||
|
user_role=LitellmUserRoles.PROXY_ADMIN,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
print("models_spend_for_admin=", models_spend_for_admin)
|
||||||
|
|
||||||
|
# Test for internal user
|
||||||
|
models_spend_for_internal_user = await global_spend_models(
|
||||||
|
limit=10,
|
||||||
|
user_api_key_dict=UserAPIKeyAuth(
|
||||||
|
api_key="sk-1234", user_role=LitellmUserRoles.INTERNAL_USER, user_id="1234"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
print("models_spend_for_internal_user=", models_spend_for_internal_user)
|
||||||
|
|
||||||
|
# Assertions
|
||||||
|
assert isinstance(models_spend_for_admin, list), "Admin response should be a list"
|
||||||
|
assert isinstance(
|
||||||
|
models_spend_for_internal_user, list
|
||||||
|
), "Internal user response should be a list"
|
||||||
|
|
||||||
|
# Check if the response has the expected shape for both admin and internal user
|
||||||
|
expected_keys = ["model", "total_spend"]
|
||||||
|
|
||||||
|
if len(models_spend_for_admin) > 0:
|
||||||
|
assert all(
|
||||||
|
key in models_spend_for_admin[0] for key in expected_keys
|
||||||
|
), f"Admin response should contain keys: {expected_keys}"
|
||||||
|
assert isinstance(
|
||||||
|
models_spend_for_admin[0]["model"], str
|
||||||
|
), "Model should be a string"
|
||||||
|
assert isinstance(
|
||||||
|
models_spend_for_admin[0]["total_spend"], (int, float)
|
||||||
|
), "Total spend should be a number"
|
||||||
|
|
||||||
|
if len(models_spend_for_internal_user) > 0:
|
||||||
|
assert all(
|
||||||
|
key in models_spend_for_internal_user[0] for key in expected_keys
|
||||||
|
), f"Internal user response should contain keys: {expected_keys}"
|
||||||
|
assert isinstance(
|
||||||
|
models_spend_for_internal_user[0]["model"], str
|
||||||
|
), "Model should be a string"
|
||||||
|
assert isinstance(
|
||||||
|
models_spend_for_internal_user[0]["total_spend"], (int, float)
|
||||||
|
), "Total spend should be a number"
|
||||||
|
|
||||||
|
# Check if the lists are sorted by total_spend in descending order
|
||||||
|
if len(models_spend_for_admin) > 1:
|
||||||
|
assert all(
|
||||||
|
models_spend_for_admin[i]["total_spend"]
|
||||||
|
>= models_spend_for_admin[i + 1]["total_spend"]
|
||||||
|
for i in range(len(models_spend_for_admin) - 1)
|
||||||
|
), "Admin response should be sorted by total_spend in descending order"
|
||||||
|
|
||||||
|
if len(models_spend_for_internal_user) > 1:
|
||||||
|
assert all(
|
||||||
|
models_spend_for_internal_user[i]["total_spend"]
|
||||||
|
>= models_spend_for_internal_user[i + 1]["total_spend"]
|
||||||
|
for i in range(len(models_spend_for_internal_user) - 1)
|
||||||
|
), "Internal user response should be sorted by total_spend in descending order"
|
||||||
|
|
||||||
|
# Check if admin has access to more or equal models compared to internal user
|
||||||
|
assert len(models_spend_for_admin) >= len(
|
||||||
|
models_spend_for_internal_user
|
||||||
|
), "Admin should have access to at least as many models as internal user"
|
||||||
|
|
||||||
|
# Check if the response contains expected fields
|
||||||
|
if len(models_spend_for_admin) > 0:
|
||||||
|
assert all(
|
||||||
|
key in models_spend_for_admin[0] for key in ["model", "total_spend"]
|
||||||
|
), "Admin response should contain model, total_spend, and total_tokens"
|
||||||
|
|
||||||
|
if len(models_spend_for_internal_user) > 0:
|
||||||
|
assert all(
|
||||||
|
key in models_spend_for_internal_user[0] for key in ["model", "total_spend"]
|
||||||
|
), "Internal user response should contain model, total_spend, and total_tokens"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_global_spend_keys(prisma_client):
|
||||||
|
print("prisma client=", prisma_client)
|
||||||
|
setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client)
|
||||||
|
setattr(litellm.proxy.proxy_server, "master_key", "sk-1234")
|
||||||
|
|
||||||
|
await litellm.proxy.proxy_server.prisma_client.connect()
|
||||||
|
|
||||||
|
# Test for admin user
|
||||||
|
keys_spend_for_admin = await global_spend_keys(
|
||||||
|
limit=10,
|
||||||
|
user_api_key_dict=UserAPIKeyAuth(
|
||||||
|
api_key="sk-1234",
|
||||||
|
user_role=LitellmUserRoles.PROXY_ADMIN,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
print("keys_spend_for_admin=", keys_spend_for_admin)
|
||||||
|
|
||||||
|
# Test for internal user
|
||||||
|
keys_spend_for_internal_user = await global_spend_keys(
|
||||||
|
limit=10,
|
||||||
|
user_api_key_dict=UserAPIKeyAuth(
|
||||||
|
api_key="sk-1234", user_role=LitellmUserRoles.INTERNAL_USER, user_id="1234"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
print("keys_spend_for_internal_user=", keys_spend_for_internal_user)
|
||||||
|
|
||||||
|
# Assertions
|
||||||
|
assert isinstance(keys_spend_for_admin, list), "Admin response should be a list"
|
||||||
|
assert isinstance(
|
||||||
|
keys_spend_for_internal_user, list
|
||||||
|
), "Internal user response should be a list"
|
||||||
|
|
||||||
|
# Check if admin has access to more or equal keys compared to internal user
|
||||||
|
assert len(keys_spend_for_admin) >= len(
|
||||||
|
keys_spend_for_internal_user
|
||||||
|
), "Admin should have access to at least as many keys as internal user"
|
||||||
|
|
||||||
|
# Check if the response contains expected fields
|
||||||
|
if len(keys_spend_for_admin) > 0:
|
||||||
|
assert all(
|
||||||
|
key in keys_spend_for_admin[0]
|
||||||
|
for key in ["api_key", "total_spend", "key_alias", "key_name"]
|
||||||
|
), "Admin response should contain api_key, total_spend, key_alias, and key_name"
|
||||||
|
|
||||||
|
if len(keys_spend_for_internal_user) > 0:
|
||||||
|
assert all(
|
||||||
|
key in keys_spend_for_internal_user[0]
|
||||||
|
for key in ["api_key", "total_spend", "key_alias", "key_name"]
|
||||||
|
), "Internal user response should contain api_key, total_spend, key_alias, and key_name"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue