Chat Completions
POST /v1/chat/completions prima razgovor i vraća sljedeću poruku modela u OpenAI Chat Completions formatu. Koristite ga iz bilo kojeg OpenAI SDK-a ili običnim HTTP-om; ova stranica je referenca polje po polje.
POST https://api.shannon-ai.com/v1/chat/completions
Najmanji zahtjev 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 objekt:
{
"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 zahtjeva
| Zaglavlje | Vrijednost | Opis |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Vaš API ključ. Umjesto njega na svakom se endpointu prihvaća x-api-key: YOUR_API_KEY. |
Content-Type | application/json | Obavezno. Svaka druga vrijednost vraća 415. |
x-request-id | Neobavezno. Vaš vlastiti id zahtjeva. Vraća se nepromijenjen u odgovoru. |
Zaglavlja odgovora
| Zaglavlje | Opis |
|---|---|
x-request-id | Na svakom odgovoru, uključujući greške i streamove: vrijednost koju ste poslali ili 12 heksadecimalnih znakova ako niste poslali nijednu. Navedite je kada prijavljujete problem. |
content-type | application/json ili text/event-stream kada je stream true. |
Polja zahtjeva
Obavezan je samo messages. Stupac Primjenjuju navodi modele na kojima polje mijenja odgovor. Hostirani open-weight modeli su dvanaest id-ova s popisa modela; obitelj Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cijene
| Polje | Tip | Zadano | Opis | Primjenjuju |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Model koji odgovara: id s popisa modela. Šaljite ga sa svakim zahtjevom. Podudaranje ne razlikuje velika i mala slova. Id koji nije objavljen vraća 400 unknown model. | Svi modeli |
messages | array | Obavezno. Razgovor, najstarija poruka prva. Pogledajte Poruke u nastavku. | 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. Vrijednost izvan raspona od 1 do 65,536 pomiče se u taj raspon. To je ujedno iznos koji se odvaja sa stanja dok zahtjev traje. Pogledajte Duljina izlaza u nastavku. | Hostirani 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. | Hostirani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Temperatura uzorkovanja. Na hostiranim open-weight modelima zadano je 1, a vrijednosti se drže između 0 i 2. | Hostirani open-weight modeli, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus sampling. Vrijednosti se drže između 0 i 1. | Hostirani open-weight modeli |
seed | integer | Seed uzorkivača, bilo koji cijeli broj. Bez njega seed se izvodi iz modela i razgovora, pa isti zahtjev poslan dvaput koristi isti seed. | Hostirani open-weight modeli | |
stop | string | array | String ili niz stringova. Koristi se do 4. Odgovor završava prije prvog koji se pojavi; sam stop tekst se ne vraća. | Hostirani open-weight modeli | |
reasoning_effort | string | high | Koliko model rezonira prije nego odgovori: off, low, medium ili high. none i minimal znače off, default znači medium, max znači high. Svaka druga vrijednost vraća 400. | Hostirani open-weight modeli |
reasoning | object | Ista postavka u obliku objekta: {"effort": "low"}. Kada se pošalju oba, koristi se reasoning_effort. | Hostirani open-weight modeli | |
tools | array | Funkcije koje model smije pozvati, 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" tjera ga da pozove alat. {"type": "function", "function": {"name": "…"}} tjera ga da pozove taj alat. | Hostirani open-weight modeli |
response_format | object | {"type": "json_object"} za JSON odgovor ili {"type": "json_schema", "json_schema": {…}} za odgovor koji prati vašu shemu. | Sve Shannon razine; hostirani open-weight modeli kako je navedeno po id-u | |
web_search | boolean | false | true dopušta modelu da pretraži web prije odgovora. | shannon-1.6-*, shannon-2-*, obitelj Shannon 3 |
Ostala 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, prihvaćaju se kako bi postojeći klijentski kod radio nepromijenjen. Ne mijenjaju odgovor: uvijek postoji jedan izbor, a stream uvijek završava upotrebom.
Polje s pogrešnim JSON tipom, na primjer "max_tokens": "100", vraća 422. Isto vrijedi za zahtjev bez messages.
Alati, strukturirani izlaz, rezoniranje i web pretraga imaju svaki svoju stranicu: Pozivanje funkcija, Strukturirani izlazi, Razina napora rezoniranja, Ugrađena web pretraga.
Zahtjev s opcijama
Ovaj zahtjev postavlja system poruku, polja uzorkovanja i razinu napora rezoniranja. Koristi hostirani open-weight model, koji primjenjuje sve njih.
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 hostiranim open-weight modelima dodaje dva detalja: tokene prompta pročitane iz cachea i tokene potrošene na rezoniranje.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Duljina izlaza
max_tokens radi dvije stvari. Prvo, to je broj tokena koji se odvaja sa stanja kada zahtjev počne. Kada je odgovor gotov, taj iznos zamjenjuju tokeni koje je zahtjev iskoristio. Ako je max_tokens veći od onoga što je preostalo na stanju, zahtjev vraća 429 Quota exceeded čak i kada bi se sam odgovor stao. Pošaljite manji max_tokens da odvojite manje.
shannon-coder-1 se na ovom endpointu broji drukčije: svaki zahtjev je jedan od Shannon Coder poziva vašeg plana i za njega se ne odvajaju tokeni. Ograničenja i stanje
Drugo, ograničava duljinu odgovora na ovim modelima:
| Modeli | Što radi max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Odgovor staje kada dosegne ograničenje. Stream tada završava s finish_reason length. |
| Hostirani open-weight modeli | Tekst odgovora staje na max_tokens. Rezoniranje se ne računa u to. Vrijednosti ispod 256 djeluju kao 256. |
Bez max_tokens ili max_completion_tokens vrijednost je 4,096. Na shannon-coder-1 je 65,536.
Poruke
Svaka poruka je objekt s role i content. content je string ili niz dijelova kada poruka nosi više od teksta.
| Uloga | Opis | Primjenjuju |
|---|---|---|
system | Upute za model. Stavite je prvu. Na Shannon razinama koristi se prva poruka system. | Hostirani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Čita se kao system. | Hostirani open-weight modeli |
user | Što pitate. Na Shannon razinama zadnja poruka user je prompt, a poruke prije nje su povijest. | Svi modeli |
assistant | Raniji odgovori modela. Zadržite njegove tool_calls kada nakon njih šaljete rezultat alata. | Svi modeli |
tool | Rezultat poziva alata: tool_call_id sadrži id poziva, a content rezultat kao string. | Svi modeli |
S id-om iz obitelji Shannon 3 upute koje moraju vrijediti stavite u poruku user.
Na Shannon razinama zahtjev bez korisničkog teksta i bez tools vraća 400 No user message provided.
Dijelovi sadržaja
| Dio | Opis | Dostupno na |
|---|---|---|
{"type": "text", "text": "…"} | Običan tekst. | Svi modeli |
{"type": "image_url", "image_url": {"url": "…"}} | Slika, kao data: URL s base64 sadržajem ili kao http(s) URL. | Obitelj Shannon 3, shannon-1.6-lite, shannon-1.6-pro i hostirani open-weight modeli koji navode ulaz slike |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokument (PDF, Word, PowerPoint ili Excel), kao base64 ili putem URL-a. | Obitelj Shannon 3 |
Veličine, ograničenja i potpun popis oblika imaju vlastitu stranicu. Slike i datoteke
Objekt odgovora
| Polje | Tip | Opis |
|---|---|---|
id | string | chatcmpl- iza kojeg slijedi 32 heksadecimalna znaka. |
object | string | Uvijek chat.completion. |
created | integer | Vrijeme odgovora, u Unix sekundama. |
model | string | Kanonski id modela koji je odgovorio. Može se po pisanju razlikovati od id-a koji ste poslali. |
choices | array | Uvijek točno jedan izbor, s index 0. |
choices[0].message.role | string | Uvijek assistant. |
choices[0].message.content | string | null | Tekst odgovora. S tool_calls je null na Shannon razinama; hostirani open-weight modeli mogu uz pozive slati tekst. |
choices[0].message.reasoning_content | string | null | Rezoniranje koje je model napisao prije 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 s name i arguments kao JSON stringom. |
choices[0].message.annotations | array | Samo na zahtjevu s web_search: true čija je pretraga nešto pronašla. Jedan url_citation za svaki izvor koji oznaka u content imenuje, s url, title, start_index i end_index (položaj oznake, izbrojen u znakovima, kraj nije uključen). |
choices[0].finish_reason | string | Zašto je odgovor završio. Pogledajte Razlozi završetka. |
usage | object | Tokeni zahtjeva. Pogledajte Upotreba. |
sources | array | Samo na zahtjevu s web_search: true čija je pretraga nešto pronašla: rezultati koje je model dobio, svaki s index, title i url. [1] u odgovoru je unos s index 1. |
Razlozi završetka
| finish_reason | Opis |
|---|---|
stop | Model je završio svoj odgovor ili se pojavio stop string. |
tool_calls | Model poziva jedan ili više alata. Izvršite ih i pošaljite rezultate u porukama tool. |
length | Odgovor je prekinut na ograničenju izlaza. Prijavljuje se u streamovima shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 i obitelji 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: rezoniranje, 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 | Dio prompt_tokens koji je pročitan iz prompt cachea. | Hostirani open-weight modeli |
usage.completion_tokens_details.reasoning_tokens | integer | Dio completion_tokens potrošen na rezoniranje. | Hostirani open-weight modeli |
Na hostiranim open-weight modelima prompt_tokens su vaše poruke i definicije alata izbrojene tokenizerom samog modela, plus tokeni svih slika. Endpointi za brojanje tokena vraćaju isti broj prije nego pošaljete. Brojanje tokena
Na Shannon razinama prompt_tokens broji sve što je model pročitao da bi napisao 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 s data: [DONE]. Zadnji chunk prije toga nosi finish_reason i usage; stream_options nisu potrebni. Oblici chunkova, keep-alive retci i greške unutar streama imaju vlastitu stranicu. Streaming
Greške
Greška je JSON objekt s članom error. Provjere se izvršavaju ovim redom: API ključ, tijelo zahtjeva, id modela, zatim stanje. Tablica navodi što ovaj endpoint najčešće vraća. Potpuni popis, s uputom što ponoviti, ima vlastitu 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 poslan, 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 razine: zahtjev nema korisnički tekst ni tools. |
400 | invalid_request_error | <id> does not accept image input | Dio sa slikom poslan je hostiranom open-weight modelu bez ulaza slike. |
400 | invalid_request_error | <id> does not accept response_format | response_format je poslan hostiranom open-weight modelu bez strukturiranog izlaza. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort sadrži vrijednost izvan popisa. |
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. | Flood protection: više od 120 zahtjeva u jednoj minuti na vašem računu. |
500 | server_error | The model backend failed to answer. Please retry. | Model nije proizveo odgovor. Pošaljite zahtjev ponovno. |
502 | api_error | The model backend failed to answer. Please retry. | Isto, na obitelji Shannon 3 i hostiranim open-weight modelima. |