Перейти к содержанию

Генеративные модели

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.
usageprompt_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.
usageinput_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.
usageinput_tokens, output_tokens, cache_read_input_tokens, cache_creation_input_tokens и доступная детализация.

Потоковые ответы​

Укажите stream: true, чтобы получать ответ по мере генерации. Хаб возвращает события SSE в протоколе запроса, в том числе при конвертации.

ПротоколЧасти текстаЗавершение
OpenAI Chat Completionschoices[].delta.content в событиях datafinish_reason у варианта ответа; конец потока — data: [DONE].
OpenAI Responsesresponse.output_text.delta, поле deltaresponse.completed; неполный ответ — response.incomplete; ошибка — response.failed.
Anthropic Messagescontent_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 Completionsmessage.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 данными изображения:

[
{ "type": "text", "text": "Что изображено на картинке?" },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,BASE64" } }
]

Внешние URL изображений и ссылки на изображения через file_id отклоняются с HTTP 400. Это ограничение действует и при прямом запросе, и при конвертации. На документы и другие типы файлов оно не распространяется; их обработка зависит от модели и протокола.

Конвертация​

Хаб использует прямой маршрут, если он настроен для выбранных модели и протокола. В остальных случаях запрос преобразуется в протокол провайдера, а ответ и поток событий — обратно в протокол клиента.

В текущей конфигурации используются следующие маршруты:

Провайдер и моделиOpenAI Chat CompletionsOpenAI ResponsesAnthropic 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 моделей принятия решений не поддерживается.

Оплата​

Запросы оплачиваются по расходу токенов и тарифам выбранной модели. Учитываются входящие и выходящие токены, чтение и запись кэша. Рассуждения входят в выходящие токены. Операции встроенного веб-поиска оплачиваются отдельно по тарифу модели.

При конвертации стоимость рассчитывается по данным провайдера до преобразования ответа. Подробности о тарифах и резервировании средств — в статье «Модели и тарифы».