Разделы документации
Лимиты и квоты
Сколько запросов и токенов в минуту допускает один ключ, что означает 429 и как правильно повторять запрос.
Лимиты считаются отдельно по каждому ключу и применяются к запросам на https://api.librachat.kz/v1. Ограничений два: сколько запросов вы делаете в минуту и сколько токенов в минуту прокачиваете. Плюс потолок на длину одного ответа.
| Ограничение | Значение | Область действия |
|---|---|---|
| Запросов в минуту | 120 | на один ключ |
| Токенов в минуту | 1 000 000 | на один ключ |
| max_tokens в одном запросе | 1 … 32 000 | на запрос |
| Контекст модели | 1 000 000 токенов | на запрос |
Ключей на аккаунт может быть до 10 активных. Лимиты на каждый ключ свои, а вот баланс общий на весь аккаунт — разнести нагрузку по ключам можно, разделить деньги нельзя.
Что происходит при превышении
Сервис отвечает кодом 429 и ошибкой rate_limited. Текст ошибки — на русском, тело приходит с Content-Type: application/json; charset=utf-8.
429 — это не отказ навсегда. Запрос просто не был обработан: снизьте темп и повторите его через паузу. Отдельно держите в голове 402 insufficient_balance — это уже про баланс, а не про темп, и повторы тут не помогут. Проверка баланса идёт перед запросом, списание — после ответа, по факту.
Экспоненциальная пауза
Простое правило: после каждой неудачи удваивайте паузу и добавляйте случайную добавку. Так вы не создаёте волну одновременных повторов от всех своих процессов. Начинайте с 1 секунды, ограничьте потолок несколькими десятками секунд и числом попыток.
Как не упираться в лимит
- Ставьте разумный max_tokens. 32 000 — это потолок, а не значение по умолчанию: чем короче ответ, тем меньше токенов в минуту вы тратите.
- Не шлите запросы параллельно без ограничителя. 120 запросов в минуту — это в среднем два в секунду; пул из 50 потоков выдаст 429 на первой же секунде.
- Следите за длиной истории сообщений. В минутный лимит токенов входит и то, что вы отправляете, а не только ответ.
- Ставьте очередь между своим приложением и API, если нагрузка неровная: всплески лучше растягивать, чем ловить отказы.
Проверка ответа с curl
Флаг -i покажет код статуса — так вы сразу отличите 429 от 402 и 401.
Грабли
- Часть параметров запроса игнорируется молча — среди них n, stop, top_p, seed, response_format, presence_penalty, frequency_penalty, logprobs, user, tools и tool_choice. Ошибки не будет, но и эффекта тоже: сократить расход через n или stop не получится.
- Картинки в messages (части image_url) молча отбрасываются. Вы оплатите текстовую часть запроса, а изображение просто не дойдёт.
- В стриминге у последнего фрагмента choices пустой, а usage заполнен. В Python обязательна проверка if chunk.choices, иначе на финальном фрагменте будет IndexError — и вы потеряете как раз те цифры, по которым считаете расход токенов.
- В PowerShell русские тексты ошибок легко превращаются в кракозябры. Перед запросом выполните [Console]::OutputEncoding = [Text.Encoding]::UTF8, иначе сообщение про 429 будет нечитаемым.