Przegląd
Budżety pozwalają ustawić limity wydatków dla poddrzewauser_path, etykiety
requestu lub providera. GoModel ocenia je na podstawie śledzonych rekordów kosztów użycia
i blokuje pasujące requesty, gdy limit został już wyczerpany.
Każdy budżet ma scope, który określa, co ogranicza:
Używaj budżetów, gdy potrzebujesz limitów takich jak:
/team/alphamoże wydać$10dziennie/team/alphamoże wydać$50tygodniowo/ma globalny limit miesięczny- wszystko z etykietą
Mobile-App-iOSmoże wydać$500miesięcznie - provider
openai-prodmoże wydać$100dziennie, łącznie dla wszystkich użytkowników
Egzekwowanie budżetów działa tylko wtedy, gdy budżety są włączone globalnie, a aktywny
workflow ma włączony Budget. Kontrolka Budget w workflow jest domyślnie włączona,
gdy globalna funkcja budżetów jest włączona.
Włącz budżety
Budżety są domyślnie włączone:Utwórz budżety
Budżety możesz tworzyć w dashboardzie:
label lub
provider. Budżety utworzone w dashboardzie są oznaczone jako manual. Budżety
wczytane z YAML lub zmiennych środowiskowych są oznaczone jako config.
Budżety możesz też zainicjować z YAML:
SET_BUDGET_ staje się ścieżką użytkownika. Między segmentami ścieżki używaj
podwójnych podkreśleń (__); pojedyncze podkreślenia pozostają częścią segmentu:
SET_BUDGET_TEAM__ALPHA->/team/alphaSET_BUDGET_USER_123->/user_123SET_BUDGET_->/
__, użyj YAML lub dashboardu.
Budżety providerów mają własny prefiks, SET_PROVIDER_BUDGET_<NAME>, podobnie jak
SET_PROVIDER_RATE_LIMIT_<NAME>. Podkreślenia w sufiksie zamieniają się w myślniki, więc
SET_PROVIDER_BUDGET_OPENAI_PROD ogranicza providera openai-prod.
Budżety etykiet nie mają formy zmiennej środowiskowej. Etykiety są dopasowywane
dosłownie, łącznie z wielkością liter, i mogą zawierać znaki, których nie da się
wyrazić w nazwach zmiennych środowiskowych. Zadeklaruj je w
budgets.labels w YAML
albo utwórz w dashboardzie lub przez Admin API.
Kolumna Sekundy to wewnętrzny identyfikator okresu. Standardowe okresy korzystają
ze skonfigurowanej logiki punktów resetu; na przykład
monthly jest przechowywany jako
2592000, ale resetuje się według punktów miesiąca kalendarzowego i przycina dzień resetu
w krótszych miesiącach. Tylko niestandardowe wartości period_seconds działają jako
okna o stałej liczbie sekund.
Dla niestandardowych okien ustaw period_seconds w YAML:
Jak działa dopasowywanie
Ścieżki budżetów dotyczą skonfigurowanej ścieżki i jej potomków:- ścieżka budżetu
/team - ścieżka requestu
/team/app - wynik: budżet obowiązuje
- ścieżka budżetu
/team - ścieżka requestu
/team-alpha - wynik: budżet nie obowiązuje
-
etykieta budżetu
Mobile-App-iOS -
etykiety requestu
["Mobile-App-iOS", "prod"] - wynik: budżet obowiązuje
-
etykieta budżetu
Mobile-App-iOS -
etykiety requestu
["mobile-app-ios"] - wynik: budżet nie obowiązuje
LITELLM_TAGS_ENABLED=false, gdy klient nie może obciążać budżetu etykiety
innego zespołu.
Budżety providerów dopasowują skonfigurowaną instancję providera, która obsługuje
request, bez rozróżniania wielkości liter. Budżet providera ogranicza łączne wydatki
tego providera dla wszystkich ścieżek użytkowników i etykiet; nie zawęża budżetu
ścieżki użytkownika ani etykiety. Requesty, których provider nie jest znany w momencie
przyjęcia, np. zgłoszenia batchy i wywołania MCP, nie są sprawdzane względem budżetów
providerów.
Jeśli do requestu pasuje kilka budżetów, GoModel sprawdza wszystkie pasujące limity
w jednym zapytaniu. Request jest odrzucany, jeśli którykolwiek pasujący limit jest wyczerpany.
Budżety providerów i failover
Gdy budżet providera jest wyczerpany, a request ma cele failoveru, GoModel pomija wyczerpanego providera i próbuje celów failoveru zamiast odrzucać request. Failover pomija także każdy cel, którego własny budżet providera jest wyczerpany. Jeśli nie zostaje żaden cel, klient otrzymuje pierwotny błądbudget_exceeded. Budżety ścieżek użytkowników
i etykiet zawsze odrzucają request: zmiana providera nie może ich odciążyć.
Dynamiczne budżety dla każdego potomka
Dynamiczne budżety dla każdego potomka są dostępne w GoModel Pro i wymagają
uprawnienia licencyjnego
quota_templates. Bez niego zapisy przez Admin API są
odrzucane z 403 quota_templates_not_entitled, a per_child: true
w konfiguracji przerywa uruchamianie – GoModel nigdy nie przechodzi po cichu na
jeden wspólny budżet poddrzewa, ponieważ zmieniłoby to semantykę egzekwowania.per_child: true we wpisie ścieżki użytkownika, gdy jego limit ma być szablonem
dla bezpośrednich potomków, a nie jednym wspólnym budżetem poddrzewa. Dla szablonu
na /customers:
/customers/alicei/customers/alice/appwydają z budżetu Alice/customers/bobwydaje z niezależnego budżetu Boba- samo
/customersnie pasuje do szablonu, ponieważ nie ma potomka
per child zamiast wymyślać zagregowaną
wartość użycia. Użyj GET /v1/usage z efektywną ścieżką użytkownika potomka, aby
sprawdzić rozwiązany budżet tego potomka. Zresetowanie szablonu rozpoczyna nowy
okres dla wszystkich jego potomków.
Egzekwowanie w workflow
Aktywny workflow decyduje, czy dla requestu są wykonywane sprawdzenia budżetu. W payloadzie workflow:user_path. Kolejność dopasowywania opisuje strona
Workflows.
Cache hity odpowiedzi mogą zwrócić wynik przed egzekwowaniem budżetu. Jeśli istnieje
odpowiedź w cache’u, GoModel może ją zwrócić bez dodatkowych kosztów u providera.
Okna resetu
Punkty resetu budżetów konfiguruje się w dashboardzie w:31 wypada 30 kwietnia oraz 28 lub 29 lutego.
Edycja budżetu zmienia limit, ale nie resetuje bieżącego okresu. Użyj akcji Reset
w wierszu, aby rozpocząć nowy okres dla jednego budżetu, lub
Settings -> Reset All Budgets, aby zresetować wszystkie budżety.
Admin API
Zarządzanie budżetami jest dostępne także przez Admin API:scope, subject
i okres; dla budżetów ścieżek użytkowników user_path jest akceptowane jako skrócony
zapis podmiotu:
"scope": "provider"
z nazwą providera jako podmiotem):