Схемы запросов и ответов LLMSTORE очень похожи на OpenAI Chat API, с несколькими небольшими отличиями. На верхнем уровне LLMSTORE нормализует схему для всех моделей и провайдеров, поэтому достаточно выучить одну.

Спецификация OpenAPI

API LLMSTORE полностью описан спецификацией OpenAPI. Интерактивный справочник всех эндпоинтов, сгенерированный из неё, — в разделе Эндпоинты этой документации. Саму спецификацию (openapi.yaml) можно использовать с инструментами вроде Swagger UI, Postman или любым OpenAPI-совместимым генератором клиентских библиотек.

Запросы

Формат запроса completions

Ниже — схема запроса в виде TypeScript-типа. Это тело вашего POST-запроса к эндпоинту /v1/chat/completions (пример см. в быстром старте). Полный список параметров — на странице Параметры.

Структурированные ответы

Параметр response_format позволяет принудить модель к структурированному JSON-ответу. LLMSTORE поддерживает два режима:
  • { type: 'json_object' }: базовый JSON-режим — модель вернёт валидный JSON
  • { type: 'json_schema', json_schema: { ... } }: строгий режим схемы — модель вернёт JSON, точно соответствующий вашей схеме
Подробности и примеры — на странице Структурированные ответы. Модели с поддержкой структурированных ответов можно отфильтровать по supported_parameters в ответе эндпоинта GET /v1/models.

Плагины

Плагины LLMSTORE расширяют возможности моделей: веб-поиск, обработка PDF, починка ответов, сжатие контекста. Плагины включаются массивом plugins в запросе:
Доступные плагины: web (поиск в интернете в реальном времени), file-parser (обработка PDF), response-healing (автоматическая починка JSON) и context-compression (сжатие промпта методом middle-out). Подробности конфигурации — на странице Плагины.
Роутинг моделейЕсли параметр model не указан, используется модель по умолчанию. В остальных случаях выбирайте значение model из поддерживаемых моделей или через API и включайте префикс организации. LLMSTORE выберет самый дешёвый и лучший доступный инстанс у провайдеров для обслуживания запроса, а при 5xx или рейт-лимите — выполнит фолбэк на другого провайдера.
СтримингПоддерживаются Server-Sent Events (SSE) — стриминг доступен для всех моделей. Просто передайте stream: true в теле запроса. В SSE-потоке изредка встречаются служебные строки-комментарии — их следует игнорировать (см. ниже).
Нестандартные параметрыЕсли выбранная модель не поддерживает параметр запроса (например logit_bias у моделей не-OpenAI или top_k у OpenAI), параметр игнорируется. Остальные передаются в API нижележащей модели.

Префилл ассистента

LLMSTORE позволяет просить модель продолжить частичный ответ. Это полезно, чтобы направить модель на определённый стиль ответа. Для этого просто добавьте сообщение с role: "assistant" в конец массива messages.

Ответы

Формат CompletionsResponse

LLMSTORE нормализует схему для всех моделей и провайдеров в соответствии с OpenAI Chat API. Это значит, что choices — всегда массив, даже если модель вернула одну генерацию. Каждый choice содержит свойство delta при стриминге и message в остальных случаях. Благодаря этому один и тот же код работает для всех моделей. Схема ответа в виде TypeScript-типа:
TypeScript
Пример ответа:

Причина завершения (finish reason)

LLMSTORE нормализует finish_reason каждой модели к одному из значений: tool_calls, stop, length, content_filter, error. У некоторых моделей и провайдеров могут быть дополнительные причины завершения. Сырая строка finish_reason от модели доступна в свойстве native_finish_reason.

Запрос стоимости и статистики

Числа токенов в ответе completions API вычисляются нативным токенизатором модели. Списание кредитов и цены моделей основаны на этих нативных числах. Возвращённый id можно также использовать для запроса статистики генерации (включая числа токенов и стоимость) после завершения запроса — через эндпоинт /v1/generation. Это полезно для аудита исторического использования или когда статистика нужна асинхронно.
Полную форму ответа смотрите в справочнике Generation. Числа токенов также доступны в поле usage тела ответа при не-стриминге.