Zum Hauptinhalt springen

💰 Budgets, Ratenlimits

Anforderungen

Budgets festlegen

Globaler Proxy

Ein Budget für alle Aufrufe auf dem Proxy anwenden

Schritt 1. config.yaml ändern

general_settings:
master_key: sk-1234

litellm_settings:
# other litellm settings
max_budget: 0 # (float) sets max budget as $0 USD
budget_duration: 30d # (str) frequency of reset - You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d").

Schritt 2. Proxy starten

litellm /path/to/config.yaml

Schritt 3. Testaufruf senden

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Autherization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
],
}'

Team

Sie können

  • Budgets zu Teams hinzufügen
Info

Schritt-für-Schritt-Anleitung zum Festlegen und Zurücksetzen von Budgets für Teams hier (API oder über die Admin-Oberfläche)

👉 https://docs.litellm.de/docs/proxy/team_budgets

Budgets zu Teams hinzufügen

curl --location 'https://:4000/team/new' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"team_alias": "my-new-team_4",
"members_with_roles": [{"role": "admin", "user_id": "5c4a0aa3-a1e1-43dc-bd87-3c2da8382a3a"}],
"rpm_limit": 99
}'

Swagger ansehen

Beispielantwort

{
"team_alias": "my-new-team_4",
"team_id": "13e83b19-f851-43fe-8e93-f96e21033100",
"admins": [],
"members": [],
"members_with_roles": [
{
"role": "admin",
"user_id": "5c4a0aa3-a1e1-43dc-bd87-3c2da8382a3a"
}
],
"metadata": {},
"tpm_limit": null,
"rpm_limit": 99,
"max_budget": null,
"models": [],
"spend": 0.0,
"max_parallel_requests": null,
"budget_duration": null,
"budget_reset_at": null
}

Budgetdauer zu Teams hinzufügen

budget_duration: Das Budget wird am Ende der angegebenen Dauer zurückgesetzt. Wenn nicht gesetzt, wird das Budget nie zurückgesetzt. Sie können die Dauer als Sekunden ("30s"), Minuten ("30m"), Stunden ("30h"), Tage ("30d") festlegen.

curl 'http://0.0.0.0:4000/team/new' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"team_alias": "my-new-team_4",
"members_with_roles": [{"role": "admin", "user_id": "5c4a0aa3-a1e1-43dc-bd87-3c2da8382a3a"}],
"budget_duration": 10s,
}'

Teammitglieder

Verwenden Sie dies, wenn Sie das Ausgabenvolumen eines Benutzers innerhalb eines Teams budgetieren möchten

Schritt 1. Benutzer erstellen

Erstellen Sie einen Benutzer mit user_id=ishaan

curl --location 'http://0.0.0.0:4000/user/new' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "ishaan"
}'

Schritt 2. Benutzer zu einem bestehenden Team hinzufügen – max_budget_in_team festlegen

Legen Sie max_budget_in_team fest, wenn Sie einen Benutzer zu einem Team hinzufügen. Wir verwenden dieselbe user_id, die wir in Schritt 1 gesetzt haben

curl -X POST 'http://0.0.0.0:4000/team/member_add' \
-H 'Authorization: Bearer sk-1234' \
-H 'Content-Type: application/json' \
-d '{"team_id": "e8d1460f-846c-45d7-9b43-55f3cc52ac32", "max_budget_in_team": 0.000000000001, "member": {"role": "user", "user_id": "ishaan"}}'

Schritt 3. Schlüssel für Teammitglied aus Schritt 1 erstellen

Legen Sie user_id=ishaan aus Schritt 1 fest

curl --location 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "ishaan",
"team_id": "e8d1460f-846c-45d7-9b43-55f3cc52ac32"
}'

Antwort von /key/generate

Wir verwenden den key aus dieser Antwort in Schritt 4

{"key":"sk-RV-l2BJEZ_LYNChSx2EueQ", "models":[],"spend":0.0,"max_budget":null,"user_id":"ishaan","team_id":"e8d1460f-846c-45d7-9b43-55f3cc52ac32","max_parallel_requests":null,"metadata":{},"tpm_limit":null,"rpm_limit":null,"budget_duration":null,"allowed_cache_controls":[],"soft_budget":null,"key_alias":null,"duration":null,"aliases":{},"config":{},"permissions":{},"model_max_budget":{},"key_name":null,"expires":null,"token_id":null}% 

Schritt 4. /chat/completions-Anfragen für Teammitglied senden

