Bildoj kaj dosieroj
Sendu bildojn kun mesaĝo: kiuj modeloj akceptas ilin, la akceptitaj formoj kaj iliaj limoj.
POST https://api.shannon-ai.com/v1/chat/completions
Bildo vojaĝas ene de mesaĝo de uzanto, kiel unu parto de ĝia content. La ekzemplo legas lokan dosieron kaj sendas ĝin kiel 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
}
} Kiuj modeloj akceptas bildojn
| Modeloj | Legas |
|---|---|
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Bildoj, kaj dokumentoj: PDF, Word, PowerPoint, Excel kaj dosieroj de simpla teksto. |
shannon-1.6-lite, shannon-1.6-pro | Bildoj. |
shannon-2-lite, shannon-2-pro | Bildoj, en petoj kiuj sendas ankaŭ tools aŭ response_format. |
Kimi-K3-3BIT-REAP, MiniMax-M3-3BIT-REAP, Kimi-K2.6-W4A16-AUTOROUND-REAP, inkling-W4A16-AUTOROUND-REAP, MiMo-V2.5-W8A16 | Bildoj. |
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 | Teksto. Peto kun bildo ricevas respondon kun stato 400. |
shannon-coder-1 | Teksto. |
GET /v1/models raportas bildan enigon por ĉiu id kiel capabilities.vision. Modeloj kaj prezoj
- La Shannon-modeloj legas la dosierojn de la lasta mesaĝo de la uzanto. Metu la bildon en la mesaĝon, kiu demandas pri ĝi.
- La familio Shannon 3 tenas en vido ankaŭ kelkajn bildojn kaj dokumentojn de pli fruaj mesaĝoj de la uzanto, kiam ili estis senditaj enlinie, kaj legas fiksitan maksimumon da bildoj por peto, kalkulante ekde la unua.
- La gastigitaj malfermpezaj modeloj legas la bildojn de ĉiu mesaĝo de la konversacio.
Akceptitaj formoj
Dosiero estas sendata en unu el du manieroj: ene de la peto kiel base64, aŭ kiel adreso, kiun la API alportas. Ĉiu dosiero vojaĝas kun la peto; la API ne havas endpoint por alŝuto.
| Endpoint | En la peto (base64) | Per adreso |
|---|---|---|
/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://…"}} |
La sama mesaĝo de uzanto en ĉiu formato:
{
"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…"
}
}
]
} - Data URL havas la formon
data:<media type>;base64,<data>. La parto;base64estas deviga. - Ĉe
/v1/chat/completionskaj/v1/responses,image_urlpovas esti la ĉeno mem aŭ objekto{"url": "…"}. - La tipo de la dosiero venas el la data URL aŭ el
media_type. Sen ĝi, bildo estas legata kielimage/png. - Enliniaj dosieroj kalkuliĝas en la grandon de la korpo de la peto, kiu povas esti ĝis 32 MiB.
- Akceptita pro kongrueco:
image_url.detail.
Limoj por foraj dosieroj
Kiam vi sendas adreson, la API alportas la dosieron antaŭ ol la modelo funkcias, ene de ĉi tiuj limoj:
| Limo | Regulo |
|---|---|
| Grando | Ĝis 8 MiB por dosiero. |
| Tempo | 20 sekundoj por respondi. |
| Alidirektoj | Maksimume 5. |
| Adreso | http:// aŭ https://, sen uzantnomo aŭ pasvorto en la adreso, ĉe gastiganto kun publika adreso. |
| Respondo de la gastiganto | Stato en la intervalo 200 kaj korpo, kiu ne estas malplena. La tipo de la dosiero estas legata el Content-Type. |
| Petita kiel | User-Agent: ShannonBot/1.0 (+https://shannon-ai.com) |
Kiel bildoj kalkuliĝas en tokenoj
Ĉe la gastigitaj malfermpezaj modeloj bildo kalkuliĝas kiel unu tokeno por ĉiu peceto de 28 × 28 pikseloj: la larĝo dividita per 28, rondigita supren, oble la alto dividita per 28, rondigita supren. La rezulto estas parto de usage.prompt_tokens kaj estas fakturata kiel enigo.
- 1024 × 1024
- 1,369 tokenoj
- 1920 × 1080
- 2,691 tokenoj
- 512 × 512
- 361 tokenoj
- Fora bildo estas alportata unue, do ĝia vera grando estas kalkulata.
- Bildo, kies grando ne povas esti legata, kalkuliĝas kiel 1,024 tokenoj.
- La endpoints por kalkulado uzas la saman regulon por data URL. Ili ne alportas foran adreson kaj kalkulas ĝin kiel 1,024 tokenojn. Kalkulado de tokenoj
- Por Shannon-modelo, legu el
usageen la respondo, kion kostis peto kun bildoj.
Dokumentoj kaj aliaj dosieroj
La familio Shannon 3 (shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro) legas ankaŭ dokumentojn. La teksto de la dokumento estas ĉerpita kaj donita al la modelo kun via mesaĝo.
| Dokumento | Medio-tipo |
|---|---|
application/pdf | |
| Word | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| PowerPoint | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Dokumento estas parto de la mesaĝo de la uzanto, kiel bildo:
| Endpoint | En la peto (base64) | Per adreso |
|---|---|---|
/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."}
]
}
]
} - Donu la veran medio-tipon de la dosiero. Sen ĝi, dokumento estas legata kiel
application/pdf. - Dosiero de simpla teksto, kiel CSV, estas legata kiel teksto kaj almetata same.
- Kiam dokumento ne povas esti legata, aŭ la dosiero estas de alia tipo, oni diras tion al la modelo kaj ĝi povas mencii tion en sia respondo. La stato tamen estas
200. - Ĉe ĉiu alia modelo dokumenta parto estas lasita ekster tio, kion la modelo legas, kaj la peto estas respondata el la cetero.
- Dokumento sendita per adreso estas alportata laŭ la limoj por foraj dosieroj supre.
Eraroj
| Stato | Tipo | Mesaĝo | Kiam |
|---|---|---|---|
400 | invalid_request_error | <id> does not accept image input | Bildo estis sendita al gastigita malfermpeza modelo, kiu akceptas nur tekston. Nenio estas prenita el via saldo. |
400 | invalid_request_error | audio and video input are not supported by any hosted model | Aŭdio- aŭ videoparto estis sendita al gastigita malfermpeza modelo. |
413 | invalid_request_error | Failed to buffer the request body: … | La korpo de la peto, kun siaj enliniaj dosieroj, estas pli granda ol 32 MiB. La eraro portas code: "request_too_large". |
Shannon-modelo respondas kun stato 200, kiajn ajn dosierojn la peto portas: parto, kiun ĝi ne legas, estas lasita ekster. Erarotraktado