Лимиты и повторы
Лимиты аккаунта и отдельных ключей, что вы получите, когда заняты все линии, и как правильно повторять запросы и настраивать таймауты.
По умолчанию лимита частоты нет
По умолчанию NezhaGate не ограничивает частоту запросов аккаунта, а мощности растут вместе с вашей нагрузкой. Чтобы ограничить расход, задайте каждому ключу собственные лимиты.
Лимиты отдельного ключа
Задаются для каждого ключа на странице API Keys в консоли; пустое значение или 0 означает «без ограничений»:
| Настройка | Что делает | При превышении |
|---|---|---|
| Запросов в минуту | Максимальное число запросов, которые ключ может отправить за минуту. | 429 rate_limit_exceeded |
| Дневной бюджет | Максимальная сумма, которую ключ может потратить за сутки (по UTC), в долларах США. | 402 insufficient_quota |
| Общий лимит | Максимальная сумма, которую ключ может потратить за всё время, в долларах США; удобно для автоматизации, которая не должна выйти из-под контроля. | 402 insufficient_quota |
| Список разрешённых моделей | Ключ может вызывать только перечисленные модели. | 403 permission_denied |
| Список разрешённых IP | Принимаются только запросы с перечисленных IP или диапазонов адресов. | 403 permission_denied |
Когда заняты все линии
- Каждую модель обслуживают несколько линий, и шлюз распределяет запросы между ними. Если все линии модели одновременно загружены до предела, вы получите 429; OpenAI-совместимые эндпоинты добавляют заголовок
Retry-Afterс числом секунд, которое нужно подождать. - Задачи изображений и видео при нагрузке не отклоняются: они ждут в очереди (
status—queued, с позицией в очереди и ожидаемым временем ожидания) и запускаются сами. - У моделей, бесплатных по акции, есть ещё дневная квота вызовов; когда она исчерпана, вы получаете 429, пока квота не обнулится в 00:00 UTC.
Когда повторять запрос
| HTTP | Что делать |
|---|---|
| 429 | Подождите столько секунд, сколько указано в заголовке Retry-After, и повторите; если заголовка нет, делайте паузы 1, 2, затем 4 секунды. |
| 500 / 502 / 503 / 504 | Повторяйте с экспоненциальной задержкой (1, 2, 4, 8 секунд плюс небольшой случайный разброс); обычно хватает 3–5 попыток. Такие ошибки не оплачиваются. |
| Другие 4xx | Повтор без изменений не поможет: сначала исправьте запрос согласно error.code (параметры, модель, ключ, баланс). |
| Сетевая ошибка / таймаут | Запрос к чату можно просто повторить. Для изображений и видео сначала проверьте задачу в журнале запросов, а потом решайте, отправлять ли её снова. |
import random
import time
import requests
def post_with_retry(url, headers, payload, tries=5):
for attempt in range(tries):
r = requests.post(url, headers=headers, json=payload, timeout=600)
if r.status_code == 429:
time.sleep(float(r.headers.get("Retry-After", 2 ** attempt)))
continue
if r.status_code >= 500:
time.sleep(2 ** attempt + random.random()) # 1, 2, 4, 8 s ... plus jitter
continue
return r # 2xx, or a 4xx to fix in the request
return rТаймауты
- Один непотоковый запрос может выполняться около 10 минут, после чего пограничный шлюз его обрывает (HTTP 524). Для длинных ответов и моделей с размышлениями используйте
stream: true. - Выставьте таймаут клиента не меньше 10 минут, иначе ваша сторона прервёт ожидание раньше, чем придёт длинный ответ.
- Изображения и видео — асинхронные задачи: запрос на отправку возвращается быстро, поэтому это ограничение на них не распространяется.
Нужно больше мощностей
Если нужна стабильно высокая параллельность, заранее сообщите нам ожидаемый объём в группе Telegram или через поддержку — мы расширим мощности под него.