Chat Completions
POST /v1/chat/completions prima razgovor i vraća sledeću poruku modela u OpenAI Chat Completions formatu. Koristite ga iz bilo kog OpenAI SDK-a ili preko običnog HTTP-a; ova stranica je referenca polje po polje.
POST https://api.shannon-ai.com/v1/chat/completions
Najmanji zahtev je id modela i jedna korisnička poruka.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' Odgovor je jedan JSON objekat:
{
"id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "chat.completion",
"created": 1791625200,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello, it is good to meet you.",
"reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1184,
"completion_tokens": 46,
"total_tokens": 1230
}
} Zaglavlja
Zaglavlja zahteva
| Zaglavlje | Vrednost | Opis |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Vaš API ključ. Umesto njega se na svakom endpointu prihvata x-api-key: YOUR_API_KEY. |
Content-Type | application/json | Obavezno. Svaka druga vrednost vraća 415. |
x-request-id | Opciono. Vaš sopstveni id zahteva. Vraća se nepromenjen u odgovoru. |
Zaglavlja odgovora
| Zaglavlje | Opis |
|---|---|
x-request-id | Na svakom odgovoru, uključujući greške i streamove: vrednost koju ste poslali, ili 12 heksadecimalnih znakova kada niste poslali nijednu. Navedite je kada prijavljujete problem. |
content-type | application/json, ili text/event-stream kada je stream true. |
Polja zahteva
Obavezan je samo messages. Kolona Primenjuju navodi modele na kojima polje menja odgovor. Hostovani open-weight modeli su dvanaest id-jeva sa liste modela; porodica Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cene
| Polje | Tip | Podrazumevano | Opis | Primenjuju |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Model koji odgovara: id sa liste modela. Šaljite ga uz svaki zahtev. Poređenje ne razlikuje velika i mala slova. Id koji nije objavljen vraća 400 unknown model. | Svi modeli |
messages | array | Obavezno. Razgovor, najstarija poruka prvo. Pogledajte Poruke ispod. | Svi modeli | |
stream | boolean | false | true šalje odgovor kao server-sent events dok se piše. | Svi modeli |
max_tokens | integer | 4096 | Gornja granica odgovora, u tokenima. Vrednost van opsega od 1 do 65,536 pomera se u taj opseg. To je i iznos koji se izdvaja sa vašeg stanja dok zahtev traje. Pogledajte Dužina izlaza ispod. | Hostovani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Isto kao max_tokens. Kada se pošalju oba, koristi se max_tokens. | Hostovani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Temperatura uzorkovanja. Na hostovanim open-weight modelima podrazumevano je 1, a vrednosti se drže između 0 i 2. | Hostovani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus uzorkovanje. Vrednosti se drže između 0 i 1. | Hostovani open-weight modeli |
seed | integer | Seed uzorkivača, bilo koji ceo broj. Bez njega se seed izvodi iz modela i razgovora, pa isti zahtev poslat dvaput koristi isti seed. | Hostovani open-weight modeli | |
stop | string | array | String ili niz stringova. Koristi se do 4. Odgovor se završava pre prvog koji se pojavi; sam stop tekst se ne vraća. | Hostovani open-weight modeli | |
reasoning_effort | string | high | Koliko model rezonuje pre nego što odgovori: off, low, medium ili high. none i minimal znače off, default znači medium, max znači high. Svaka druga vrednost vraća 400. | Hostovani open-weight modeli |
reasoning | object | Ista postavka u obliku objekta: {"effort": "low"}. Kada se pošalju oba, koristi se reasoning_effort. | Hostovani open-weight modeli | |
tools | array | Funkcije koje model sme da pozove, svaka kao {"type": "function", "function": {"name", "description", "parameters"}}. Pozivi modela vraćaju se u tool_calls; vaš kod ih izvršava. | Svi modeli | |
tool_choice | string | object | auto | "auto" prepušta odluku modelu. "required" tera ga da pozove alat. {"type": "function", "function": {"name": "…"}} tera ga da pozove taj alat. | Hostovani open-weight modeli |
response_format | object | {"type": "json_object"} za JSON odgovor, ili {"type": "json_schema", "json_schema": {…}} za odgovor koji prati vašu šemu. | Svi Shannon nivoi; hostovani open-weight modeli kako je navedeno po id-ju | |
web_search | boolean | false | true dozvoljava modelu da pretraži web pre nego što odgovori. | shannon-1.6-*, shannon-2-*, porodica Shannon 3 |
Druga OpenAI polja, kao što su n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store i prompt_cache_key, prihvataju se da bi postojeći klijentski kod radio nepromenjen. Ne menjaju odgovor: uvek postoji jedan izbor, a stream uvek završava upotrebom.
Polje sa pogrešnim JSON tipom, na primer "max_tokens": "100", vraća 422. Isto važi i za zahtev bez messages.
Alati, strukturirani izlaz, reasoning i web pretraga imaju svoje stranice: Pozivanje funkcija, Strukturirani izlazi, Napor pri zaključivanju, Ugrađena web pretraga.
Zahtev sa opcijama
Ovaj zahtev postavlja system poruku, polja uzorkovanja i napor pri zaključivanju. Koristi hostovani open-weight model, koji primenjuje sve to.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages=[
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"},
],
max_tokens=512,
temperature=0.3,
top_p=0.9,
seed=7,
stop=["\n\n"],
reasoning_effort="low",
)
message = response.choices[0].message
print(message.reasoning_content) # the reasoning
print(message.content) # the answer
print(response.usage) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages: [
{ role: "system", content: "You are a physics teacher. Answer in two sentences." },
{ role: "user", content: "Why is the sky blue?" },
],
max_tokens: 512,
temperature: 0.3,
top_p: 0.9,
seed: 7,
stop: ["\n\n"],
reasoning_effort: "low",
});
const message = response.choices[0].message;
console.log(message.reasoning_content); // the reasoning
console.log(message.content); // the answer
console.log(response.usage); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"}
],
"max_tokens": 512,
"temperature": 0.3,
"top_p": 0.9,
"seed": 7,
"stop": ["\n\n"],
"reasoning_effort": "low"
}' Odgovor ima isti oblik kao gore. Njegov usage na hostovanim open-weight modelima dodaje dva detalja: tokene prompta pročitane iz keša i tokene potrošene na rezonovanje.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Dužina izlaza
max_tokens radi dve stvari. Prvo, to je broj tokena koji se izdvaja sa vašeg stanja kada zahtev počne. Kada je odgovor završen, taj iznos se zamenjuje tokenima koje je zahtev iskoristio. Ako je max_tokens veći od onoga što je preostalo na vašem stanju, zahtev vraća 429 Quota exceeded čak i kada bi se sam odgovor uklopio. Pošaljite manji max_tokens da izdvojite manje.
shannon-coder-1 se na ovom endpointu računa drugačije: svaki zahtev je jedan od Shannon Coder poziva vašeg plana i za njega se ne izdvajaju tokeni. Ograničenja i stanje
Drugo, ograničava dužinu odgovora na ovim modelima:
| Modeli | Šta radi max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Odgovor staje kada dostigne ograničenje. Stream tada završava sa finish_reason length. |
| Hostovani open-weight modeli | Tekst odgovora staje na max_tokens. Rezonovanje se ne računa u to. Vrednosti ispod 256 deluju kao 256. |
Bez max_tokens ili max_completion_tokens vrednost je 4,096. Na shannon-coder-1 je 65,536.
Poruke
Svaka poruka je objekat sa role i content. content je string, ili niz delova kada poruka nosi više od teksta.
| Uloga | Opis | Primenjuju |
|---|---|---|
system | Uputstva za model. Stavite je prvu. Na Shannon nivoima koristi se prva system poruka. | Hostovani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Čita se kao system. | Hostovani open-weight modeli |
user | Ono što pitate. Na Shannon nivoima poslednja user poruka je prompt, a poruke pre nje su istorija. | Svi modeli |
assistant | Raniji odgovori modela. Zadržite njegove tool_calls kada posle njih šaljete rezultat alata. | Svi modeli |
tool | Rezultat poziva alata: tool_call_id sadrži id poziva, a content rezultat kao string. | Svi modeli |
Sa id-jem iz porodice Shannon 3 stavite uputstva koja moraju da važe u user poruku.
Na Shannon nivoima zahtev bez korisničkog teksta i bez tools vraća 400 No user message provided.
Delovi sadržaja
| Deo | Opis | Dostupno na |
|---|---|---|
{"type": "text", "text": "…"} | Običan tekst. | Svi modeli |
{"type": "image_url", "image_url": {"url": "…"}} | Slika, kao data: URL sa base64 sadržajem ili kao http(s) URL. | Porodica Shannon 3, shannon-1.6-lite, shannon-1.6-pro i hostovani open-weight modeli koji navode sliku na ulazu |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokument (PDF, Word, PowerPoint ili Excel), kao base64 ili preko URL-a. | Porodica Shannon 3 |
Veličine, ograničenja i kompletna lista oblika imaju svoju stranicu. Slike i fajlovi
Objekat odgovora
| Polje | Tip | Opis |
|---|---|---|
id | string | chatcmpl- iza kog sledi 32 heksadecimalna znaka. |
object | string | Uvek chat.completion. |
created | integer | Vreme odgovora, u Unix sekundama. |
model | string | Kanonski id modela koji je odgovorio. Može se pravopisom razlikovati od id-ja koji ste poslali. |
choices | array | Uvek tačno jedan izbor, sa index 0. |
choices[0].message.role | string | Uvek assistant. |
choices[0].message.content | string | null | Tekst odgovora. Uz tool_calls on je null na Shannon nivoima; hostovani open-weight modeli mogu da šalju tekst pored poziva. |
choices[0].message.reasoning_content | string | null | Rezonovanje koje je model napisao pre odgovora, ili null kada ga nema. |
choices[0].message.tool_calls | array | Prisutno samo kada model poziva alate. Svaki unos ima id, type function i function sa name i arguments kao JSON stringom. |
choices[0].message.annotations | array | Samo na zahtevu sa web_search: true čija je pretraga nešto našla. Jedan url_citation za svaki izvor koji imenuje neka oznaka u content, sa url, title, start_index i end_index (pozicija oznake, izbrojana u znakovima, kraj nije uključen). |
choices[0].finish_reason | string | Zašto je odgovor završen. Pogledajte Razlozi završetka. |
usage | object | Tokeni zahteva. Pogledajte Upotreba. |
sources | array | Samo na zahtevu sa web_search: true čija je pretraga nešto našla: rezultati koji su dati modelu, svaki sa index, title i url. [1] u odgovoru je unos sa index 1. |
Razlozi završetka
| finish_reason | Opis |
|---|---|
stop | Model je završio odgovor, ili se pojavio stop string. |
tool_calls | Model poziva jedan ili više alata. Izvršite ih i pošaljite rezultate u tool porukama. |
length | Odgovor je presečen na ograničenju izlaza. Prijavljuje se u streamovima shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 i porodice Shannon 3. |
Odgovor bez streama prijavljuje stop ili tool_calls.
Upotreba
| Polje | Tip | Opis | Dostupno na |
|---|---|---|---|
usage.prompt_tokens | integer | Ulazni tokeni. | Svi modeli |
usage.completion_tokens | integer | Izlazni tokeni: rezonovanje, odgovor i pozivi alata zajedno. | Svi modeli |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Svi modeli |
usage.prompt_tokens_details.cached_tokens | integer | Deo prompt_tokens koji je pročitan iz keša promptova. | Hostovani open-weight modeli |
usage.completion_tokens_details.reasoning_tokens | integer | Deo completion_tokens koji je potrošen na rezonovanje. | Hostovani open-weight modeli |
Na hostovanim open-weight modelima prompt_tokens su vaše poruke i definicije alata izbrojane sopstvenim tokenizerom modela, plus tokeni svih slika. Endpointi za brojanje tokena vraćaju isti broj pre nego što pošaljete. Brojanje tokena
Na Shannon nivoima prompt_tokens broji sve što je model pročitao da napiše odgovor, pa je veći od samog teksta vaših poruka.
Streaming
Kada je stream postavljen na true, odgovor stiže kao chat.completion.chunk događaji i završava se sa data: [DONE]. Poslednji deo pre toga nosi finish_reason i usage; stream_options nisu potrebni. Oblici delova, keep-alive linije i greške unutar streama imaju svoju stranicu. Streaming
Greške
Greška je JSON objekat sa članom error. Provere idu ovim redom: API ključ, telo zahteva, id modela, pa stanje. Tabela navodi šta ovaj endpoint najčešće vraća. Kompletna lista, sa uputstvom šta ponoviti, ima svoju stranicu. Upravljanje greškama
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Tip | Poruka | Kada |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API ključ nije poslat, ili je ključ nepoznat ili opozvan. |
400 | invalid_request_error | unknown model: <id> | model nije objavljeni id. |
400 | invalid_request_error | No user message provided | Shannon nivoi: zahtev nema korisnički tekst i nema tools. |
400 | invalid_request_error | <id> does not accept image input | Deo sa slikom poslat je hostovanom open-weight modelu bez podrške za sliku na ulazu. |
400 | invalid_request_error | <id> does not accept response_format | response_format je poslat hostovanom open-weight modelu bez strukturiranog izlaza. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort sadrži vrednost van liste. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages nedostaje, ili polje ima pogrešan JSON tip. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens je veći od onoga što je preostalo na vašem stanju. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Zaštita od flooda (flood protection): više od 120 zahteva u jednom minutu na vašem nalogu. |
500 | server_error | The model backend failed to answer. Please retry. | Model nije proizveo odgovor. Pošaljite zahtev ponovo. |
502 | api_error | The model backend failed to answer. Please retry. | Isto, na porodici Shannon 3 i hostovanim open-weight modelima. |