Лимиты API
Какие пределы действуют на ключ, как читать заголовки с остатком запросов, когда придёт 429 и как обойтись без потери запросов.
Сводка
| Что ограничено | Значение | При превышении |
|---|---|---|
| Запросы в минуту на ключ | По умолчанию 60, свой предел ключа не выше общего потолка (по умолчанию 600) | 429 rate_limit_exceeded |
| Одновременные запросы на ключ | По умолчанию 10 | 429 too_many_concurrent_requests |
| Расход ключа за сутки и за месяц | Задаётся при создании ключа, без значения ограничения нет | 429 key_day_cap_reached, key_month_cap_reached |
| Задачи в работе на ключ | По умолчанию 20 | 429 too_many_active_tasks |
| Время жизни задачи | 100 минут | Задача останавливается со статусом failed и кодом task_timeout |
| Ожидание результата в адресах формы OpenAI | Около 100 секунд у картинок и озвучки, 280 секунд у расшифровки | Ответ 202 с задачей, дальше результат забирают через GET /v1/tasks/{id} |
| Хранение готовых файлов задачи | 7 суток | Файлы стираются, в задаче остаётся expired: true |
| Входная картинка в задаче | 10 МБ | 400 invalid_image |
| Неверные ключи с одного адреса | 20 за 15 минут | 429 too_many_failed_attempts |
| Размер тела запроса | 12 МБ | 413 request_too_large |
| Сообщения, функции, стоп-строки | до 2000 сообщений, 128 функций (до 256 КБ описаний), 4 строки по 64 знака | 400 invalid_parameter |
| Длина ответа | 8192 токена по умолчанию (16384 у моделей с рассуждениями), не больше 65536 | Ответ обрывается, finish_reason равен length |
| Время ожидания ответа | 280 секунд без потока, 900 секунд с потоком | 504 upstream_timeout, в потоке кадр с ошибкой |
Значения по умолчанию задаёт epicai и может их менять, поэтому о своём ключе читайте ответ GET /v1/account. Он сообщает действующий предел запросов и потолки.
Запросы в минуту
Окно фиксированное и совпадает с календарной минутой часов сервера. Счётчик обнуляется в начале каждой минуты. Считается каждый запрос, который прошёл проверку ключа, в том числе завершившийся ошибкой 400 и запрос списка моделей. Остаток приходит в заголовках всех ответов, даже отказов. Опрос задачи GET /v1/tasks/{id} тоже запрос, поэтому спрашивайте не чаще, чем подсказывает его заголовок Retry-After, то есть раз в 3 секунды.
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 24s
Значения означают предел минуты, число оставшихся запросов и время до обнуления счётчика. При превышении приходит 429 с заголовком Retry-After, он содержит число секунд до начала следующей минуты.
Одновременные запросы
Запрос считается идущим, пока не получен ответ целиком или не закрыт поток. Если у ключа уже идёт 10 запросов, одиннадцатый получает 429 с Retry-After: 3. Для пакетной обработки держите число параллельных потоков ниже этого предела.
Потолки расхода
Суточный потолок считается по московскому времени и обнуляется в полночь по Москве. Месячный считается с первого числа календарного месяца, тоже по Москве. Оба задаются в TOK при создании ключа. Суточный потолок не бывает больше месячного.
Перед запросом epicai складывает расход ключа за период с оценкой этого запроса (входные токены плюс максимум ответа) и сравнивает с потолком. Отказ возможен и тогда, когда потолок ещё не достигнут, но оценка его пробивает. Помогает меньший max_tokens. Для суточного потолка в Retry-After приходит число секунд до полуночи, для месячного фиксированный час. Запросы, идущие одновременно, проверяются независимо, поэтому вместе они могут превысить потолок на сумму своих оценок. У задач с картинками, видео и другими медиа цена известна заранее, и в потолок складывается она, а не оценка.
Как вести себя при 429
Ждите столько, сколько названо в Retry-After, и повторяйте запрос. Библиотеки OpenAI делают это сами. Для потолков расхода повторять до сброса счётчика бесполезно, лучше остановить задачу и сообщить о достижении потолка. После 20 неверных ключей с одного адреса следующие запросы с этого адреса отклоняются независимо от ключа, пока не истечёт Retry-After.
Не нашли ответ?
Посмотрите частые вопросы или напишите в поддержку.