Перейти к содержимому

Изображения и PDF

Изображения и PDF передаются прямо в сообщении, вместе с текстом. Файл кодируется в base64 и вставляется в запрос: отдельной загрузки файлов у роутера нет.

Проверить поддержку у модели можно по GET /v1/models:

  • картинки: в capabilities.modality_input есть image;
  • PDF: в capabilities.features есть pdf_input.

См. Модели.

Контент сообщения становится массивом блоков. Картинка передаётся блоком image_url со ссылкой вида data::

image.sh
B64=$(base64 < chart.png | tr -d '\n')
curl https://api.waibee.com/v1/chat/completions \
-H "Authorization: Bearer $WAIBEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemini-3.6-flash",
"messages": [{ "role": "user", "content": [
{ "type": "text", "text": "Что на картинке? Одно слово." },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,'"$B64"'" } }
] }]
}'

В одном сообщении можно передать несколько блоков: текст и картинки идут в том порядке, в котором вы их перечислили.

Документ передаётся блоком file: имя файла плюс его содержимое в file_data.

{
"role": "user",
"content": [
{ "type": "file", "file": {
"filename": "report.pdf",
"file_data": "data:application/pdf;base64,<base64>"
} },
{ "type": "text", "text": "Найди в документе итоговую сумму." }
]
}

Формат Anthropic использует блоки image и document с объектом source:

{
"role": "user",
"content": [
{ "type": "document", "source": {
"type": "base64",
"media_type": "application/pdf",
"data": "<base64>"
} },
{ "type": "text", "text": "Какой код указан в документе?" }
]
}

Для картинки тип блока image, а media_type соответствует формату (image/png, image/jpeg, image/webp).

Ограничение Значение
Один вложенный файл 50 МБ в исходном размере
Всё тело запроса 100 МБ

Base64 увеличивает объём примерно на треть, но лимит на файл считается по исходному размеру. Превышение возвращает 413, подробнее в Лимитах.

  • Вложения тарифицируются как токены ввода. Правила пересчёта у каждой модели свои: страница PDF или крупная картинка легко стоит несколько тысяч токенов. Считайте фактический расход по usage, см. Токены и usage.
  • Уменьшайте картинки до отправки. Модель всё равно масштабирует изображение под свой предел разрешения, а лишние пиксели превращаются в лишние токены и задержку.
  • Сканы распознаются моделью, а не отдельным OCR. Качество на плохих сканах и рукописном тексте заметно падает: если это ваш основной сценарий, проверяйте результат на своих файлах.
  • Многостраничные PDF дробите. Разделить документ и задать вопрос по конкретному разделу обычно дешевле и точнее, чем отправить сотню страниц одним запросом.
  • Один и тот же документ выгодно закэшировать. Если вы задаёте несколько вопросов по одному файлу, отметьте блок с документом маркером cache_control, см. Кэширование промптов.