Генеративные модели
API для генеративных моделей поддерживает следующие протоколы ко всем моделям: OpenAI Chat Completions, OpenAI Responses и Anthropic Messages.
Модели генерируют текст, обрабатывают историю диалога и вызывают инструменты приложения. Запрос содержит сообщения или входные данные, инструкции и параметры генерации. Ответ содержит текст, вызовы инструментов и сведения о расходе токенов.
Первый запрос
Получите ключ и пополните баланс по инструкции быстрого старта. Сохраните ключ в переменной окружения:
export COREINFRA_API_KEY="sk-ci2-..."
Отправьте запрос к gpt-6-sol по протоколу OpenAI Chat Completions:
curl https://hub.coreinfra.ai/openai/api/v1/chat/completions \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-sol",
"messages": [
{ "role": "user", "content": "Сколько будет 2 + 2? Ответь только числом." }
]
}'
Пример фрагмента ответа:
{
"model": "gpt-6-sol",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "4" },
"finish_reason": "stop"
}
]
}
Текст ответа находится в choices[0].message.content. Для следующего сообщения передайте в messages предыдущий запрос, ответ модели и новое сообщение пользователя.
Адреса и модели
Базовый адрес хаба — https://hub.coreinfra.ai. Запросы передаются в JSON с заголовками Authorization: Bearer <ключ хаба> и Content-Type: application/json. Для совместимости с Anthropic SDK в запросах Messages и подсчёта токенов также поддерживается x-api-key: <ключ>.
| Метод | Путь | Назначение |
|---|---|---|
| POST | /openai/api/v1/chat/completions | Доступ к генеративным моделям по протоколу OpenAI Chat Completions. |
| POST | /openai/api/v1/responses | Доступ к генеративным моделям по протоколу OpenAI Responses. |
| POST | /anthropic/api/v1/messages | Доступ к генеративным моделям по протоколу Anthropic Messages. |
| POST | /anthropic/api/v1/messages/count_tokens | Подсчёт входных токенов без генерации ответа, при поддержке выбранной моделью. |
Адрес запроса определяет протокол, поле model — модель. Если для выбранного протокола у модели нет прямого маршрута, хаб конвертирует запрос и ответ. Клиент получает ответ в протоколе своего запроса.
Актуальный список моделей и стоимость запросов доступны в разделе «Тарифы» в хабе.
Таблица возможностей
Все три протокола поддерживают текст, историю диалога, потоковые ответы и инструменты приложения. Поддержка изображений, рассуждений и отдельных параметров генерации зависит от выбранной модели.
| Возможность | Без конвертации | С конвертацией |
|---|---|---|
| Текст и история диалога | Поддерживаются | Поддерживаются |
| Системные инструкции | Поддерживаются | Преобразуются в инструкции целевого протокола |
| Потоковые ответы SSE | Поддерживаются | События преобразуются в протокол клиента |
| Изображения в base64 | Поддерживаются для моделей с обработкой изображений | Преобразуются в формат целевого протокола; модель должна поддерживать изображения |
Внешние URL изображений и file_id изображений | Не поддерживаются | Не поддерживаются |
| Инструменты приложения с параметрами JSON | Поддерживаются | Определения, вызовы и результаты преобразуются в целевой формат |
| Ответ по схеме JSON | При поддержке выбранной моделью | Схема передаётся в целевом формате; отдельные параметры могут не сохраняться |
| Настройки рассуждений | При поддержке выбранной моделью | Переносятся частично; бюджет и режим рассуждений могут не сохраняться |
| Управление кэшем промпта | По правилам провайдера | Переносится частично; параметры и срок хранения кэша могут не сохраняться |
| Встроенные инструменты провайдера: веб-поиск, выполнение кода, MCP | По правилам провайдера | Не переносятся |
Аудио, logprobs, prediction | По правилам провайдера | Не переносятся |
Несколько вариантов ответа через n в Chat Completions | По правилам провайдера | Поддерживается один вариант ответа |
| Ссылки на сохранённую историю Responses | По правилам провайдера | Не поддерживаются; передайте историю в input |
Ниже приведены основные поля запросов и ответов. При прямом запросе дополнительные поля передаются провайдеру с учётом правил хаба. При конвертации поля без соответствия в целевом протоколе могут быть отброшены, а отсутствие обязательных полей и неверные типы поддерживаемых полей приводят к HTTP 400. Ограничения перечислены в разделе «Конвертация».
Схема OpenAI Chat Completions
Запрос
| Поле | Тип | Описание |
|---|---|---|
model | Строка, обязательно | Идентификатор модели. |
messages | Массив объектов, обязательно | История диалога. Сообщение содержит role и content; у assistant с tool_calls поле content может отсутствовать или быть null. |
max_completion_tokens | Целое число, необязательно | Лимит выходных токенов, включая рассуждения. Для совместимых провайдеров также используется max_tokens. |
stream | Логическое значение, необязательно | При true ответ передаётся потоком SSE. По умолчанию возвращается один JSON-ответ. |
stream_options.include_usage | Логическое значение, необязательно | Запрашивает сведения о расходе токенов в потоке. |
temperature, top_p | Числа, необязательно | Параметры генерации. Допустимые значения и сочетания зависят от модели. |
stop | Строка или массив строк, необязательно | Последовательности, на которых генерация останавливается. |
tools | Массив объектов, необязательно | Инструменты с type: "function". Объект function содержит name, description и схему JSON в parameters. |
tool_choice | Строка или объект, необязательно | Режим выбора инструмента: auto, none, required или конкретная функция. |
parallel_tool_calls | Логическое значение, необязательно | Разрешает несколько вызовов инструментов в одном ответе. |
response_format | Объект, необязательно | Поле type: text, json_object или json_schema. Для json_schema укажите имя в json_schema.name и схему в json_schema.schema. |
reasoning_effort | Строка, необязательно | Уровень рассуждений. Допустимые значения зависят от модели. |
inference_geo | Игнорируется | Хаб удаляет поле; выбрать регион обработки через него нельзя. |
Роли сообщений: system и developer — инструкции, user — запрос пользователя, assistant — ответ модели, tool — результат выполнения инструмента. Текст передаётся строкой в content. Для текста вместе с изображениями используется массив частей text и image_url.
Для DeepSeek и Z.ai хаб преобразует max_completion_tokens в max_tokens. При конвертации запросов с обоими полями используется max_completion_tokens.
Ответ
| Поле | Содержимое |
|---|---|
id, model | Идентификатор ответа и модель. |
choices[].message.content | Текст ответа. При вызове инструмента может быть null. |
choices[].message.tool_calls | Вызовы инструментов: id, type, function.name и строка JSON в function.arguments. |
choices[].finish_reason | Причина завершения: например, stop, length, tool_calls или content_filter. |
usage | prompt_tokens, completion_tokens, total_tokens и доступная детализация кэша и рассуждений. |
Схема OpenAI Responses
Запрос
| Поле | Тип | Описание |
|---|---|---|
model | Строка, обязательно | Идентификатор модели. |
input | Строка или массив объектов, обязательно | Текст запроса либо история сообщений, вызовов инструментов и их результатов. |
instructions | Строка, необязательно | Инструкции для модели. |
max_output_tokens | Целое число, необязательно | Лимит выходных токенов, включая рассуждения. |
stream | Логическое значение, необязательно | При true ответ передаётся потоком SSE. |
temperature, top_p | Числа, необязательно | Параметры генерации при поддержке выбранной моделью. |
tools | Массив объектов, необязательно | Инструменты с type: "function", полями name, description и схемой JSON в parameters. |
tool_choice | Строка или объект, необязательно | Режим выбора инструмента или конкретный инструмент. |
parallel_tool_calls | Логическое значение, необязательно | Разрешает несколько вызовов инструментов в одном ответе. |
text.format | Объект, необязательно | Формат текста. Для ответа по схеме укажите type: "json_schema", name и schema. |
reasoning | Объект, необязательно | Настройки рассуждений, в том числе effort и summary, при поддержке выбранной моделью. |
previous_response_id | Строка, необязательно | Ссылка на предыдущий ответ у провайдера. Не поддерживается при конвертации. |
conversation | Строка или объект, необязательно | Ссылка на диалог у провайдера. Не поддерживается при конвертации. |
inference_geo | Игнорируется | Хаб удаляет поле; выбрать регион обработки через него нельзя. |
Пример запроса:
curl https://hub.coreinfra.ai/openai/api/v1/responses \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-sol",
"instructions": "Отвечай кратко.",
"input": "Объясни, что такое кэш промпта."
}'
В массиве input сообщение содержит role и content. Текст передаётся строкой или частью input_text, изображение — частью input_image. Вызовы функций и их результаты передаются отдельными объектами function_call и function_call_output.
Ответ
| Поле | Содержимое |
|---|---|
id, model | Идентификатор ответа и модель. |
status | Состояние ответа: например, completed, incomplete или failed. |
output | Массив сообщений, рассуждений и вызовов инструментов. |
output[].content[] | У сообщения с type: "message" текст находится в части type: "output_text", в поле text. |
output[] с type: "function_call" | Вызов функции: call_id, name и строка JSON в arguments. |
usage | input_tokens, output_tokens, total_tokens и доступная детализация кэша и рассуждений. |
incomplete_details, error | Причина неполного ответа или сведения об ошибке, если они есть. |
Для получения текста выберите из output сообщения и объедините их части output_text. Первый элемент output может содержать рассуждения или вызов инструмента.
Хаб поддерживает создание ответа через POST /responses, но не предоставляет отдельные адреса для получения, удаления и отмены ранее созданного ответа. Адрес /responses/compact доступен только для подключённой подписки ChatGPT.
Схема Anthropic Messages
Запрос
| Поле | Тип | Описание |
|---|---|---|
model | Строка, обязательно | Идентификатор модели. |
messages | Массив объектов, обязательно | История диалога с ролями user и assistant. |
max_tokens | Целое число, обязательно | Лимит выходных токенов. |
system | Строка или массив блоков, необязательно | Системные инструкции. |
stream | Логическое значение, необязательно | При true ответ передаётся потоком SSE. |
temperature, top_p | Числа, необязательно | Параметры генерации при поддержке выбранной моделью. |
stop_sequences | Массив строк, необязательно | Последовательности, на которых генерация останавливается. |
tools | Массив объектов, необязательно | Инструменты приложения: name, description и схема JSON в input_schema. |
tool_choice | Объект, необязательно | type: auto, any, none или tool. Для tool укажите name. |
thinking | Объект, необязательно | Режим рассуждений: например, type: "enabled" с budget_tokens или type: "adaptive". Поддержка зависит от модели. |
output_config | Объект, необязательно | Уровень усилий в effort и формат ответа в format. Для схемы JSON: format.type: "json_schema" и format.schema. |
cache_control | Объект, необязательно | Настройки кэша промпта. Также могут указываться у отдельных блоков и инструментов. |
inference_geo | Игнорируется | Хаб удаляет поле; выбрать регион обработки через него нельзя. |
Пример запроса:
curl https://hub.coreinfra.ai/anthropic/api/v1/messages \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"system": "Отвечай кратко.",
"messages": [
{ "role": "user", "content": "Объясни, что такое кэш промпта." }
]
}'
Поле content сообщения — строка или массив блоков. Для текста используется блок text, для изображения — image, для вызова инструмента — tool_use, для его результата — tool_result.
Ответ
| Поле | Содержимое |
|---|---|
id, model | Идентификатор ответа и модель. |
content | Массив блоков ответа. Текст находится в text у блоков type: "text". |
content[] с type: "tool_use" | Вызов инструмента: id, name и объект аргументов в input. |
content[] с type: "thinking" | Рассуждения в поле thinking, если провайдер их возвращает. |
stop_reason | Причина завершения: например, end_turn, max_tokens, stop_sequence или tool_use. |
usage | input_tokens, output_tokens, cache_read_input_tokens, cache_creation_input_tokens и доступная детализация. |
Потоковые ответы
Укажите stream: true, чтобы получать ответ по мере генерации. Хаб возвращает события SSE в протоколе запроса, в том числе при конвертации.
| Протокол | Части текста | Завершение |
|---|---|---|
| OpenAI Chat Completions | choices[].delta.content в событиях data | finish_reason у варианта ответа; конец потока — data: [DONE]. |
| OpenAI Responses | response.output_text.delta, поле delta | response.completed; неполный ответ — response.incomplete; ошибка — response.failed. |
| Anthropic Messages | content_block_delta с delta.type: "text_delta", поле delta.text | Причина завершения в message_delta; конец сообщения — message_stop. |
Закрытие соединения без завершающего события не означает успешное завершение ответа. В Chat Completions сведения usage могут приходить отдельным событием с пустым массивом choices; обрабатывайте их независимо от текстовых частей.
Пример чтения потока через OpenAI SDK. Для запуска установите пакет командой pip install openai:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://hub.coreinfra.ai/openai/api/v1",
api_key=os.environ["COREINFRA_API_KEY"],
)
stream = client.responses.create(
model="gpt-6-sol",
input="Объясни, что такое кэш промпта.",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
WebSocket
Для моделей OpenAI с прямым маршрутом Responses также доступен WebSocket по адресу wss://hub.coreinfra.ai/openai/api/v1/responses. При подключении передайте заголовок Authorization: Bearer <ключ хаба>.
Клиент отправляет событие response.create с полями запроса Responses:
{
"type": "response.create",
"model": "gpt-6-sol",
"input": "Сколько будет 2 + 2?"
}
Ответ передаётся событиями Responses. Поле stream можно не указывать; если оно передано, допустимо только true. Поле background и другие типы клиентских событий не поддерживаются. Для моделей других провайдеров используйте HTTP с stream: true: конвертация через WebSocket не поддерживается.
Подсчёт токенов
Адрес POST /anthropic/api/v1/messages/count_tokens принимает model, messages и параметры входа в формате Messages, в том числе system и tools. Поле max_tokens не требуется. Подсчёт выполняет провайдер; модель должна поддерживать эту операцию.
curl https://hub.coreinfra.ai/anthropic/api/v1/messages/count_tokens \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-5-5",
"messages": [
{ "role": "user", "content": "Сколько будет 2 + 2?" }
]
}'
Ответ содержит число входных токенов в поле input_tokens. Хаб не резервирует и не списывает средства за подсчёт токенов. При конвертации подсчёт выполняется по преобразованному запросу; неподдерживаемые поля могут не учитываться.
Инструменты приложения
Модель возвращает имя инструмента и аргументы. Приложение выполняет вызов и передаёт результат в следующем запросе вместе с историей диалога и исходным вызовом.
| Протокол | Вызов модели | Результат приложения |
|---|---|---|
| OpenAI Chat Completions | message.tool_calls[] | Сообщение role: "tool" с tool_call_id, равным id вызова, и результатом в content. |
| OpenAI Responses | Объект function_call в output | Объект type: "function_call_output" в input с тем же call_id и результатом в output. |
| Anthropic Messages | Блок tool_use в content | Блок tool_result в сообщении role: "user" с tool_use_id, равным id вызова, и результатом в content. |
Хаб конвертирует определения, вызовы и результаты инструментов между протоколами. Встроенные инструменты провайдера, например веб-поиск или выполнение кода, работают по правилам провайдера и не переносятся при конвертации.
Изображения
Для модели с поддержкой изображений передайте текст и изображение в массиве content сообщения пользователя. В Chat Completions и Messages сообщение входит в messages, в Responses — в input. Изображение должно находиться в самом запросе в формате base64.
Ниже показан фрагмент content. Замените BASE64 данными изображения:
- Chat Completions
- Responses
- Messages
[
{ "type": "text", "text": "Что изображено на картинке?" },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,BASE64" } }
]
[
{ "type": "input_text", "text": "Что изображено на картинке?" },
{ "type": "input_image", "image_url": "data:image/png;base64,BASE64" }
]
[
{ "type": "text", "text": "Что изображено на картинке?" },
{ "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": "BASE64" } }
]
Внешние URL изображений и ссылки на изображения через file_id отклоняются с HTTP 400. Это ограничение действует и при прямом запросе, и при конвертации. На документы и другие типы файлов оно не распространяется; их обработка зависит от модели и протокола.
Конвертация
Хаб использует прямой маршрут, если он настроен для выбранных модели и протокола. В остальных случаях запрос преобразуется в протокол провайдера, а ответ и поток событий — обратно в протокол клиента.
В текущей конфигурации используются следующие маршруты:
| Провайдер и модели | OpenAI Chat Completions | OpenAI Responses | Anthropic Messages |
|---|---|---|---|
| OpenAI с поддержкой Chat Completions | Без конвертации | Без конвертации | Конвертация в Responses |
| OpenAI с поддержкой только Responses | Конвертация в Responses | Без конвертации | Конвертация в Responses |
| Anthropic | Конвертация в Messages | Конвертация в Messages | Без конвертации |
| DeepSeek | Без конвертации | Без конвертации | Без конвертации |
| Z.ai | Без конвертации | Конвертация в Chat Completions | Конвертация в Chat Completions |
| Moonshot AI | Без конвертации | Конвертация в Chat Completions | Конвертация в Chat Completions |
При конвертации хаб сопоставляет поля протоколов:
| Данные | Преобразование |
|---|---|
| Инструкции | system и developer в Chat Completions, instructions в Responses и system в Messages преобразуются в инструкции целевого протокола. Разделение ролей может не сохраняться. |
| История диалога | Сообщения, текст и изображения в base64 преобразуются в соответствующие элементы целевого протокола. |
| Лимит ответа | max_completion_tokens или max_tokens в Chat Completions, max_output_tokens в Responses и max_tokens в Messages передаются как лимит выходных токенов. |
| Инструменты приложения | Переносятся имя, описание, схема аргументов, вызовы и результаты. |
| Схема JSON ответа | Переносится между response_format, text.format и output_config.format. При переводе в Messages поля name, description и strict схемы не сохраняются. Режим json_object в Messages не переносится. |
| Рассуждения | Переносится уровень усилий из reasoning_effort, reasoning.effort или output_config.effort, если он представим в целевом протоколе. thinking с бюджетом и режимом adaptive из Messages не переносится. Для модели без поддержки рассуждений настройки удаляются. |
| Кэш промпта | Отметки кэша в блоках сообщений Messages передаются в Chat Completions без срока хранения. При переводе в Responses они не сохраняются. Настройки кэша уровня запроса и инструментов Messages не переносятся. |
| Расход токенов | Данные usage переводятся в поля протокола клиента с учётом различий в учёте кэша. |
При переводе в Messages без заданного лимита хаб устанавливает max_tokens: 16000, а при stream: true — 64000. При переводе в Responses заданный лимит меньше 16 повышается до 16.
В Chat Completions счётчик prompt_tokens, а в Responses — input_tokens включают токены кэша. В Messages input_tokens не включает cache_read_input_tokens и cache_creation_input_tokens. При конвертации хаб учитывает это различие.
При конвертации не переносятся встроенные инструменты провайдера, аудио, logprobs, prediction, фоновые запросы background и дополнительные поля без соответствия в целевом протоколе. Запрос Chat Completions с n больше 1 не создаёт несколько вариантов ответа. Параметры stop не переносятся в Responses, а seed — в Responses и Messages.
Ссылки Responses на сохранённую историю — previous_response_id, conversation и item_reference в input — при конвертации отклоняются с HTTP 400. Передавайте нужные сообщения, вызовы инструментов и результаты непосредственно в input.
Конвертация между API генеративных моделей и API моделей принятия решений не поддерживается.
Оплата
Запросы оплачиваются по расходу токенов и тарифам выбранной модели. Учитываются входящие и выходящие токены, чтение и запись кэша. Рассуждения входят в выходящие токены. Операции встроенного веб-поиска оплачиваются отдельно по тарифу модели.
При конвертации стоимость рассчитывается по данным провайдера до преобразования ответа. Подробности о тарифах и резервировании средств — в статье «Модели и тарифы».
