Bilder und Dateien
Bilder mit einer Nachricht senden: welche Modelle sie annehmen, die akzeptierten Formen und ihre Limits.
POST https://api.shannon-ai.com/v1/chat/completions
Ein Bild reist innerhalb einer User-Nachricht, als ein Teil ihres content. Das Beispiel liest eine lokale Datei und sendet sie als Data-URL.
import base64
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")
with open("photo.jpg", "rb") as f:
image = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="shannon-3",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64," + image}},
],
}],
)
print(response.choices[0].message.content) import fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const image = fs.readFileSync("photo.jpg").toString("base64");
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{
role: "user",
content: [
{ type: "text", text: "What is in this picture?" },
{ type: "image_url", image_url: { url: "data:image/jpeg;base64," + image } },
],
}],
});
console.log(response.choices[0].message.content); # Linux: base64 -w0 photo.jpg macOS: base64 -i photo.jpg
IMAGE=$(base64 -w0 photo.jpg)
curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"model": "shannon-3",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,${IMAGE}"}}
]
}]
}
EOF {
"id": "chatcmpl-8d1f3a5c7e9b4d2f6a8c0e2b4d6f8a1c",
"object": "chat.completion",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A grey cat asleep on a windowsill, with a potted fern beside it.",
"reasoning_content": null
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 286,
"completion_tokens": 19,
"total_tokens": 305
}
} Welche Modelle Bilder annehmen
| Modelle | Liest |
|---|---|
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Bilder und Dokumente: PDF-, Word-, PowerPoint-, Excel- und Klartextdateien. |
shannon-1.6-lite, shannon-1.6-pro | Bilder. |
shannon-2-lite, shannon-2-pro | Bilder, in Anfragen, die zusätzlich tools oder response_format senden. |
Kimi-K3-3BIT-REAP, MiniMax-M3-3BIT-REAP, Kimi-K2.6-W4A16-AUTOROUND-REAP, inkling-W4A16-AUTOROUND-REAP, MiMo-V2.5-W8A16 | Bilder. |
DeepSeek-V4-Pro-0813-3BIT-REAP, GLM-5.2-3BIT-REAP, Nemotron3Ultra-3BIT-REAP, DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP, Laguna-S-2.1-W4A16-AUTOROUND-REAP, MiMo-V2.5-Pro-W8A16, Hy3-W8A16 | Text. Eine Anfrage mit einem Bild wird mit Status 400 beantwortet. |
shannon-coder-1 | Text. |
GET /v1/models meldet den Bild-Input pro ID als capabilities.vision. Modelle & Preise
- Die Shannon-Modelle lesen die Dateien der letzten User-Nachricht. Legen Sie das Bild in die Nachricht, die danach fragt.
- Die Shannon-3-Familie behält außerdem einige Bilder und Dokumente früherer User-Nachrichten im Blick, wenn sie inline gesendet wurden, und liest pro Anfrage eine feste Höchstzahl an Bildern, vom ersten an gezählt.
- Die gehosteten Open-Weight-Modelle lesen die Bilder jeder Nachricht der Konversation.
Akzeptierte Formen
Eine Datei wird auf eine von zwei Arten gesendet: innerhalb der Anfrage als Base64 oder als Adresse, die die API abruft. Jede Datei reist mit der Anfrage; die API hat keinen Upload-Endpunkt.
| Endpunkt | In der Anfrage (Base64) | Per Adresse |
|---|---|---|
/v1/chat/completions | {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,…"}} | {"type": "image_url", "image_url": {"url": "https://…"}} |
/v1/responses | {"type": "input_image", "image_url": "data:image/jpeg;base64,…"} | {"type": "input_image", "image_url": "https://…"} |
/v1/messages | {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": "…"}} | {"type": "image", "source": {"type": "url", "url": "https://…"}} |
Dieselbe User-Nachricht in jedem Format:
{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD…"
}
}
]
} {
"role": "user",
"content": [
{"type": "input_text", "text": "What is in this picture?"},
{
"type": "input_image",
"image_url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD…"
}
]
} {
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRgABAQAAAQABAAD…"
}
}
]
} - Eine Data-URL hat die Form
data:<media type>;base64,<data>. Der Teil;base64ist erforderlich. - Bei
/v1/chat/completionsund/v1/responseskannimage_urlder String selbst oder ein Objekt{"url": "…"}sein. - Der Dateityp stammt aus der Data-URL oder aus
media_type. Ohne Angabe wird ein Bild alsimage/pnggelesen. - Inline-Dateien zählen zur Größe des Request-Bodys, der bis zu 32 MiB groß sein darf.
- Aus Kompatibilitätsgründen akzeptiert:
image_url.detail.
Limits für entfernte Dateien
Wenn Sie eine Adresse senden, ruft die API die Datei ab, bevor das Modell läuft, innerhalb dieser Limits:
| Limit | Regel |
|---|---|
| Größe | Bis zu 8 MiB pro Datei. |
| Zeit | 20 Sekunden für die Antwort. |
| Weiterleitungen | Höchstens 5. |
| Adresse | http:// oder https://, ohne Benutzername oder Passwort in der Adresse, auf einem Host mit öffentlicher Adresse. |
| Antwort des Hosts | Ein Status im 200er-Bereich und ein Body, der nicht leer ist. Der Dateityp wird aus Content-Type gelesen. |
| Angefordert als | User-Agent: ShannonBot/1.0 (+https://shannon-ai.com) |
Wie Bilder in Tokens gezählt werden
Bei den gehosteten Open-Weight-Modellen zählt ein Bild einen Token pro Patch von 28 × 28 Pixeln: die Breite geteilt durch 28, aufgerundet, mal die Höhe geteilt durch 28, aufgerundet. Das Ergebnis ist Teil von usage.prompt_tokens und wird als Input berechnet.
- 1024 × 1024
- 1,369 Tokens
- 1920 × 1080
- 2,691 Tokens
- 512 × 512
- 361 Tokens
- Ein entferntes Bild wird zuerst abgerufen, daher wird seine tatsächliche Größe gezählt.
- Ein Bild, dessen Größe nicht gelesen werden kann, zählt 1,024 Tokens.
- Die Endpunkte zum Zählen verwenden für Data-URLs dieselbe Regel. Sie rufen keine entfernte Adresse ab und zählen sie als 1,024 Tokens. Token zählen
- Bei einem Shannon-Modell lesen Sie in
usageder Antwort ab, was eine Anfrage mit Bildern gekostet hat.
Dokumente und andere Dateien
Die Shannon-3-Familie (shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro) liest auch Dokumente. Der Text des Dokuments wird extrahiert und dem Modell zusammen mit Ihrer Nachricht übergeben.
| Dokument | Medientyp |
|---|---|
application/pdf | |
| Word | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| PowerPoint | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Ein Dokument ist, wie ein Bild, ein Teil der User-Nachricht:
| Endpunkt | In der Anfrage (Base64) | Per Adresse |
|---|---|---|
/v1/chat/completions, /v1/messages | {"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | {"type": "document", "source": {"type": "url", "url": "https://…"}} |
/v1/responses | {"type": "input_file", "file_data": "data:application/pdf;base64,…"} | {"type": "input_file", "file_url": "https://…"} |
{
"model": "shannon-3",
"messages": [
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "JVBERi0xLjcKJeLjz9MK…"
}
},
{"type": "text", "text": "Summarise this report in five points."}
]
}
]
} {
"model": "shannon-3",
"input": [
{
"role": "user",
"content": [
{
"type": "input_file",
"file_data": "data:application/pdf;base64,JVBERi0xLjcKJeLjz9MK…"
},
{
"type": "input_text",
"text": "Summarise this report in five points."
}
]
}
]
} {
"model": "shannon-3",
"messages": [
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "JVBERi0xLjcKJeLjz9MK…"
}
},
{"type": "text", "text": "Summarise this report in five points."}
]
}
]
} - Geben Sie den tatsächlichen Medientyp der Datei an. Ohne Angabe wird ein Dokument als
application/pdfgelesen. - Eine Klartextdatei, etwa CSV, wird als Text gelesen und auf dieselbe Weise angehängt.
- Kann ein Dokument nicht gelesen werden oder ist die Datei von einem anderen Typ, wird dies dem Modell mitgeteilt, und es kann es in seiner Antwort sagen. Der Status ist trotzdem
200. - Bei jedem anderen Modell wird ein Dokumentteil aus dem weggelassen, was das Modell liest, und die Anfrage wird aus dem Rest beantwortet.
- Ein Dokument, das per Adresse gesendet wird, wird unter den oben genannten Limits für entfernte Dateien abgerufen.
Fehler
| Status | Typ | Nachricht | Wann |
|---|---|---|---|
400 | invalid_request_error | <id> does not accept image input | Ein Bild wurde an ein gehostetes Open-Weight-Modell gesendet, das nur Text annimmt. Von Ihrem Guthaben wird nichts abgebucht. |
400 | invalid_request_error | audio and video input are not supported by any hosted model | Ein Audio- oder Videoteil wurde an ein gehostetes Open-Weight-Modell gesendet. |
413 | invalid_request_error | Failed to buffer the request body: … | Der Request-Body ist mit seinen Inline-Dateien größer als 32 MiB. Der Fehler enthält code: "request_too_large". |
Ein Shannon-Modell antwortet mit Status 200, welche Dateien die Anfrage auch enthält: Ein Teil, den es nicht liest, wird weggelassen. Fehlerbehandlung