Работа с запросами

Изображения, звук и видео в решениях

Как модели решений читают изображения, звук и видео внутри state.

Модели решений отвечают на вопросы заданного вида о содержимом, которое вы отправляете в state. Часть из них также читает вложения в state: изображения, а у некоторых моделей ещё звук и видео. Текстовые запросы решений работают так же, как раньше.

Какие модели это умеют

Каталог записывает, какие вложения принимает каждая модель решений. Откройте страницу моделей или запросите каталог с output_modalities=decisions и нужными input_modalities:

# Модели решений, которые принимают изображения
curl "https://api.alltokens.ru/api/v1/models?output_modalities=decisions&input_modalities=image" \
  -H "Authorization: Bearer $ALLTOKENS_API_KEY"

# Модели решений, которые принимают звук
curl "https://api.alltokens.ru/api/v1/models?output_modalities=decisions&input_modalities=audio" \
  -H "Authorization: Bearer $ALLTOKENS_API_KEY"

# Модели решений, которые принимают видео
curl "https://api.alltokens.ru/api/v1/models?output_modalities=decisions&input_modalities=video" \
  -H "Authorization: Bearer $ALLTOKENS_API_KEY"

Поле architecture.input_modalities у каждой модели в ответе перечисляет, что она принимает. Несколько значений input_modalities через запятую (например input_modalities=image,audio) возвращают только модели, которые принимают все перечисленные виды.

Короткий пример

Закодируйте изображение и положите его в список state как часть image_url, рядом с любым текстом:

IMAGE=$(base64 < listing.png | tr -d '\n')

curl https://api.alltokens.ru/api/alpha/decisions \
  -H "Authorization: Bearer $ALLTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<EOF
{
  "model": "cloudflare/clef-flash",
  "state": [
    "Заголовок объявления: красная квадратная наклейка",
    { "type": "image_url", "image_url": { "url": "data:image/png;base64,$IMAGE" } }
  ],
  "questions": {
    "matches_title": { "type": "noul", "instructions": "На фотографии предмет из заголовка." },
    "color": {
      "type": "choice",
      "instructions": "Какого цвета предмет?",
      "criteria": { "red": null, "green": null, "blue": null }
    }
  }
}
EOF

В ответе по одному ответу заданного вида на каждый вопрос:

{
  "model": "cloudflare/clef-flash",
  "answers": {
    "matches_title": { "type": "noul", "noul": 0.8607 },
    "color": {
      "type": "choice",
      "choice": "red",
      "probabilities": { "red": 0.9844, "green": 0.008, "blue": 0.0076 },
      "confidence": 0.9536
    }
  },
  "usage": { "input_tokens": 289, "output_tokens": 0, "cost": 0.0026 },
  "id": "gen-dec-1791209504-cXRBLHSCBmsjQX93jkWe",
  "provider": "Cloudflare"
}

Формат части с изображением

Изображение — элемент списока state такой формы. Та же часть с изображением используется в содержимом сообщения чата:

{ "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,/9j/4AAQ..." } }
  • url должен быть адресом данных с содержимым файла и типом image/png, image/jpeg или image/webp. Jev принимает только image/png и image/jpeg. Удалённые адреса http и https не запрашиваются.
  • detail (auto, low или high) принимается, но Clef, Clef Flash, Clef Omni и Mercury Decide его не учитывают.
  • Кладите части с изображением прямо в список state верхнего уровня. Изображения, вложенные в другие объекты внутри state, как изображения не читаются. Исключение — Jev: он также читает части с изображением на любой глубине в state и в instructions и criteria вопроса. Ответ оценки, чей legend называет изображение, возвращает вашу исходную часть с изображением.
  • Отправляйте не больше 4 изображений за запрос в Clef, Clef Flash и Clef Omni, не больше 16 в Mercury Decide и не больше 128 в GPT-6 Luna Decisions.
  • Текстовые элементы списока — простые строки, а не части { "type": "text" }.
  • Jev 1.14 и ~typesafe/jev-latest также отвечают на вопросы-рамки про изображения.