Verwenden Sie den Schlüssel aus Schritt 3 für diese Anfrage. Nach 2-3 Anfragen sollten Sie den folgenden Fehler erhalten: ExceededBudget: Crossed spend within team

curl --location 'https://:4000/chat/completions' \
--header 'Authorization: Bearer sk-RV-l2BJEZ_LYNChSx2EueQ' \
--header 'Content-Type: application/json' \
--data '{
"model": "llama3",
"messages": [
{
"role": "user",
"content": "tes4"
}
]
}'

Interner Benutzer

Wenden Sie ein Budget auf alle Aufrufe an, die ein interner Benutzer (Schlüsselbesitzer) auf dem Proxy tätigen kann.

Info

Für die meisten Anwendungsfälle empfehlen wir, Budgets für Teammitglieder festzulegen

LiteLLM stellt einen /user/new-Endpunkt bereit, um dafür Budgets zu erstellen.

Sie können

  • Budgets für Benutzer hinzufügen Springen
  • Budgetdauern hinzufügen, um Ausgaben zurückzusetzen Springen

Standardmäßig ist max_budget auf null gesetzt und wird für Schlüssel nicht geprüft

Budgets für Benutzer hinzufügen

curl --location 'https://:4000/user/new' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{"models": ["azure-models"], "max_budget": 0, "user_id": "krrish3@berri.ai"}'

Swagger ansehen

Beispielantwort

{
"key": "sk-YF2OxDbrgd1y2KgwxmEA2w",
"expires": "2023-12-22T09:53:13.861000Z",
"user_id": "krrish3@berri.ai",
"max_budget": 0.0
}

Budgetdauer für Benutzer hinzufügen

budget_duration: Das Budget wird am Ende der angegebenen Dauer zurückgesetzt. Wenn nicht gesetzt, wird das Budget nie zurückgesetzt. Sie können die Dauer als Sekunden ("30s"), Minuten ("30m"), Stunden ("30h"), Tage ("30d") festlegen.

curl 'http://0.0.0.0:4000/user/new' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"team_id": "core-infra", # [OPTIONAL]
"max_budget": 10,
"budget_duration": 10s,
}'

Neue Schlüssel für bestehenden Benutzer erstellen

Rufen Sie einfach /key/generate mit dieser user_id auf (z.B. krrish3@berri.ai) und

  • Budgetprüfung: Das Budget von krrish3@berri.ai (z.B. 10 $) wird für diesen Schlüssel geprüft
  • Ausgabenverfolgung: Die Ausgaben für diesen Schlüssel aktualisieren auch die Ausgaben von krrish3@berri.ai
curl --location 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data '{"models": ["azure-models"], "user_id": "krrish3@berri.ai"}'

Virtueller Schlüssel

Wenden Sie ein Budget auf einen Schlüssel an.

Sie können

  • Budgets zu Schlüsseln hinzufügen Springen
  • Budgetdauern hinzufügen, um Ausgaben zurückzusetzen Springen

Erwartetes Verhalten

  • Kosten pro Schlüssel werden automatisch in die Tabelle LiteLLM_VerificationToken eingetragen
  • Nachdem der Schlüssel sein max_budget überschritten hat, schlagen Anfragen fehl
  • Wenn eine Dauer festgelegt ist, werden die Ausgaben am Ende der Dauer zurückgesetzt

Standardmäßig ist max_budget auf null gesetzt und wird für Schlüssel nicht geprüft

Budgets zu Schlüsseln hinzufügen

curl 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"team_id": "core-infra", # [OPTIONAL]
"max_budget": 10,
}'

Beispielanfrage an /chat/completions, wenn der Schlüssel das Budget überschritten hat

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <generated-key>' \
--data ' {
"model": "azure-gpt-3.5",
"user": "e09b4da8-ed80-4b05-ac93-e16d9eb56fca",
"messages": [
{
"role": "user",
"content": "respond in 50 lines"
}
],
}'

Erwartete Antwort von /chat/completions, wenn der Schlüssel das Budget überschritten hat

{
"detail":"Authentication Error, ExceededTokenBudget: Current spend for token: 7.2e-05; Max Budget for Token: 2e-07"
}

Budgetdauer für Schlüssel hinzufügen

budget_duration: Das Budget wird am Ende der angegebenen Dauer zurückgesetzt. Wenn nicht gesetzt, wird das Budget nie zurückgesetzt. Sie können die Dauer als Sekunden ("30s"), Minuten ("30m"), Stunden ("30h"), Tage ("30d") festlegen.

