Файлы и картинки в chat/completions: вложения в публичном API

Обновлено: 22 августа 2026 г.

Файлы и картинки в chat/completions: вложения в публичном API

<p>В чат-эндпоинт публичного API Genosai — <strong>POST /v1/chat/completions</strong> — добавлена полноценная работа с вложениями. Теперь текстовым моделям можно передавать не только текст, но и картинки, PDF, документы Word и файлы данных — прямо в одном запросе, в привычном OpenAI-формате.</p>

<h2>Что нового</h2> <ul> <li><strong>Картинки работают с любыми ссылками.</strong> Раньше запрос с <code>image_url</code> мог падать с ошибкой 500/503: провайдер не мог скачать внешнюю ссылку и не принимал base64. Теперь каждая картинка автоматически перекладывается в хранилище Genosai и уходит модели гарантированно доступной ссылкой. Работают и публичные https-ссылки, и <code>data:</code>-URI с base64.</li> <li><strong>Файлы в запросе.</strong> Новая часть контента <code>{"type": "file", "file": {"filename", "file_data" | "file_url"}}</code> — как в OpenAI API. Поддерживаются: <ul> <li><strong>PDF</strong> — текст извлекается на сервере и передаётся модели;</li> <li><strong>DOCX</strong> (Word) — извлечение текста, включая таблицы и абзацы;</li> <li><strong>текстовые форматы</strong> — txt, md, csv, tsv, json, xml, yaml, html;</li> <li><strong>картинки-файлы</strong> (jpeg/png/webp/gif/bmp) — обрабатываются как обычные <code>image_url</code> для vision-моделей.</li> </ul></li> <li><strong>Честные ошибки.</strong> Ошибки провайдера больше не маскируются под <code>500 internal_error</code>: если картинка недоступна или файл не поддерживается, придёт понятный <code>400</code> с кодом (<code>image_unreachable</code>, <code>unsupported_file_type</code>, <code>file_too_large</code>, <code>file_no_text</code>) и описанием, что поправить.</li> </ul>

<h2>Пример: вопрос по PDF</h2> <pre><code>from openai import OpenAI import base64

client = OpenAI(base_url="https://api.genosai.io/v1", api_key="sdk_live_...") pdf_b64 = base64.b64encode(open("contract.pdf", "rb").read()).decode()

r = client.chat.completions.create( model="claude-sonnet-5", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Какая сумма и срок в договоре?"}, {"type": "file", "file": { "filename": "contract.pdf", "file_data": f"data:application/pdf;base64,{pdf_b64}", }}, ], }], ) print(r.choices[0].message.content) </code></pre>

<h2>Лимиты</h2> <table><thead><tr><th>Параметр</th><th>Лимит</th></tr></thead><tbody> <tr><td>Картинок в запросе</td><td>до 10</td></tr> <tr><td>Файловых вложений в запросе</td><td>до 10</td></tr> <tr><td>Размер одного вложения</td><td>25 МБ</td></tr> <tr><td>Извлечённый текст одного файла</td><td>до 300 000 символов</td></tr> </tbody></table>

<p>Сканированные PDF без текстового слоя отклоняются с кодом <code>file_no_text</code> — такие документы отправляйте постранично картинками в vision-модель. Какие модели поддерживают зрение — в <code>GET /v1/models</code>, поле <code>text[].supports.vision</code>.</p>

<p>Полная документация — на странице <a href="https://genosai.io/docs/public-api">Public API</a>.</p>

Все статьи блога Genosai