Такие формы входом-изображением не являются:

  • Поле images верхнего уровня. Метод отклоняет его с кодом 400.
  • Часть { "type": "input_image", "image_url": "data:..." }.
  • Голая строка с содержимым файла без приставки data:image/...;base64,.

Звук и видео (Clef Omni)

cloudflare/clef-omni также принимает звук и видео в списоке state верхнего уровня, теми же формами частей, что чат использует в содержимом сообщения:

{ "type": "input_audio", "input_audio": { "data": "UklGRiQAAABXQVZF...", "format": "wav" } }
{ "type": "video_url", "video_url": { "url": "data:video/mp4;base64,AAAAIGZ0eXBpc29t..." } }
  • input_audio.data — содержимое файла без приставки data:. format должен быть одним из wav, mp3, mpeg, m4a, mp4, aac, aiff, aif, flac, ogg, opus или webm.
  • video_url.url должен быть адресом данных data:video/... с содержимым файла. Удалённые адреса http и https не запрашиваются. processing принимается, но не учитывается. Clef Omni в любом случае берёт из каждого видео 2 кадра в секунду.
  • Отправляйте не больше 4 звуковых фрагментов и 2 видео за запрос. Каждый звуковой фрагмент может быть до 8 МиБ или 300 секунд, каждое видео до 16 МиБ или 60 секунд, а весь звук и видео вместе — до 16 МиБ после раскодирования.
  • Звук стоит около 780 входных токенов в минуту. Токены звука, видео и изображений все входят в окно контекста на 65 536 токенов.
  • Звук и видео читает только Clef Omni. Clef и Clef Flash отклоняют запросы, в которых они есть. Остальные модели решений видят эти части как обычный текст объекта.

Пределы

  • Размер изображения у Clef и Clef Flash. Оценка токенов запроса идёт по длине содержимого файла ещё до обработки изображения, примерно 4 знака на токен, и запрос отклоняется с кодом 413, как только эта оценка проходит окно в 65 536 токенов. Держите каждое изображение примерно до 300 КБ до кодирования и уменьшайте или пережимайте более крупные. В счёт идут токены, которые модель действительно обработала.
  • Длина текста у Clef и Clef Flash. Читаются примерно первые 2 000 токенов текста в state, остальное отбрасывается без ошибки. Изображения считаются отдельно.
  • Размер изображения у Mercury Decide. Файл JPEG на 7 МБ (тело запроса 10 МБ) принимается и тарифицируется примерно как 1 000 входных токенов. Изображение на 12 МБ завершается с кодом 422, на 16 МБ — с кодом 413, поэтому держите каждое изображение в пределах нескольких МБ.
  • Ошибки поставщика у Mercury Decide. Части с изображением передаются в Inception как есть, поэтому изображение, которое он не может прочитать (удалённый адрес, голая строка с содержимым файла), или больше 16 изображений завершаются кодом 422 от поставщика, а не кодом 400.
  • Изображения у Liquid d1 и d1-ultra. Отправляйте не больше 8 изображений за запрос, в теле запроса не больше 4,5 МБ и суммарно не больше 10 000 фрагментов изображения. Каждый фрагмент 32 на 32 точки считается как 1,5 входного токена, с округлением вверх, на каждый вопрос запроса.
  • Размер изображения у Jev. Каждое изображение должно быть от 256 до 1 568 точек по каждой стороне и от 78 400 до 2 458 624 точек суммарно, границы включены. Изображения ниже минимальных размеров возвращают 400. Изображения выше максимальных размеров или других пределов размера возвращают 413. Каждый раскодированный файл PNG или JPEG может быть не больше 16 МиБ. TypeSafe также ограничивает тело запроса (включая закодированное содержимое), все обработанные изображения вместе и развёрнутый запрос (текст, вопросы, структуру и вхождения изображений) по 32 МиБ каждое. Обработка может сделать изображения больше загруженных файлов, поэтому уложиться только в предел тела загрузки недостаточно. Подвижные PNG отклоняются, ориентация из служебных данных снимка не применяется, поэтому поверните фотографии до кодирования. Изображения считаются входными токенами по обычной цене, и каждый запрос с изображением идёт в длинном режиме TypeSafe.
  • Текущую длину контекста и цену смотрите на странице каждой модели.