Claude Messages принимает PDF в блоке document с base64-источником с серверным промптом и без него. Для большого PDF выбирайте Opus/Sonnet с контекстом 1M и соблюдайте лимиты ниже. Chat Completions и Responses PDF не принимают.
import base64
import anthropic
with open("report.pdf", "rb") as f:
pdf_b64 = base64.standard_b64encode(f.read()).decode("utf-8")
client = anthropic.Anthropic(
api_key=KEY,
base_url="https://api.guardrelay.ai",
)
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{"type": "document", "source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_b64,
}},
{"type": "text", "text": "Назови ключевые выводы отчёта"},
],
}],
)
print(message.content)- PDF должен быть стандартным и без пароля/шифрования.
- Весь HTTP-запрос вместе с base64 должен укладываться в 12 MiB.
- При применённом серверном промпте дополнительно действует общий media-бюджет: до 4 элементов, до 4 MiB декодированных данных на элемент и до 8 MiB суммарно.
- Без применённого серверного промпта допускается до 600 страниц только при 1M context window; при меньшем окне — максимум 100 страниц. При применённом серверном промпте независимо действует отдельный лимит media 4 MiB на элемент.
- Большой или плотный документ лучше разбить на несколько запросов.
- PDF, а также text/content document sources учитываются как input tokens. Некорректный или слишком большой PDF с применённым серверным промптом отклоняется до платной обработки.
При применённом серверном промпте тот же document block можно вложить в массив tool_result.content. Сохраняйте исходный tool_use_id; PDF должен иметь media_type: "application/pdf" и base64 source. Лимиты те же, что для обычного user message.
- Kimi. Документы работают по-другому: файл сначала загружается запросом
POST /v1/files, а затем упоминается в чат-запросе блокомinput_file. Форматы, лимиты, квота и срок жизни файла разобраны на странице Kimi: Chat Completions. - Composer и Grok. Документов нет. Блок документа или файла в
contentне распознаётся и даёт локальный400до списания. Нужный текст кладите в сообщение обычным текстом, помня про окно 200K у Composer и 256K у Grok 4.7 и 500K у Grok 4.6.
На отдельном Base URL Codex подтверждены загрузка, список, метаданные, скачивание и удаление файлов: POST /codex/v1/files, GET /codex/v1/files, GET /codex/v1/files/{file_id}, GET /codex/v1/files/{file_id}/content и DELETE /codex/v1/files/{file_id}.
curl https://api.guardrelay.ai/codex/v1/files \
-H "Authorization: Bearer $GUARD_API_KEY" \
-F "purpose=user_data" \
-F "file=@notes.txt;type=text/plain"- Файл видит только тот же владелец; смена собственного ключа не переносит его другому пользователю.
- Хранилище принимает файл до 512 MiB. Прямая подстановка сохранённого
file_idвinput_fileограничена 50 MiB. - Назначение
purposeдолжно быть одним из:assistants,batch,evals,fine-tune,user_data,vision. - В Responses сохранённый файл указывается блоком
input_fileсfile_id; удалённый, истёкший или чужой id недоступен.
glm-5.3-flash читает base64 PDF во всех трёх API. MP4 подтверждён только через Chat Completions. Отдельная предварительная загрузка файла не нужна и не опубликована.
| Формат | Chat | Messages | Responses |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ | |
| MP4 | ✓ | — | — |
Chat PDF:
{
"type": "file",
"file": {
"filename": "report.pdf",
"file_data": "data:application/pdf;base64,<base64>"
}
}Messages PDF:
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "<base64>"
}
}Responses PDF:
{
"type": "input_file",
"filename": "report.pdf",
"file_data": "data:application/pdf;base64,<base64>"
}Chat MP4:
{
"type": "video_url",
"video_url": {"url": "data:video/mp4;base64,<base64>"}
}Guard не публикует отдельный предел размера файла для GLM. Учитывайте предел вашего HTTP-клиента и проверяйте нужный реальный файл до запуска пользовательского потока.
Gemini читает PDF во всех трёх API: встроенными данными base64 или ссылкой https, по которой файл скачивает сам Google.
| API | Блок PDF |
|---|---|
| Messages | document с source.type: "base64" или source.type: "url" и адресом https в url |
| Chat Completions | file с file_data (data-адрес или base64 PDF) или file_url (адрес https) и filename |
| Responses | input_file с file_data или file_url и filename |
Chat PDF:
{
"type": "file",
"file": {
"filename": "report.pdf",
"file_data": "data:application/pdf;base64,<base64>"
}
}Messages PDF:
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "<base64>"
}
}Responses PDF:
{
"type": "input_file",
"filename": "report.pdf",
"file_data": "data:application/pdf;base64,<base64>"
}Muse читает PDF, переданный встроенными данными base64: блоком document в Messages или input_file в Responses.