Что поддерживается
Стриминг в 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. Это «не сейчас», а не «никогда»: повторите его, когда предыдущие завершатся.