Текст и векторы
Текст, функции и JSON
Поддерживаемый chat completions и клиент OpenAI.
В POST /v1/chat/completions передайте model, messages и при необходимости max_tokens (1–32768, по умолчанию 2048), temperature (0–2), stream. Доступные параметры также зависят от подтверждённых возможностей модели.
import OpenAI from 'openai';
const client = new OpenAI({apiKey: process.env.KVANTORA_API_KEY,
baseURL: process.env.KVANTORA_BASE_URL + '/v1', maxRetries: 0});
const answer = await client.chat.completions.create({
model: 'PUBLIC_API_ID',
messages: [{role: 'user', content: 'Ответь кратко'}], max_tokens: 256
}, {headers: {'Idempotency-Key': process.env.REQUEST_ID}});
if (answer.object === 'chat.completion') {
console.log(answer.choices[0]?.message.content);
} else {
console.log('Обработка ещё не завершена:', answer);
}Function tools описываются через type=function и function.name/description/parameters. До 128 функций, уникальные имена из букв ASCII, цифр, дефиса и подчёркивания, длина 1–64. tool_choice: auto, none, required или имя объявленной функции. Вызываемый инструмент выполняет ваше приложение; Kvantora не запускает произвольный код функции.
Parameters: ограниченная JSON Schema глубиной до 6, корень object. Допустимы type, description, properties, required, additionalProperties, items, enum. Ссылки, внешние схемы, pattern и combinators отклоняются. Ответ инструмента передавайте сообщением role=tool с tool_call_id. content=null у assistant допустим только с tool_calls.
Для JSON-объекта используйте response_format={"type":"json_object"}. Успешный результат проверяется как JSON-объект. При ошибке после отправки исход уточняется; отсутствие валидного JSON само по себе не означает освобождение резерва.
Изображения на входе
POST /v1/chat/completions принимает изображения во входных сообщениях пользователя (vision). Сообщение role=user может быть массивом частей {"type":"text","text":"..."} и {"type":"image_url","image_url":{"url":"kvantora-file:FILE_ID"}}; detail необязателен: auto, low или high.
Изображение передаётся только ссылкой kvantora-file:<id> на ваш готовый файл. Ссылки https:// на внешние адреса и data-URL (data:image/png;base64,...) не принимаются: запрос с ними отклоняется до резерва денег. Так каждая картинка проходит проверку типа, размера и антивирус до отправки модели, а читать файл может только его владелец.
- Загрузите файл по инструкции:
POST /v1/files,PUTбайтов,POST /v1/files/ID/complete. Подойдёт PNG (image/png), JPEG (image/jpeg) или WebP (image/webp) до 10 МиБ. - Дождитесь
status=ready(файл прошёл проверку) и возьмите егоid. - Передайте
kvantora-file:<id>в частиimage_url.
const answer = await client.chat.completions.create({
model: 'PUBLIC_API_ID', // у модели chat_features.image_input = true
messages: [{role: 'user', content: [
{type: 'text', text: 'Что изображено на картинке?'},
{type: 'image_url', image_url: {url: `kvantora-file:${process.env.FILE_ID}`, detail: 'auto'}}
]}], max_tokens: 256
}, {headers: {'Idempotency-Key': process.env.REQUEST_ID}});Лимиты: в одном сообщении до 9 частей (текст и изображения вместе), во всём запросе не более 32 изображений. Изображения принимает только chat/completions; POST /v1/responses и POST /v1/messages работают с текстом.
Модель должна принимать изображения: смотрите chat_features.image_input в каталоге. Конкретный список меняется вместе с каталогом, поэтому проверяйте поле перед отправкой; иначе ответ 400 unsupported_parameter.
Файлы проверяются до резерва денег: неподходящий тип или размер — 400 invalid_input_file, чужой или отсутствующий файл — 404 file_not_found, ещё не прошедший проверку — 409 file_not_ready, с истёкшим сроком хранения — 410 file_expired. Изображение отправляется модели заново в каждом запросе диалога. Для резерва оно учитывается как 6 000 входных токенов, а списываются фактические токены. Цену до запуска называет POST /v1/chat/quote с тем же телом.
Рассуждения
reasoning_effort принимает none, minimal, low, medium, high, xhigh или max, но только значения из chat_features.reasoning_efforts выбранной модели. Недопустимое значение отклоняется до резерва с 400 unsupported_parameter.
Оценка и предел цены
POST /v1/chat/quote принимает то же тело, что и /v1/chat/completions, и возвращает оценку резерва без вызова модели и списания; см. оплату. Поле max_cost_microrub ограничивает допустимую оценку: если она выше, запрос отклоняется с 409 quote_exceeds_limit до резервирования.
В примере PUBLIC_API_ID — место для public_api_id из каталога, а не имя существующей модели. Выбирайте модель с доступной операцией.