Limit katmanları
Her istekte şu kapılar sırayla kontrol edilir. Güncel sayısal değerler plana göre değişir; paneldeki plan tablosu ve Models sayfasındaki model limitleri esas alınır, bu sayfadaki sayılar kuralı anlatır.
| Katman | Ne yapar |
|---|---|
| Model kotası | Model başına günlük / haftalık / aylık token pencereleri. Pencere dolunca 429. |
| Global kota | Hesap genelinde aynı üç pencere. Bazı modeller muaf tutulabilir. |
| RPM | Dakika başına istek sayısı. Ücretli planlarda pencere bitimi beklenebilir, ücretsiz planda anında 429. |
| Eşzamanlılık | Kullanıcı başına aynı anda çalışan istek: ücretsiz 4, ücretli 8. |
| TPM pacing | Deployment token kapasitesi; aşıldığında istek kısa süre bekletilir veya 429 alır. |
Öncelik sırası: kullanıcı özel limiti > plan limiti > site varsayılanı. Model bazlı özel limit tanımlıysa model varsayılanını ezer. Limit değeri 0 ise o pencere limitsiz demektir.
Hata zarfı
Tüm API hataları aynı zarfta döner:
{
"error": {
"message": "Açıklama",
"type": "invalid_request_error",
"code": 429,
"retry_after": 37,
"reason": "noxery_rpm"
}
}retry_after saniye cinsindendir ve yalnızca 429'larda bulunur. reason hangi kapının tetiklendiğini söyler: noxery_rpm, noxery_model_quota, noxery_global_quota, user_slot, upstream.
| Kod | Anlam | İlk kontrol |
|---|---|---|
| 400 | Geçersiz istek (messages yok, bozuk input, eşleşmemiş tool çifti, desteklenmeyen parametre değeri). | JSON gövdesi ve zorunlu alanlar. |
| 401 | Eksik veya geçersiz key. | Bearer header ve key durumu. |
| 403 | Erişim engeli: askıdaki hesap, kapalı API erişimi, doğrulanmamış e-posta veya abonelik gereksinimi. | Hesap durumu ve plan. |
| 404 | Bilinmeyen model veya yol. | GET /v1/models ile ID'yi doğrula. |
| 429 | Limit veya kota. reason ve Retry-After'a uy. | Bekle, sonra tek seferlik tekrar dene. |
| 502 / 503 | Geçici upstream veya servis hatası. | Süre bütçeli backoff ile tekrar dene. |
429'da ne yapmalı
Yanıt header'ları: her 429'da Retry-After (saniye) bulunur. RPM ve kota kapılarında ek olarak X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset header'ları gelir. Aynı üçlü başarılı (200) Chat ve Responses yanıtlarında da gelir: Remaining bitmeden istek atmaya devam et, Reset dakika penceresinin bitimine kalan saniyedir. Kural: retry_after dolmadan tekrar deneme, en fazla 2-3 deneme yap, aralara jitter ekle. reason kota ise (noxery_model_quota / noxery_global_quota) pencere bitmeden tekrar denemek işe yaramaz; isteği ertele veya daha sakin bir modele yönlendir. Streaming isteğini otomatik tekrarlamak yinelenen çıktı üretebilir.
import random
import time
import requests
for attempt in range(3):
r = requests.post(url, headers=headers, json=payload)
if r.status_code != 429:
break
err = r.json().get("error", {})
wait = int(err.get("retry_after", 5)) + random.uniform(0, 1)
time.sleep(wait)
else:
raise RuntimeError("limit asildi: " + r.text)