Перейти к содержимомуKumoДокументация
Шлюз

Лимиты

Потолки, по которым меряется вызов, что получает упёршийся в потолок вызов и как просят о более высоком.

Открыть как Markdown

С чем выпускается ключ

Ключ выпускается с двумя потолками, и вызов обязан быть ниже обоих. Чтобы их получить, ничего не включают, в запросе о них не просят, и у только что выпущенного ключа они уже есть.

Запросы
20 в секунду
Токены
500 000 в минуту

У организации та же пара потолков, и вызов меряется сначала по организации, потом по ключу — умолчание организации это десять ключей, то есть 200 запросов в секунду и 5 000 000 токенов в минуту. Это не сумма того, что разрешено ключам: выпуск одиннадцатого ключа его не поднимает. Поэтому вызов может уверенно укладываться в оба потолка своего ключа и всё равно получить отказ по любому из организационных, из-за трафика других ключей: тихий ключ упирается в секунду организации так же легко, как в её минуту.

Считаются потолки порознь и по разным часам — один по секунде, другой по минуте, — поэтому нагрузка может свободно укладываться в потолок запросов и всё равно выходить за потолок токенов. Именно так ведут себя несколько очень крупных вызовов в секунду, и именно это застаёт врасплох: со стороны счётчика запросов всё в порядке.

Что происходит на потолке

Вызов, который вышел бы за любой из потолков, отклоняется, а не встаёт в очередь: статус — 429, а type в конверте — rate_limit_error. Отказ решается до того, как вызов доходит до провайдера, поэтому наверху его не видят.

Потолок запросов можно считать по мере их прихода. Потолок токенов — нет: сколько будет стоить вызов, неизвестно, пока на него не ответили. Поэтому платформа оценивает токены вызова до отправки наверх и относит на минуту оценку, а затем сверяет её с фактическим потреблением, о котором сообщает ответ. Там, где сверка доходит, в минуте лежит настоящая величина, а не догадка, и серия вызовов, оказавшихся заметно дешевле своих оценок, оставляет место за собой. Два случая заканчиваются иначе, и оба сделаны намеренно. Коррекция наводится ровно на ту минуту, на которую вызов был отнесён, поэтому, когда последующий вызов уже увёл счётчик в новую минуту, исправлять нечего: та минута больше не то, на чём стоит счётчик. Уводит его не истечение времени, а именно следующий вызов. И два счётчика уходят вперёд независимо, так что коррекция может дойти до одного и не найти ничего на другом. Оценка действительно остаётся во втором случае: операция, которая не сообщает токенов вовсе, остаётся с тем, что на неё отнесли: генерация изображений считается в изображениях, а не в токенах, и коррекция к нулю вернула бы всю оценку обратно — эта поверхность перестала бы стоить хоть что-то против потолка.

Стриминг арифметику не меняет: начавшийся поток — это уже посчитанный вызов. Подсчёт токенов в неё не входит вовсе: эта операция не зовёт провайдера и не тратит квоту — тем она и удобна перед крупным запросом.

Перед повтором на 429 отступайте, удлиняйте паузу с каждой попыткой и ограничивайте их число.

Как выглядит отказ →

Как просить о большем

Повышение — это разговор, а не настройка. Ни один из потолков не правится в консоли, и ни один член запроса не просит о более высоком: напишите в поддержку, описав трафик, который нужно пропускать, — его форму, а не только пик, — и потолки на вашем ключе поднимут.