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

Лимиты

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

Открыть как Markdown

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

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

ЗапросыТокеныОдновременные стримы
Ключ20 в секунду500 000 в минуту16
Организация200 в секунду5 000 000 в минутусвоего потолка нет

Вызов меряется сначала по потолкам организации, потом по потолкам ключа. Значение по умолчанию для организации — десять ключей, отсюда и её потолки темпа; выпуск одиннадцатого ключа их не поднимает.

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

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

Сколько стримов открыто одновременно

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

Занимают место только стримы. Обычный нестримовый вызов не берёт его и не освобождает, сколько бы времени он ни занял, а подсчёт токенов не берёт вообще ничего.

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

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

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

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

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

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

Потолок запросов можно считать по мере их прихода. Потолок токенов — нет: сколько будет стоить вызов, неизвестно, пока на него не ответили.

Поэтому платформа оценивает токены вызова до отправки наверх и относит на минуту оценку, а затем сверяет её с фактическим потреблением, о котором сообщает ответ.

Когда сверка доходит, в минуте лежит настоящая величина, а не догадка, и серия вызовов, оказавшихся заметно дешевле своих оценок, оставляет место за собой.

Два случая заканчиваются иначе, и оба сделаны намеренно:

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

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

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

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

Как считать токены заранее

Потолок токенов упирается в то, что стоимость вызова неизвестна, пока на него не ответили. Одну половину этого можно узнать до отправки: подсчёт токенов на диалекте Messages принимает подмножество членов обычного вызова — model, messages, system, tools, tool_choice, thinking, metadata и context_management — и отвечает детерминированной локальной оценкой входных токенов. Члены, которые описывают генерацию, а не вход, эта операция отвергает: max_tokens, stream, output_config, stop_sequences, temperature и top_p.

Он не обращается к провайдеру, не создаёт ни запроса, ни резерва, не трогает баланса и не тратит квоту темпа. Поэтому его можно ставить перед крупным запросом, не платя за это ни деньгами, ни местом под потолком.

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

Как это вызвать →

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

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