Флоктор

Что поддерживается

Стриминг в API Флоктора, вызов функций, повтор запроса по Idempotency-Key, ограничение размера тела и число одновременных запросов.

Флоктор передаёт ваш запрос модели почти без изменений. На этой странице собраны все места, где поведение отличается от прямого обращения к Anthropic или OpenAI.

Работает ли стриминг

Да, на всех трёх эндпоинтах. Обычный "stream": true, как в исходном протоколе.

Одна поправка касается /v1/chat/completions: в потоковый запрос всегда подставляется stream_options.include_usage, даже если вы его не просили. Поэтому последним событием потока приходит блок с расходом токенов. По нему считается стоимость запроса. На работу клиента это не влияет: лишний блок в конце потока клиенты игнорируют.

Какие инструменты можно использовать

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

Серверные инструменты, которые модель выполняет на своей стороне (веб-поиск, исполнение кода, работа с файлами), недоступны. Запрос с таким инструментом отклоняется сразу, с кодом 400 и объяснением, какой именно инструмент не прошёл. То же касается поля web_search_options в OpenAI-совместимой части.

На практике это значит:

  • Anthropic. У элемента tools либо нет поля type, либо там "custom". Любое другое значение — отказ.
  • OpenAI. В tools допустимы "function" и "custom".

Отказ приходит до того, как запрос уйдёт модели, поэтому он ничего не стоит.

Как защититься от двойного списания

Передайте заголовок Idempotency-Key. Повторная отправка того же запроса с тем же ключом не выполнится и не спишет денег второй раз.

Ключ привязан к вашему API-ключу и к протоколу, а тело запроса сверяется по хешу. Возможны две ситуации:

  • Тело отличается от первого запроса с этим ключом — 409, код idempotency_conflict.
  • Тело совпадает — 409 с кодом, который говорит, чем закончился первый запрос: idempotency_request_in_progress, idempotency_result_already_completed, idempotency_result_failed, idempotency_result_cancelled или idempotency_result_indeterminate.

Повтор не возвращает прежний ответ. Это защита от двойного списания, а не кеш. Ответ модели нужно сохранять у себя при первом запросе: второй раз взять его будет неоткуда.

Какого размера может быть запрос

Тело запроса — до 32 МиБ. Больше — 413, причём отказ приходит по заявленному Content-Length, не дожидаясь загрузки всего тела.

Сколько запросов можно отправлять одновременно

Число одновременно выполняющихся запросов ограничено, и предел зависит от вашего тарифа. Запрос сверх предела получает 429 с кодом concurrency_exceeded. Это «не сейчас», а не «никогда»: повторите его, когда предыдущие завершатся.

На этой странице