Содержание

Границы версии

Что намеренно не сделано, и почему именно так. Каждая граница — решение, а не недоделка: там, где честного ответа нет, возвращается отказ, а не оценка.

Операции

  • Count Tokens для OpenAI501. Нативного эндпоинта нет, а придуманное число здесь хуже отказа: на него бы заложились.
  • Google — генерация, эмбеддинги, подсчёт токенов. Speech, транскрипция и картинки у Google — отдельные API со своей формой запроса, не подключены.
  • Responses API — полная точность при passthrough OpenAI→OpenAI. При трансляции из чат-провайдеров события лайфцикла синтезируются.
  • Эндпоинты Ollama — только POST /api/show, заглушкой. Остальные /api/* не реализованы.

Картинки

Image Edit и Variation принимают исходное изображение только инлайном (base64 или data-URI).

Гейт намеренно не ходит по URL из запроса: это был бы SSRF, которым управляет клиент. Внутренняя сеть развёртывания — не то, что стоит открывать полем в JSON.

Логи

  • Тело потокового ответа не сохраняется — буферизация сломала бы выдачу. Токены, стоимость и вызовы инструментов при этом считаются полностью, по служебным полям потока.
  • Диалог не разбирается для потоковых ответов — тела нет, разбирать нечего. Запрос при этом виден.
  • Тела не-JSON не сохраняются — multipart-загрузка это байты аудио или картинки.
  • Тело больше max_logged_body_bytes не сохраняется (по умолчанию 256 КиБ). Всё остальное о запросе записывается.

Тарификация

  • Лимит tpm проверяется по уже потраченному за минуту, поэтому один запрос может его превысить: стоимость запроса неизвестна до его завершения.
  • Длительность аудио читается из заголовка контейнера. Контейнер, который её не сообщает, оставляет её нулём — такой запрос тарифицируется бесплатно, и панель показывает такие модели отдельным предупреждением (Цены).
  • MP3 без VBR-заголовка — единственное место, где длительность приблизительная. Для постоянного битрейта она точная; для переменного без заголовка обход всех кадров двухчасовой записи стоит дороже ответа, а отказ оставил бы распространённый файл неоплаченным.
  • Компандированные кодеки (µ-law, A-law) как аудио не измеряются: их байт на секунду в шесть раз меньше линейного PCM, и счёт был бы занижен во столько же. Лучше ноль, который видно.
  • Ступени по контексту не применяются к аудио — у аудио нет контекста, который растёт.

Наблюдаемость

Метрик Prometheus нет. Есть структурные логи и счётчики в /healthz: генерация конфига, записано и потеряно строк журнала.

Маршрутизация

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

Это удобство для одно-провайдерного развёртывания; с двумя провайдерами неизвестная модель получает честный 404 с подсказкой про префикс.

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