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 preko običnog HTTP-a; 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 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 zahtjeva
| Zaglavlje | Vrijednost | Opis |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Vaš API ključ. Umjesto njega se na svakom endpointu prihvata x-api-key: YOUR_API_KEY. |
Content-Type | application/json | Obavezno. Svaka druga vrijednost vraća 415. |
x-request-id | Opcionalno. 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 kada 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. Kolona Primjenjuje navodi modele na kojima polje mijenja odgovor. Hostirani open-weight modeli su dvanaest idova s liste modela; porodica Shannon 3 su shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modeli i cijene
| Polje | Tip | Zadano | Opis | Primjenjuje |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Model koji odgovara: id s liste modela. Šaljite ga uz svaki zahtjev. 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 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 pomjera se u taj raspon. To je i iznos koji se odvaja sa vašeg stanja dok zahtjev traje. Pogledajte Dužina 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 se seed 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 se završava prije prvog koji se pojavi; sam stop tekst se ne vraća. | Hostirani open-weight modeli | |
reasoning_effort | string | high | Koliko model rezonuje prije nego što 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 slijedi vašu šemu. | Svi Shannon nivoi; hostirani open-weight modeli kako je navedeno po idu | |
web_search | boolean | false | true omogućava modelu da pretraži web prije nego što odgovori. | shannon-1.6-*, shannon-2-*, porodica 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, prihvataju se kako bi postojeći klijentski kod radio nepromijenjen. Ne mijenjaju odgovor: uvijek postoji jedan choice, a stream uvijek završava s usage.
Polje s pogrešnim JSON tipom, na primjer "max_tokens": "100", vraća 422. Isto vrijedi za zahtjev bez messages.
Alati, strukturirani izlaz, reasoning i web pretraga imaju svaki vlastitu stranicu: Pozivanje funkcija, Strukturirani izlazi, Reasoning effort, Ugrađena web pretraga.
Zahtjev s opcijama
Ovaj zahtjev postavlja system poruku, polja uzorkovanja i reasoning effort. 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 keša i tokene potrošene na reasoning.
{
"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 dvije stvari. Prvo, to je broj tokena koji se odvaja sa vašeg stanja kada zahtjev počne. Kada je odgovor završen, taj iznos se zamjenjuje tokenima koje je zahtjev stvarno iskoristio. Ako je max_tokens veći od onoga što je preostalo na vašem stanju, zahtjev vraća 429 Quota exceeded čak i kada bi se sam odgovor mogao smjestiti. Pošaljite manji max_tokens da odvojite manje.
shannon-coder-1 se na ovom endpointu broji drugačije: svaki zahtjev je jedan od Shannon Coder poziva vašeg plana, a za njega se ne odvajaju tokeni. Ograničenja i stanje
Drugo, on 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 s finish_reason length. |
| Hostirani open-weight modeli | Tekst odgovora staje na max_tokens. Reasoning 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 objekat s role i content. content je string, ili niz dijelova kada poruka nosi više od teksta.
| Uloga | Opis | Primjenjuje |
|---|---|---|
system | Instrukcije za model. Stavite je prvu. Na Shannon nivoima koristi se prva system poruka. | Hostirani open-weight modeli, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Čita se kao system. | Hostirani open-weight modeli |
user | Ono što pitate. Na Shannon nivoima zadnja user poruka je prompt, a poruke prije nje su historija. | 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 |
Uz id iz porodice Shannon 3, instrukcije koje moraju važiti stavite u user poruku.
Na Shannon nivoima 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 sa base64 sadržajem ili kao http(s) URL. | Porodica 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. | Porodica Shannon 3 |
Veličine, ograničenja i potpuna lista oblika imaju vlastitu stranicu. Slike i datoteke
Objekat 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 pisanjem razlikovati od ida koji ste poslali. |
choices | array | Uvijek tačno jedan choice, s index 0. |
choices[0].message.role | string | Uvijek assistant. |
choices[0].message.content | string | null | Tekst odgovora. Uz tool_calls je null na Shannon nivoima; hostirani open-weight modeli mogu poslati tekst uz pozive. |
choices[0].message.reasoning_content | string | null | Reasoning koji 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 string. |
choices[0].message.annotations | array | Samo na zahtjevu s web_search: true čija je pretraga nešto našla. Jedan url_citation za svaki izvor koji imenuje oznaka u content, s url, title, start_index i end_index (pozicija oznake, brojana 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 Usage. |
sources | array | Samo na zahtjevu s web_search: true čija je pretraga nešto našla: rezultati koji su dati modelu, 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 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 prekinut 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.
Usage
| Polje | Tip | Opis | Dostupno na |
|---|---|---|---|
usage.prompt_tokens | integer | Ulazni tokeni. | Svi modeli |
usage.completion_tokens | integer | Izlazni tokeni: reasoning, 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 keša promptova. | Hostirani open-weight modeli |
usage.completion_tokens_details.reasoning_tokens | integer | Dio completion_tokens koji je potrošen na reasoning. | Hostirani open-weight modeli |
Na hostiranim open-weight modelima, prompt_tokens su vaše poruke i definicije alata izbrojane tokenizerom samog modela, plus tokeni eventualnih slika. Endpointi za brojanje tokena vraćaju isti broj prije slanja. 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 s data: [DONE]. Zadnji chunk prije toga nosi finish_reason i usage; stream_options nisu potrebni. Oblici chunkova, keep-alive linije i greške unutar streama imaju vlastitu stranicu. Streaming
Greške
Greška je JSON objekat s članom error. Provjere se izvršavaju ovim redoslijedom: API ključ, tijelo zahtjeva, id modela, zatim stanje. Tabela navodi šta ovaj endpoint najčešće vraća. Potpuna lista, s tim šta 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 nivoi: zahtjev nema korisnički tekst i nema 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 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. | Flood zaštita: 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 dao odgovor. Pošaljite zahtjev ponovo. |
502 | api_error | The model backend failed to answer. Please retry. | Isto, na porodici Shannon 3 i hostiranim open-weight modelima. |