mirror of
https://github.com/tiennm99/litellm.git
synced 2026-08-02 18:21:56 +00:00
Support budget/rate limit tiers for keys (#7429)
* feat(proxy/utils.py): get associated litellm budget from db in combined_view for key allows user to create rate limit tiers and associate those to keys * feat(proxy/_types.py): update the value of key-level tpm/rpm/model max budget metrics with the associated budget table values if set allows rate limit tiers to be easily applied to keys * docs(rate_limit_tiers.md): add doc on setting rate limit / budget tiers make feature discoverable * feat(key_management_endpoints.py): return litellm_budget_table value in key generate make it easy for user to know associated budget on key creation * fix(key_management_endpoints.py): document 'budget_id' param in `/key/generate` * docs(key_management_endpoints.py): document budget_id usage * refactor(budget_management_endpoints.py): refactor budget endpoints into separate file - makes it easier to run documentation testing against it * docs(test_api_docs.py): add budget endpoints to ci/cd doc test + add missing param info to docs * fix(customer_endpoints.py): use new pydantic obj name * docs(user_management_heirarchy.md): add simple doc explaining teams/keys/org/users on litellm * Litellm dev 12 26 2024 p2 (#7432) * (Feat) Add logging for `POST v1/fine_tuning/jobs` (#7426) * init commit ft jobs logging * add ft logging * add logging for FineTuningJob * simple FT Job create test * (docs) - show all supported Azure OpenAI endpoints in overview (#7428) * azure batches * update doc * docs azure endpoints * docs endpoints on azure * docs azure batches api * docs azure batches api * fix(key_management_endpoints.py): fix key update to actually work * test(test_key_management.py): add e2e test asserting ui key update call works * fix: proxy/_types - fix linting erros * test: update test --------- Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com> * fix: test * fix(parallel_request_limiter.py): enforce tpm/rpm limits on key from tiers * fix: fix linting errors * test: fix test * fix: remove unused import * test: update test * docs(customer_endpoints.py): document new model_max_budget param * test: specify unique key alias * docs(budget_management_endpoints.py): document new model_max_budget param * test: fix test * test: fix tests --------- Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
This commit is contained in:
co-authored by
Ishaan Jaff
parent
12c4e7e695
commit
539f166166
@@ -777,3 +777,68 @@ async def test_user_info_as_proxy_admin(prisma_client):
|
||||
|
||||
assert user_info_response.keys is not None
|
||||
assert len(user_info_response.keys) > 0, "Expected at least one key in response"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_key_update_with_model_specific_params(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()
|
||||
|
||||
from litellm.proxy.management_endpoints.key_management_endpoints import (
|
||||
update_key_fn,
|
||||
)
|
||||
from litellm.proxy._types import UpdateKeyRequest
|
||||
|
||||
new_key = await generate_key_fn(
|
||||
data=GenerateKeyRequest(models=["gpt-4"]),
|
||||
user_api_key_dict=UserAPIKeyAuth(
|
||||
user_role=LitellmUserRoles.PROXY_ADMIN,
|
||||
api_key="sk-1234",
|
||||
user_id="1234",
|
||||
),
|
||||
)
|
||||
|
||||
generated_key = new_key.key
|
||||
token_hash = new_key.token_id
|
||||
print(generated_key)
|
||||
|
||||
request = Request(scope={"type": "http"})
|
||||
request._url = URL(url="/update/key")
|
||||
|
||||
args = {
|
||||
"key_alias": f"test-key_{uuid.uuid4()}",
|
||||
"duration": None,
|
||||
"models": ["all-team-models"],
|
||||
"spend": 0,
|
||||
"max_budget": None,
|
||||
"user_id": "default_user_id",
|
||||
"team_id": None,
|
||||
"max_parallel_requests": None,
|
||||
"metadata": {
|
||||
"model_tpm_limit": {"fake-openai-endpoint": 10},
|
||||
"model_rpm_limit": {"fake-openai-endpoint": 0},
|
||||
},
|
||||
"tpm_limit": None,
|
||||
"rpm_limit": None,
|
||||
"budget_duration": None,
|
||||
"allowed_cache_controls": [],
|
||||
"soft_budget": None,
|
||||
"config": {},
|
||||
"permissions": {},
|
||||
"model_max_budget": {},
|
||||
"send_invite_email": None,
|
||||
"model_rpm_limit": None,
|
||||
"model_tpm_limit": None,
|
||||
"guardrails": None,
|
||||
"blocked": None,
|
||||
"aliases": {},
|
||||
"key": token_hash,
|
||||
"budget_id": None,
|
||||
"key_name": "sk-...2GWA",
|
||||
"expires": None,
|
||||
"token_id": token_hash,
|
||||
"litellm_budget_table": None,
|
||||
"token": token_hash,
|
||||
}
|
||||
await update_key_fn(request=request, data=UpdateKeyRequest(**args))
|
||||
|
||||
Reference in New Issue
Block a user