curl 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"team_id": "core-infra", # [OPTIONAL]
"max_budget": 10,
"budget_duration": 10s,
}'

✨ Virtueller Schlüssel (Modellspezifisch)

Wenden Sie modellspezifische Budgets auf einen Schlüssel an. Beispiel

  • Budget für gpt-4o beträgt 0,0000001 $, für den Zeitraum 1d für den key = "sk-12345"
  • Budget für gpt-4o-mini beträgt 10 $, für den Zeitraum 30d für den key = "sk-12345"
Info

✨ Dies ist eine reine Enterprise-Funktion. Starten Sie hier mit Enterprise

Die Spezifikation für model_max_budget ist Dict[str, GenericBudgetInfo]

curl 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model_max_budget": {"gpt-4o": {"budget_limit": "0.0000001", "time_period": "1d"}}
}'

Eine Testanfrage stellen

Wir erwarten, dass die erste Anfrage erfolgreich ist und die zweite Anfrage fehlschlägt, da wir das Budget für gpt-4o auf dem virtuellen Schlüssel überschreiten

Langchain, OpenAI SDK Anwendungsbeispiele

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <sk-generated-key>' \
--data ' {
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": "testing request"
}
]
}
'

Kunden

Verwenden Sie dies, um das für /chat/completions übergebene user zu budgetieren, ohne für jeden Benutzer einen Schlüssel erstellen zu müssen

Schritt 1. config.yaml ändern litellm.max_end_user_budget definieren

general_settings:
master_key: sk-1234

litellm_settings:
max_end_user_budget: 0.0001 # budget for 'user' passed to /chat/completions
  1. Eine /chat/completions-Anfrage stellen, 'user' übergeben – Erste Anfrage funktioniert
curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-zi5onDRdHGD24v0Zdn7VBA' \
--data ' {
"model": "azure-gpt-3.5",
"user": "ishaan3",
"messages": [
{
"role": "user",
"content": "what time is it"
}
]
}'
  1. Eine /chat/completions-Anfrage stellen, 'user' übergeben – Anfrage schlägt fehl, da 'ishaan3' über dem Budget liegt
curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-zi5onDRdHGD24v0Zdn7VBA' \
--data ' {
"model": "azure-gpt-3.5",
"user": "ishaan3",
"messages": [
{
"role": "user",
"content": "what time is it"
}
]
}'

Fehler

{"error":{"message":"Budget has been exceeded: User ishaan3 has exceeded their budget. Current spend: 0.0008869999999999999; Max Budget: 0.0001","type":"auth_error","param":"None","code":401}}%                

Budgets zurücksetzen

Budgets für Schlüssel/interne Benutzer/Teams/Kunden zurücksetzen

budget_duration: Das Budget wird am Ende der angegebenen Dauer zurückgesetzt. Wenn nicht gesetzt, wird das Budget nie zurückgesetzt. Sie können die Dauer als Sekunden ("30s"), Minuten ("30m"), Stunden ("30h"), Tage ("30d") festlegen.

curl 'http://0.0.0.0:4000/user/new' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"max_budget": 10,
"budget_duration": 10s, # 👈 KEY CHANGE
}'

Hinweis: Standardmäßig prüft der Server alle 10 Minuten auf Rücksetzungen, um DB-Aufrufe zu minimieren.

Um dies zu ändern, setzen Sie proxy_budget_rescheduler_min_time und proxy_budget_rescheduler_max_time

Z.B.: Alle 1 Sekunde prüfen

general_settings: 
proxy_budget_rescheduler_min_time: 1
proxy_budget_rescheduler_max_time: 1

Ratenlimits festlegen

Sie können festlegen:

  • tpm-Limits (Tokens pro Minute)
  • rpm-Limits (Anfragen pro Minute)
  • maximale gleichzeitige Anfragen
  • rpm / tpm-Limits pro Modell für einen bestimmten Schlüssel

Verwenden Sie /team/new oder /team/update, um Ratenlimits für mehrere Schlüssel eines Teams zu speichern.

curl --location 'http://0.0.0.0:4000/team/new' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{"team_id": "my-prod-team", "max_parallel_requests": 10, "tpm_limit": 20, "rpm_limit": 4}'

Swagger ansehen

Erwartete Antwort

{
"key": "sk-sA7VDkyhlQ7m8Gt77Mbt3Q",
"expires": "2024-01-19T01:21:12.816168",
"team_id": "my-prod-team",
}

Standardbudget für ALLE internen Benutzer festlegen

