anoman
Docs · Rate Limits

Token cap, burst guard, dan token pack.

Batas belanja Anda adalah token cap per pelanggan berdasarkan model tier class (mingguan + bulanan). RPM/TPM berperan sebagai burst guard anti-flood, dan token pack menambah headroom untuk lonjakan terencana.

Token cap

Token cap berdasarkan model tier class

Batas belanja pada flat tier adalah batas token per kelas tier model yang keras, ditegakkan per pelanggan pada jendela mingguan dan bulanan. Tier class sebuah model (budget / mid / premium / ultra) ditentukan oleh harganya. Cap dibagi di seluruh key pada satu akun — N key mengambil dari satu bucket, menutup eksploit gaming multi-key yang dimiliki gateway lama. Lewati cap mingguan atau bulanan sebuah class dan request mengembalikan 402 token_quota_exceeded. Sebuah class tanpa baris untuk suatu tier tidak tersedia pada tier itu.

TierBudget (wk / mo)Mid (wk / mo)Premium (wk / mo)Ultra
Starter8M / 25M
Pro40M / 120M8M / 24M1.5M / 4M
Pay-As-You-GoTanpa kuota token tetap — alert cost-velocity halus + ketentuan pay-as-you-go
EnterpriseTanpa kuota token tetap — alert cost-velocity halus + ketentuan kontrak

Token menghitung input + output. Starter hanya menjalankan model budget. Pro menambahkan mid + premium. Ultra-class adalah wilayah Enterprise / PAYG. PAYG dan Enterprise tidak memiliki token cap keras — penggunaan diatur oleh alert cost-velocity internal yang halus ditambah ketentuan komersial Anda.
Sebuah reserved Free tier (budget saja, 1M wk / 3M mo) ada dalam skema tetapi belum memiliki pendaftaran aktif hari ini.
Override kustom per-pelanggan tersedia — hubungi [email protected].

Guard anti-flood

Burst guard RPM / TPM + inflight cap

Terpisah dari token cap (batas belanja Anda), setiap tier memiliki burst guard RPM dan TPM plus sebuah inflight cap per key. Ini adalah limit anti-flood — mereka melindungi provider upstream dan tail latency Anda sendiri, bukan budget bulanan Anda. Memicu salah satunya mengembalikan 429 rate_limit_exceeded (atau concurrent_limit_exceeded untuk inflight cap).

TierRPMTPMInflight
Starter3060,0005
Pro120500,00025
Pay-As-You-Go60200,00010
Enterprise30,000100M100

RPM = request / menit. TPM = total token / menit (input + output). Inflight = request in-flight bersamaan per key.

402 vs 429

Dua batas yang berbeda

  • 402 token_quota_exceeded — Anda menghabiskan token cap mingguan atau bulanan untuk sebuah model tier class. Response membawa model_tier_class dan window (weekly | monthly). Retry tidak akan membantu sampai jendela bergulir — beli token pack, upgrade tier Anda, atau pindahkan workload ke class yang masih memiliki budget.
  • 429 rate_limit_exceeded — Anda memicu burst guard RPM/TPM. Transien: back off dan retry, dengan menghormati Retry-After.

Response header

Baca ini alih-alih menabrak limit

Setiap response yang berhasil melaporkan budget burst-guard RPM/TPM Anda saat ini. Gunakan untuk melakukan throttle di sisi client sebelum guard memicu. Habisnya token cap muncul sebagai 402 token_quota_exceeded, berbeda dari flood guard 429 rate_limit_exceeded.

