Лимит одновременных вызовов — не больше N вызовов модели сразу

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

Доступно на Pro и выше

5 мин чтения

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

Зачем лимит

До вызова Slen знает два числа. Оценка — сколько вызов, скорее всего, будет стоить; она учится на истории узла и верна в среднем, а не для каждого вызова. Потолок — самое большее, сколько может стоить один вызов, по лимитам узла и ценам каталога, и он верен для каждого вызова.

Бюджет проверяется по оценкам и резервам. Лимит считает вызовы. Если у ключа в полёте не больше N вызовов, худший случай этого ключа в любой момент — N потолков вызова, как бы ни ошиблась оценка. Панель узла называет эту сумму: при пределе 3 и потолке $0.42 худший случай ключа — $1.26.

Лимит даёт и больше:

  • один шумный клиент не забирает все вызовы, которые позволяет общий ключ провайдера, и остальные клиенты продолжают получать ответы;

  • зациклившийся клиент после короткой очереди упирается в отказ, а не в счёт;

  • вызовы, которые ждут, ничего не стоят, пока ждут: до узла модели ничего не резервируется.

Считаются только вызовы. Деньги, которые у ключа в полёте, своим лимитом не ограничиваются.

Лимит и бюджет

БюджетЛимит одновременных вызовов
Считаетденьги, зарезервированные и списанные за периодвызовы, которые идут сейчас
Сверх неговызов отклоняетсявызов ждёт своей очереди или получает отказ, когда прождал
Кончаетсяс периодом или никогдав момент, когда закончился вызов
Задаётсяна проект или организацию, операциюна узел флоу, по ключу

Они работают вместе: бюджет ограничивает, сколько может потратить период, лимит — сколько может быть под риском одновременно. Бюджет вида Одновременные резервы (снято) раньше считал открытые резервы; он больше не создаётся, а его архивные бюджеты не восстанавливаются.

Добавить лимит

  1. Откройте флоу в конструкторе и поставьте Очередь перед моделью, которую он должен охранять, — до Резерв бюджета, если он есть во флоу. Новый узел уже лимит.

  2. Выберите Считать по: Клиент (клиент в SDK, user_id контекста), Этот флоу, Весь проект или Поле запроса и путь к нему.

  3. Задайте Не больше (вызовов сразу), а в Когда занято выберите Ждать в очереди с Ждать не дольше (секунды) или Сразу отказать.

  4. Проведите Занято в отдельный ответ — Отклонить запрос с кодом, который знает ваше приложение, или модель подешевле за своим лимитом.

  5. Опубликуйте. Лимит есть на тарифах от Pro; черновик может содержать его на любом тарифе.

Шаблон Не больше 3 вызовов на клиента — это такой флоу — Шаблоны AI-флоу.

Какой вызов держит место

Узел охраняет первую AI-модель, до которой доходит путь от него. Выполнение занимает место, когда выходит из узла, и отдаёт его, когда этот вызов закончился, — через какой бы порт вызов ни вышел, — и когда выполнение закрыто. Место, потерянное воркером, возвращается по его аренде. Между узлом и моделью могут стоять узлы денежной цепочки, Условие, Преобразование, Заметка в трассировке, Поиск в кеше и другие лимиты; ожидание там — задержка, Требуется одобрение — отклоняется при публикации флоу, потому что выполнение ждало бы с занятым местом.

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

Лимиты подряд

Один узел считает по одному ключу. Для двух поставьте два узла друг за другом: «клиент, не больше 2», затем «этот флоу, не больше 20», затем модель. Шумный клиент займёт не больше 2 мест из 20, и отдельный планировщик не нужен.

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

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

Ожидание вместо отказа

Вызов сверх лимита не получает отказ сразу. Запрос, выполнение которого ждёт места, получает ответ 202, waiting_on типа queue_slot и retry_after_seconds, равный 2: ожидание в SDK читает его снова, пока не появится результат, а место, освобождённое другим вызовом, будит выполнение за секунды. Срок ожидания соблюдается с точностью до минуты. По одному ключу ждут не больше 100 выполнений; следующее сразу уходит через Занято — Паузы, очереди и возобновление.

Выполнение, которое уходит через Занято без ребра из него, заканчивается с 402 concurrency_limit_exceeded, а детали ошибки несут выход узла — почему, ключ и его счётчики:

JSON
{ "reason": "queue_full", "key": "acme_42", "limit": 3, "in_flight": 3, "waiting": 100, "waited_seconds": 0 }

Следить за лимитами

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

  • Раздел Сейчас узла перечисляет его самые загруженные ключи — по меткам, никогда по значению поля — с их вызовами в полёте, ждущими выполнениями и самым долгим ожиданием. API отвечает тем же на GET /v1/flows/{id}/limits — Флоу.

  • Трассировка выполнения называет каждый шаг его места: slot_acquired, slot_waiting, slot_granted, slot_released, slot_busy — Разбор выполнения.

Что читать дальше

  • Очередь — все настройки, выход через каждый порт и проверки узла.

  • Бюджеты — потолок того, что может потратить период.

  • Тарифы и лимиты — тарифы, на которых есть лимит.