Безопасно запрашивайте рассуждение и медиа
Проверьте поддержку рассуждения и формат медиа, не предполагая поддержку каждого типа моделью.
Проверьте поддержку рассуждения и формат медиа, не предполагая поддержку каждого типа моделью.
Рассуждение и медиа зависят от канонической модели, выбранного протокола, тарифа и доступного исполнения. Сначала прочитайте GET /v1/models и выберите доступный ID: отображаемое имя не доказывает поддержку. Поле capabilities.reasoning в каталоге помогает проверить рассуждение, но каталог сейчас не публикует отдельные признаки поддержки изображений, аудио и документов. Таблица ниже показывает допустимую форму запроса по протоколам, а не гарантирует, что каждая модель примет каждый тип медиа. Добавляйте одну возможность за раз, чтобы было понятно, какое поле вызвало отказ.
| Протокол | Поле запроса | Что проверить |
|---|---|---|
| Responses | reasoning.effort | Выберите допустимый уровень усилия для модели. reasoning.summary запрашивает сводку, а не полный внутренний ход мысли. |
| Chat Completions | reasoning_effort | Используйте одно значение уровня усилия; не заменяйте его текстом в сообщении. |
| Messages | thinking или output_config.effort | Нативный формат Messages. Для thinking.type: enabled нужен положительный budget_tokens; для adaptive задайте output_config.effort. |
Для модели с capabilities.reasoning: true минимальная форма Responses выглядит так:
{
"model": "gpt-6-sol",
"input": "Сравни два способа резервного копирования и объясни выбор.",
"reasoning": { "effort": "low" },
"max_output_tokens": 256
}
gpt-6-sol здесь — конкретный ID из каталога; если он не показан вашему ключу, возьмите доступный ID. Сервис сохраняет рассуждение в нативной форме протокола, если выбранная модель его поддерживает. Неподдерживаемая комбинация получает unsupported_capability до платной попытки генерации. Не считайте отсутствие блока рассуждения ошибкой, если модель или режим возвращают только итоговый текст.
Проверьте синтаксис для выбранного протокола, затем отправляйте только тот тип данных, который нужен вашему приложению. Отсутствие медиа-флагов в публичном каталоге означает, что бесплатный запрос списка моделей пока не подтверждает конкретную комбинацию «модель × тип медиа». Если доступного исполнения для запрошенной комбинации нет, API возвращает unsupported_capability до платной попытки; не превращайте этот отказ в автоматический перебор моделей с платными вызовами.
| Вход | Responses | Chat Completions | Messages |
|---|---|---|---|
| Изображение | Блок 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 проверьте модель и протокол, затем измените запрос осознанно; повтор без изменения не добавит поддержку. Для медиа сейчас нет опубликованной по моделям бесплатной матрицы возможностей, поэтому не выводите такую поддержку из имени модели или общих флагов каталога.