HTTP/1.1 200 OK
x-anoman-rate-limit-rpm:    120
x-anoman-rate-remaining-rpm: 86
x-anoman-rate-limit-tpm:    500000
x-anoman-rate-remaining-tpm: 491200
x-anoman-tier:              pro
content-type:               application/json
HeaderDeskripsi
x-anoman-rate-limit-rpmCap burst-guard RPM untuk tier Anda
x-anoman-rate-remaining-rpmRequest tersisa pada menit berjalan
x-anoman-rate-limit-tpmCap burst-guard TPM untuk tier Anda
x-anoman-rate-remaining-tpmToken tersisa pada menit berjalan
retry-afterHeader HTTP standar — detik untuk menunggu. Hanya pada 429.
x-anoman-tierTier pelanggan (starter/pro/payg/enterprise)
x-anoman-inflight-capBatas atas request bersamaan (hanya pada 429 dari bucket ini)
x-anoman-inflight-currentJumlah bersamaan saat ini (hanya pada 429)

Menangani 429

Hormati Retry-After

SDK OpenAI / Anthropic retry secara otomatis secara default, tetapi mereka mengabaikan Retry-After di beberapa versi. Berikut pola eksplisit yang memilih waktu tunggu yang disarankan server jika ada, jika tidak exponential backoff:

import time
from openai import OpenAI
from openai import RateLimitError, APIStatusError

client = OpenAI(base_url="https://api.anoman.io/v1", api_key="anm-sk-...")

def call_with_backoff(messages, model="gpt-4o-mini", max_attempts=5):
    for attempt in range(max_attempts):
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except (RateLimitError, APIStatusError) as e:
            if attempt == max_attempts - 1:
                raise
            # Retry-After in seconds (server-suggested wait)
            retry_after = float(e.response.headers.get("retry-after", 0))
            # Fall back to exponential backoff with jitter
            sleep = retry_after or min(2 ** attempt, 30)
            time.sleep(sleep)

Inflight cap

Concurrent vs rate

Kedua kode 429 memiliki arti yang berbeda:

  • rate_limit_exceeded — Anda memicu burst guard RPM/TPM. Retry setelah jendela bergulir.
  • concurrent_limit_exceeded — terlalu banyak in-flight pada saat bersamaan. Kurangi konkurensi atau tunggu satu selesai.

Inflight cap independen terhadap RPM/TPM. Akun Pro pada 120 RPM dengan inflight cap 25 dapat menembakkan 120 request sekuensial per menit atau hingga 25 bersamaan — tetapi tidak 25 bersamaan untuk panggilan 5 detik (itu akan membuat RPM melonjak jauh di atas 120).

Kenapa keduanya? RPM melindungi layanan upstream dari volume total. Inflight cap melindungi budget latensi Anda sendiri — terlalu banyak request in-flight yang menunggu di antrean upstream membuat semua orang lebih lambat. Inflight lebih rendah = tail latency yang dapat diprediksi.

Token pack

Beli token ekstra saat Anda butuh headroom

Pada flat tier, ketika sebuah model tier class mendekati token cap-nya, beli token pack untuk menambah headroom sementara ke class itu selama durasi tetap. Ini adalah tambahan aditif ke cap class tersebut — bukan perubahan pada burst guard RPM/TPM Anda. Biaya dipotong dari saldo prabayar Anda.

import requests

# Token packs add temporary headroom to a model tier class's token cap.
# Cost is deducted from prepaid balance. Pricing varies per tier — see the
# token-pack pricing table in your dashboard.
response = requests.post(
    "https://api.anoman.io/anoman/v1/burst/activate",
    headers={"Authorization": "Bearer anm-sk-..."},
    json={"model_tier_class": "premium", "extra_tokens": 5_000_000, "duration_hours": 24},
)
response.raise_for_status()
print(response.json())
# {
#   "active": true,
#   "model_tier_class": "premium",
#   "extra_tokens": 5000000,
#   "expires_at": 1740086400,
#   "cost_usd": "7.00",
#   "balance_remaining_usd": "23.00"
# }

PAYG dan Enterprise tidak butuh token pack — mereka memang tidak memiliki token cap keras sejak awal.

Pantau token cap Anda secara real time.

Dashboard Rate Limits menampilkan penggunaan token per-class dan burst guard RPM/TPM dengan sparkline.