Квоты voice API (TTS / STT)
Voice-провайдеры тарифицируют по «количеству секунд / символов в месяц».
В отличие от LLM, лимиты тут жёсткие — превышение = 403, и пользователь
не получает звук. Считаем сами и алёртим заранее:
import os, requests, json, time
S = "/tmp/voice-quota.json"LIMITS = { # символов / секунд в месяц "elevenlabs": 100_000, "deepgram": 45_000, "whisper": 60_000,}
def observe(provider: str, units: int): s = (json.load(open(S)) if os.path.exists(S) else {}) month = time.strftime("%Y-%m") s.setdefault(month, {}).setdefault(provider, 0) s[month][provider] += units json.dump(s, open(S, "w"))
used = s[month][provider] limit = LIMITS.get(provider, 1) for thr in (0.7, 0.9, 0.99): flag = f"/tmp/voice-{provider}-{month}-{int(thr*100)}.flag" if used / limit >= thr and not os.path.exists(flag): push(f"🎙️ {provider}: {int(thr*100)}% квоты", f"{used:,} / {limit:,}", 9 if thr >= 0.9 else 5) 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)Параллельно — HTTP-монитор на api.elevenlabs.io/v1/user,
чтобы ловить факт quota_exceeded в их собственном ответе.