Картинки в запросе

Передача картинки модели ссылкой или файлом в кодировке base64, допустимые форматы и размеры, стоимость изображения во входе.

Обновлено: 2 мин чтения

Передайте ссылку на картинку

Картинка идёт частью image_url в содержимом сообщения user, рядом с текстом. Содержимое тогда записывается массивом.

{
  "model": "gpt-6-luna",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Что изображено на картинке?"},
      {"type": "image_url", "image_url": {"url": "https://example.com/photo.png", "detail": "low"}}
    ]
  }],
  "max_tokens": 300
}

Ссылка должна быть открытой, потому что картинку скачивает вендор модели, а epicai её не загружает. Если вендор не смог получить файл, придёт 400 invalid_image. Необязательное поле detail принимает low, high и auto и передаётся вендору как есть. В одном сообщении допускается несколько частей с картинками.

Передайте файл с диска

  1. Прочитайте файл и закодируйте его в base64.
  2. Составьте строку data:image/png;base64,…. Допустимые типы — png, jpeg, jpg, gif и webp.
  3. Поставьте эту строку в поле url вместо ссылки.
import base64
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://epicai.ru/v1",
    api_key=os.environ["EPICAI_API_KEY"],
)

with open("photo.png", "rb") as f:
    encoded = base64.b64encode(f.read()).decode("ascii")

reply = client.chat.completions.create(
    model="gpt-6-luna",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Что изображено на картинке?"},
            {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded}"}},
        ],
    }],
    max_tokens=300,
)
print(reply.choices[0].message.content)

Выберите модель, которая видит картинки

Картинки принимают модели с признаком capabilities.vision в списке. Остальные отвечают 400 unsupported_content с текстом «Модель не принимает изображения», причём вендору запрос в этом случае не уходит и токены не списываются. Части сообщения других видов (аудио, файлы) тоже дают 400 unsupported_content. Картинки в ответе текстовой модели не появляются: изображения создают отдельные модели через задачи с картинками.

Размер и стоимость

Предел по размеру относится ко всему телу запроса и составляет 12 МБ. Base64 раздувает файл примерно на треть, так что картинка до 9 МБ в запрос поместится, а больше нет, и тогда придёт 413 request_too_large. У вендоров есть и собственные ограничения на размер и число картинок, их отказы приходят как 400 invalid_image.

Стоимость картинки входит в токены входа, число которых сообщает вендор. Перед запросом epicai резервирует под каждую картинку по 2000 токенов модели, а после ответа снимает резерв и списывает сумму по фактическому usage.

Не нашли ответ?

Посмотрите частые вопросы или напишите в поддержку.

Войти или создать аккаунт

20 000 токенов в подарок новым пользователям. Без карты и без VPN.

или через сервис

Продолжая, вы получаете сервисные письма.

Для защиты от роботов используется Yandex SmartCaptcha. Условия обработки данных.