Безопасно запрашивайте рассуждение и медиа

Проверьте поддержку рассуждения и формат медиа, не предполагая поддержку каждого типа моделью.

Рассуждение и медиа зависят от канонической модели, выбранного протокола, тарифа и доступного исполнения. Сначала прочитайте GET /v1/models и выберите доступный ID: отображаемое имя не доказывает поддержку. Поле capabilities.reasoning в каталоге помогает проверить рассуждение, но каталог сейчас не публикует отдельные признаки поддержки изображений, аудио и документов. Таблица ниже показывает допустимую форму запроса по протоколам, а не гарантирует, что каждая модель примет каждый тип медиа. Добавляйте одну возможность за раз, чтобы было понятно, какое поле вызвало отказ.

Запросите рассуждение

ПротоколПоле запросаЧто проверить
Responsesreasoning.effortВыберите допустимый уровень усилия для модели. reasoning.summary запрашивает сводку, а не полный внутренний ход мысли.
Chat Completionsreasoning_effortИспользуйте одно значение уровня усилия; не заменяйте его текстом в сообщении.
Messagesthinking или output_config.effortНативный формат Messages. Для thinking.type: enabled нужен положительный budget_tokens; для adaptive задайте output_config.effort.

Для модели с capabilities.reasoning: true минимальная форма Responses выглядит так:

json
{
  "model": "gpt-6-sol",
  "input": "Сравни два способа резервного копирования и объясни выбор.",
  "reasoning": { "effort": "low" },
  "max_output_tokens": 256
}

gpt-6-sol здесь — конкретный ID из каталога; если он не показан вашему ключу, возьмите доступный ID. Сервис сохраняет рассуждение в нативной форме протокола, если выбранная модель его поддерживает. Неподдерживаемая комбинация получает unsupported_capability до платной попытки генерации. Не считайте отсутствие блока рассуждения ошибкой, если модель или режим возвращают только итоговый текст.

Передайте медиа в правильной форме

Проверьте синтаксис для выбранного протокола, затем отправляйте только тот тип данных, который нужен вашему приложению. Отсутствие медиа-флагов в публичном каталоге означает, что бесплатный запрос списка моделей пока не подтверждает конкретную комбинацию «модель × тип медиа». Если доступного исполнения для запрошенной комбинации нет, API возвращает unsupported_capability до платной попытки; не превращайте этот отказ в автоматический перебор моделей с платными вызовами.

ВходResponsesChat CompletionsMessages
ИзображениеБлок input_image с одним image_url или file_idБлок image_url с объектом { url, detail? }Блок image с source типа base64 или url
АудиоБлок input_audio с input_audio.data и format wav или mp3Блок input_audio с теми же полямиПроверьте каталог и формат клиента; не переносите блок OpenAI в Messages без преобразования
ДокументБлок input_file с одним file_data, file_id или file_urlИспользуйте другой поддержанный протокол для файловБлок document с источником PDF (base64 или url) либо текстовым источником

Изображение по URL и документ по URL должны быть доступны по HTTPS без встроенных логина, пароля и приватного адреса. Для чувствительных данных предпочтите поддерживаемый двоичный ввод, чтобы секретная ссылка не попала в клиентские логи. file_id используйте только для файла, существующего в совместимом клиентском процессе; каталог моделей сам файлы не загружает.

Полное JSON-тело должно быть меньше 4 МиБ, включая размер закодированного base64; превышение даёт request_too_large, а тело свыше 5 МиБ ingress может отклонить до JSON-обработки. Если ответ invalid_request указывает на форму блока, исправьте именно эту форму. При unsupported_capability проверьте модель и протокол, затем измените запрос осознанно; повтор без изменения не добавит поддержку. Для медиа сейчас нет опубликованной по моделям бесплатной матрицы возможностей, поэтому не выводите такую поддержку из имени модели или общих флагов каталога.

Далее: Responses, Messages или ошибки.