Перейти к содержимому

Близко к месячной квоте провайдера

У LLM-провайдеров есть rate-tiers (Tier 1, Tier 2, …) и месячные квоты, после которых ваш аккаунт начнёт молча получать 429. Большинство SDK кладут заголовки x-ratelimit-* или anthropic-ratelimit-tokens-remaining в каждый ответ — этого достаточно, чтобы алёртить заранее.

import os, time, requests
LIMITS_FILE = "/tmp/llm-quota.json"
THRESHOLDS = (0.70, 0.90, 0.99)
def track_quota(headers):
used = int(headers.get("anthropic-ratelimit-tokens-limit", 0)) - \
int(headers.get("anthropic-ratelimit-tokens-remaining", 0))
limit = int(headers.get("anthropic-ratelimit-tokens-limit", 0)) or 1
ratio = used / limit
for thr in THRESHOLDS:
flag = f"/tmp/llm-quota-{int(thr*100)}-{time.strftime('%Y%m')}.flag"
if ratio >= thr and not os.path.exists(flag):
push(f"📊 LLM quota {int(thr*100)}%",
f"Использовано {used:,} из {limit:,} токенов tier-окна.",
9 if thr >= 0.9 else 6)
open(flag, "w").close()
def push(t, m, p):
requests.post(f"{os.environ['NOTIFLY_URL']}/message",
params={"token": os.environ["NOTIFLY_TOKEN"]},
json={"title": t, "message": m, "priority": p}, timeout=5)

Тот же принцип — для OpenAI (x-ratelimit-remaining-tokens), OpenRouter (X-RateLimit-Remaining-Credits) и Together (x-ratelimit-tokens-remaining-day).