Verwenden Sie dies, um ein Standardbudget für Benutzer festzulegen, denen Sie Schlüssel geben.

Dies gilt, wenn ein Benutzer user_role="internal_user" hat (legen Sie dies über /user/new oder /user/update fest).

Dies gilt NICHT, wenn ein Schlüssel eine team_id hat (dann gelten Team-Budgets). Teilen Sie uns mit, wie wir dies verbessern können!

  1. Maximales Budget in Ihrer config.yaml definieren
model_list: 
- model_name: "gpt-3.5-turbo"
litellm_params:
model: gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY

litellm_settings:
max_internal_user_budget: 0 # amount in USD
internal_user_budget_duration: "1mo" # reset every month
  1. Schlüssel für Benutzer erstellen
curl -L -X POST 'http://0.0.0.0:4000/key/generate' \
-H 'Authorization: Bearer sk-1234' \
-H 'Content-Type: application/json' \
-d '{}'

Erwartete Antwort

{
...
"key": "sk-X53RdxnDhzamRwjKXR4IHg"
}
  1. Testen Sie es!
curl -L -X POST 'http://0.0.0.0:4000/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer sk-X53RdxnDhzamRwjKXR4IHg' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hey, how's it going?"}]
}'

Erwartete Antwort

{
"error": {
"message": "ExceededBudget: User=<user_id> over budget. Spend=3.7e-05, Budget=0.0",
"type": "budget_exceeded",
"param": null,
"code": "400"
}
}

[BETA]Multi-Instanz-Ratenbegrenzung

Aktivieren Sie die Multi-Instanz-Ratenbegrenzung mit der Umgebungsvariable EXPERIMENTAL_MULTI_INSTANCE_RATE_LIMITING="True"

Änderungen

  • Dies verschiebt die Verwendung von async_increment anstelle von async_set_cache beim Aktualisieren von aktuellen Anfragen/Tokens.
  • Der In-Memory-Cache wird alle 0,01 Sekunden mit Redis synchronisiert, um zu vermeiden, dass Redis für jede Anfrage aufgerufen wird.
  • In Tests wurde festgestellt, dass dies 2x schneller als die vorherige Implementierung ist und den Unterschied zwischen erwarteten und tatsächlichen Fehlern bei hohem Datenverkehr (100 RPS über 3 Instanzen) auf maximal 10 Anfragen reduziert.

Zugriff auf neues Modell gewähren

Verwenden Sie Modellzugriffsgruppen, um Benutzern den Zugriff auf ausgewählte Modelle zu gewähren und im Laufe der Zeit neue hinzuzufügen (z.B. mistral, llama-2, etc.).

Unterschied zwischen der Durchführung mit /key/generate und /user/new? Wenn Sie es bei /user/new tun, bleibt es für mehrere für diesen Benutzer generierte Schlüssel bestehen.

Schritt 1. Modell, Zugriffsgruppe in config.yaml zuweisen

model_list:
- model_name: text-embedding-ada-002
litellm_params:
model: azure/azure-embedding-model
api_base: "os.environ/AZURE_API_BASE"
api_key: "os.environ/AZURE_API_KEY"
api_version: "2023-07-01-preview"
model_info:
access_groups: ["beta-models"] # 👈 Model Access Group

Schritt 2. Schlüssel mit Zugriffsgruppe erstellen

curl --location 'https://:4000/user/new' \
-H 'Authorization: Bearer <your-master-key>' \
-H 'Content-Type: application/json' \
-d '{"models": ["beta-models"], # 👈 Model Access Group
"max_budget": 0}'

Neue Schlüssel für bestehende interne Benutzer erstellen

Fügen Sie einfach user_id in die /key/generate-Anfrage ein.

curl --location 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data '{"models": ["azure-models"], "user_id": "krrish@berri.ai"}'

API-Spezifikation

GenericBudgetInfo

Ein Pydantic-Modell, das Budgetinformationen mit einem Zeitraum und einem Limit definiert.

class GenericBudgetInfo(BaseModel):
budget_limit: float # The maximum budget amount in USD
time_period: str # Duration string like "1d", "30d", etc.

Felder:

  • budget_limit (float): Der maximale Budgetbetrag in USD
  • time_period (str): Zeichenkette, die den Zeitraum für das Budget angibt. Unterstützte Formate
    • Sekunden: "30s"
    • Minuten: "30m"
    • Stunden: "30h"
    • Tage: "30d"

Beispiel:

{
"budget_limit": "0.0001",
"time_period": "1d"
}