Budgetmanager
Möchten Sie nicht mit verrückten Rechnungen konfrontiert werden, weder wenn Sie LLM-APIs aufrufen, noch wenn Ihre Benutzer sie aufrufen? Verwenden Sie dies.
Wenn Sie einen Server zur Verwaltung von Benutzerschlüsseln, Budgets usw. wünschen, verwenden Sie unseren LiteLLM Proxy Server
LiteLLM stellt Folgendes bereit:
litellm.max_budget: eine globale Variable, mit der Sie das maximale Budget (in USD) für alle Ihre LiteLLM-Aufrufe festlegen können. Wenn dieses Budget überschritten wird, wird ein BudgetExceededError ausgelöst.BudgetManager: Eine Klasse zur Verwaltung von Budgets pro Benutzer. BudgetManager erstellt ein Wörterbuch zur Verwaltung der Benutzerausgaben, wobei der Schlüssel der Benutzer und das Objekt seine aktuellen Kosten + modellspezifischen Kosten sind.LiteLLM Proxy Server: Ein Server zum Aufrufen von über 100 LLMs mit einem OpenAI-kompatiblen Endpunkt. Verwaltet Benutzerausgaben, Ausgabenverfolgung, Load Balancing usw.
Schnellstart​
import litellm, os
from litellm import completion
# set env variable
os.environ["OPENAI_API_KEY"] = "your-api-key"
litellm.max_budget = 0.001 # sets a max budget of $0.001
messages = [{"role": "user", "content": "Hey, how's it going"}]
completion(model="gpt-4", messages=messages)
print(litellm._current_cost)
completion(model="gpt-4", messages=messages)
Benutzerbasierte Ratenbegrenzung​
from litellm import BudgetManager, completion
budget_manager = BudgetManager(project_name="test_project")
user = "1234"
# create a budget if new user user
if not budget_manager.is_valid_user(user):
budget_manager.create_budget(total_budget=10, user=user)
# check if a given call can be made
if budget_manager.get_current_cost(user=user) <= budget_manager.get_total_budget(user):
response = completion(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hey, how's it going?"}])
budget_manager.update_cost(completion_obj=response, user=user)
else:
response = "Sorry - no budget!"
Verwendung mit Texteingabe / -ausgabe​
Aktualisieren Sie die Kosten, indem Sie einfach die Texteingabe/-ausgabe und den Modellnamen übergeben.
from litellm import BudgetManager
budget_manager = BudgetManager(project_name="test_project")
user = "12345"
budget_manager.create_budget(total_budget=10, user=user, duration="daily")
input_text = "hello world"
output_text = "it's a sunny day in san francisco"
model = "gpt-3.5-turbo"
budget_manager.update_cost(user=user, model=model, input_text=input_text, output_text=output_text) # 👈
print(budget_manager.get_current_cost(user))
Erweiterte Verwendung​
In der Produktion müssen wir
- Benutzerbudgets in einer Datenbank speichern
- Benutzerbudgets basierend auf einer festgelegten Dauer zurücksetzen
LiteLLM API​
Die LiteLLM API bietet beides. Sie speichert das Benutzerobjekt in einer gehosteten Datenbank und führt täglich einen Cron-Job aus, um Benutzerausgaben basierend auf der festgelegten Dauer zurückzusetzen (z. B. Budget täglich/wöchentlich/monatlich/etc. zurücksetzen).
Verwendung
budget_manager = BudgetManager(project_name="<my-unique-project>", client_type="hosted")
Vollständiger Code
from litellm import BudgetManager, completion
budget_manager = BudgetManager(project_name="<my-unique-project>", client_type="hosted")
user = "1234"
# create a budget if new user user
if not budget_manager.is_valid_user(user):
budget_manager.create_budget(total_budget=10, user=user, duration="monthly") # 👈 duration = 'daily'/'weekly'/'monthly'/'yearly'
# check if a given call can be made
if budget_manager.get_current_cost(user=user) <= budget_manager.get_total_budget(user):
response = completion(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hey, how's it going?"}])
budget_manager.update_cost(completion_obj=response, user=user)
else:
response = "Sorry - no budget!"
Selbst gehostet​
Um Ihre eigene Datenbank zu verwenden, setzen Sie den BudgetManager-Clienttyp auf hosted und setzen Sie die api_base.
Ihre API soll die Endpunkte /get_budget und /set_budget bereitstellen. Details finden Sie im Code
Verwendung
budget_manager = BudgetManager(project_name="<my-unique-project>", client_type="hosted", api_base="your_custom_api")
Vollständiger Code
from litellm import BudgetManager, completion
budget_manager = BudgetManager(project_name="<my-unique-project>", client_type="hosted", api_base="your_custom_api")
user = "1234"
# create a budget if new user user
if not budget_manager.is_valid_user(user):
budget_manager.create_budget(total_budget=10, user=user, duration="monthly") # 👈 duration = 'daily'/'weekly'/'monthly'/'yearly'
# check if a given call can be made
if budget_manager.get_current_cost(user=user) <= budget_manager.get_total_budget(user):
response = completion(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hey, how's it going?"}])
budget_manager.update_cost(completion_obj=response, user=user)
else:
response = "Sorry - no budget!"
Budget Manager Klasse​
Die Klasse BudgetManager wird zur Verwaltung von Budgets für verschiedene Benutzer verwendet. Sie bietet verschiedene Funktionen zum Erstellen, Aktualisieren und Abrufen von Budgetinformationen.
Nachfolgend finden Sie eine Liste der öffentlichen Funktionen, die von der Budget Manager Klasse bereitgestellt werden, sowie deren Ein- und Ausgaben.
init​
def __init__(self, project_name: str, client_type: str = "local", api_base: Optional[str] = None)
project_name(str): Der Name des Projekts.client_type(str): Der Clienttyp ("local" oder "hosted"). Standard ist "local".api_base(Optional[str]): Die Basis-URL der API. Standard ist None.
create_budget​
def create_budget(self, total_budget: float, user: str, duration: Literal["daily", "weekly", "monthly", "yearly"], created_at: float = time.time())
Erstellt ein Budget für einen Benutzer.
total_budget(float): Das Gesamtbudget des Benutzers.user(str): Die Benutzer-ID.duration(Literal["täglich", "wöchentlich", "monatlich", "jährlich"]): Die Budgetdauer.created_at(float): Die Erstellungszeit. Standard ist die aktuelle Zeit.
projected_cost​
def projected_cost(self, model: str, messages: list, user: str)
Berechnet die prognostizierten Kosten für eine Sitzung.
model(str): Der Name des Modells.messages(list): Die Liste der Nachrichten.user(str): Die Benutzer-ID.
get_total_budget​
def get_total_budget(self, user: str)
Gibt das Gesamtbudget eines Benutzers zurück.
user(str): Benutzer-ID.
update_cost​
def update_cost(self, completion_obj: ModelResponse, user: str)
Aktualisiert die Kosten des Benutzers.
completion_obj(ModelResponse): Das vom Modell empfangene Abschluss-Objekt.user(str): Die Benutzer-ID.
get_current_cost​
def get_current_cost(self, user: str)
Gibt die aktuellen Kosten eines Benutzers zurück.
user(str): Die Benutzer-ID.
get_model_cost​
def get_model_cost(self, user: str)
Gibt die Modellkosten eines Benutzers zurück.
user(str): Die Benutzer-ID.
is_valid_user​
def is_valid_user(self, user: str) -> bool
Prüft, ob ein Benutzer gültig ist.
user(str): Die Benutzer-ID.
get_users​
def get_users(self)
Gibt eine Liste aller Benutzer zurück.
reset_cost​
def reset_cost(self, user: str)
Setzt die Kosten eines Benutzers zurück.
user(str): Die Benutzer-ID.
reset_on_duration​
def reset_on_duration(self, user: str)
Setzt die Kosten eines Benutzers basierend auf der Dauer zurück.
user(str): Die Benutzer-ID.
update_budget_all_users​
def update_budget_all_users(self)
Aktualisiert das Budget für alle Benutzer.
save_data​
def save_data(self)
Speichert das Benutzerwörterbuch.