Границы версии
Что намеренно не сделано, и почему именно так. Каждая граница — решение, а не недоделка: там, где честного ответа нет, возвращается отказ, а не оценка.
Операции¶
- Count Tokens для OpenAI —
501. Нативного эндпоинта нет, а придуманное число здесь хуже отказа: на него бы заложились. - 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 с подсказкой про префикс.
Модель ведёт только к одному провайдеру — ограничение базы. Две записи на одну модель различаются префиксом в запросе, а не таблицей.