Chat Completions
POST /v1/chat/completions merr një bisedë dhe kthen mesazhin e radhës të modelit në formatin OpenAI Chat Completions. Përdoreni nga çdo SDK OpenAI ose përmes HTTP të thjeshtë; kjo faqe është referenca fushë pas fushe.
POST https://api.shannon-ai.com/v1/chat/completions
Kërkesa më e vogël është një id modeli dhe një mesazh përdoruesi.
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."}]
}' Përgjigjja është një objekt JSON:
{
"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
}
} Header-at
Header-at e kërkesës
| Header | Vlera | Përshkrimi |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Çelësi juaj API. x-api-key: YOUR_API_KEY pranohet në vend të tij në çdo endpoint. |
Content-Type | application/json | I detyrueshëm. Çdo vlerë tjetër kthen 415. |
x-request-id | Opsional. Id-ja juaj për kërkesën. Kthehet e pandryshuar në përgjigje. |
Header-at e përgjigjes
| Header | Përshkrimi |
|---|---|
x-request-id | Në çdo përgjigje, përfshirë gabimet dhe stream-et: vlera që dërguat, ose 12 karaktere heksadecimale kur nuk dërguat asnjë. Citojeni kur raportoni një problem. |
content-type | application/json, ose text/event-stream kur stream është true. |
Fushat e kërkesës
Vetëm messages është i detyrueshëm. Kolona Zbatohet nga emërton modelet te të cilat një fushë ndryshon përgjigjen. Modelet open-weight të hostuara janë dymbëdhjetë id-të e listës së modeleve; familja Shannon 3 është shannon-3, shannon-3-pro, shannon-3.1 dhe shannon-3.1-pro. Modelet dhe çmimet
| Fusha | Lloji | Parazgjedhja | Përshkrimi | Zbatohet nga |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Modeli që përgjigjet: një id nga lista e modeleve. Dërgojeni me çdo kërkesë. Përputhja nuk është e ndjeshme ndaj shkronjave të mëdha. Një id që nuk është e publikuar kthen 400 unknown model. | Të gjitha modelet |
messages | array | E detyrueshme. Biseda, me mesazhin më të vjetër së pari. Shihni Mesazhet më poshtë. | Të gjitha modelet | |
stream | boolean | false | true e dërgon përgjigjen si server-sent events ndërsa shkruhet. | Të gjitha modelet |
max_tokens | integer | 4096 | Kufiri i sipërm i përgjigjes, në tokens. Një vlerë jashtë intervalit 1 deri 65,536 zhvendoset brenda tij. Është edhe sasia që rezervohet nga bilanci juaj gjatë ekzekutimit të kërkesës. Shihni Gjatësia e daljes më poshtë. | Modele open-weight të hostuara, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Njësoj si max_tokens. Kur dërgohen të dyja, përdoret max_tokens. | Modele open-weight të hostuara, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Temperatura e kampionimit. Te modelet open-weight të hostuara parazgjedhja është 1 dhe vlerat mbahen mes 0 dhe 2. | Modele open-weight të hostuara, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Kampionim nucleus. Vlerat mbahen mes 0 dhe 1. | Modele open-weight të hostuara |
seed | integer | Seed i kampionuesit, çdo numër i plotë. Pa të, seed-i nxirret nga modeli dhe biseda, kështu që e njëjta kërkesë e dërguar dy herë përdor të njëjtin seed. | Modele open-weight të hostuara | |
stop | string | array | Një string ose një varg stringjesh. Përdoren deri në 4. Përgjigjja mbaron para të parit që shfaqet; vetë teksti i ndalimit nuk kthehet. | Modele open-weight të hostuara | |
reasoning_effort | string | high | Sa arsyeton modeli para se të përgjigjet: off, low, medium ose high. none dhe minimal nënkuptojnë off, default nënkupton medium, max nënkupton high. Çdo vlerë tjetër kthen 400. | Modele open-weight të hostuara |
reasoning | object | I njëjti cilësim në formë objekti: {"effort": "low"}. Kur dërgohen të dyja, përdoret reasoning_effort. | Modele open-weight të hostuara | |
tools | array | Funksionet që modeli mund t'i thërrasë, secili si {"type": "function", "function": {"name", "description", "parameters"}}. Thirrjet e modelit kthehen te tool_calls; kodi juaj i ekzekuton. | Të gjitha modelet | |
tool_choice | string | object | auto | "auto" e lë modelin të vendosë. "required" e detyron të thërrasë një mjet. {"type": "function", "function": {"name": "…"}} e detyron të thërrasë atë mjet. | Modele open-weight të hostuara |
response_format | object | {"type": "json_object"} për përgjigje JSON, ose {"type": "json_schema", "json_schema": {…}} për një përgjigje që ndjek skemën tuaj. | Të gjitha nivelet Shannon; modelet open-weight të hostuara siç listohen për çdo id | |
web_search | boolean | false | true e lë modelin të kërkojë në ueb para se të përgjigjet. | shannon-1.6-*, shannon-2-*, familja Shannon 3 |
Fusha të tjera OpenAI, si n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store dhe prompt_cache_key, pranohen që kodi ekzistues i klientit të punojë pa ndryshime. Ato nuk e ndryshojnë përgjigjen: ka gjithmonë një choice, dhe një stream mbaron gjithmonë me përdorim.
Një fushë me lloj JSON të gabuar, për shembull "max_tokens": "100", kthen 422. Po ashtu edhe një kërkesë pa messages.
Mjetet, dalja e strukturuar, arsyetimi dhe kërkimi në ueb kanë secili faqen e vet: Thirrje funksionesh, Dalje të strukturuara, Përpjekja e arsyetimit, Kërkim i integruar në ueb.
Një kërkesë me opsione
Kjo kërkesë cakton një mesazh sistemi, fushat e kampionimit dhe përpjekjen e arsyetimit. Përdor një model open-weight të hostuar, i cili i zbaton të gjitha.
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"
}' Përgjigjja ka të njëjtën formë si më sipër. usage i saj shton dy detaje te modelet open-weight të hostuara: tokens-at e prompt-it të lexuar nga cache-i dhe tokens-at e shpenzuar për arsyetim.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Gjatësia e daljes
max_tokens bën dy gjëra. Së pari, është numri i tokens-ave që rezervohet nga bilanci juaj kur kërkesa fillon. Kur përgjigjja është e plotë, ajo sasi zëvendësohet me tokens-at që përdori kërkesa. Nëse max_tokens është më i madh se ç'ka mbetur nga bilanci juaj, kërkesa kthen 429 Quota exceeded edhe kur vetë përgjigjja do të kishte ngjitur. Dërgoni një max_tokens më të ulët për të rezervuar më pak.
shannon-coder-1 numërohet ndryshe në këtë endpoint: çdo kërkesë është një nga thirrjet Shannon Coder të planit tuaj, dhe për të nuk rezervohen tokens. Kufijtë dhe bilanci
Së dyti, kufizon gjatësinë e përgjigjes te këto modele:
| Modelet | Çfarë bën max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Përgjigjja ndalon kur arrin kufirin. Një stream pastaj mbaron me finish_reason length. |
| Modele open-weight të hostuara | Teksti i përgjigjes ndalon te max_tokens. Arsyetimi nuk numërohet kundër tij. Vlerat nën 256 veprojnë si 256. |
Pa max_tokens ose max_completion_tokens, vlera është 4,096. Te shannon-coder-1 është 65,536.
Mesazhet
Çdo mesazh është një objekt me role dhe content. content është një string, ose një varg pjesësh kur mesazhi mban më shumë se tekst.
| Roli | Përshkrimi | Zbatohet nga |
|---|---|---|
system | Udhëzime për modelin. Vendoseni të parin. Te nivelet Shannon përdoret mesazhi i parë system. | Modele open-weight të hostuara, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Lexohet si system. | Modele open-weight të hostuara |
user | Ajo që pyesni. Te nivelet Shannon mesazhi i fundit user është prompt-i dhe mesazhet para tij janë historiku. | Të gjitha modelet |
assistant | Përgjigjet e mëparshme të modelit. Mbani tool_calls të tij kur dërgoni pas tij një rezultat mjeti. | Të gjitha modelet |
tool | Rezultati i një thirrjeje mjeti: tool_call_id mban id-në e thirrjes dhe content rezultatin si string. | Të gjitha modelet |
Me një id të familjes Shannon 3, vendosini udhëzimet që duhet të mbahen në mesazhin user.
Te nivelet Shannon një kërkesë pa tekst përdoruesi dhe pa tools kthen 400 No user message provided.
Pjesët e përmbajtjes
| Pjesa | Përshkrimi | I disponueshëm në |
|---|---|---|
{"type": "text", "text": "…"} | Tekst i thjeshtë. | Të gjitha modelet |
{"type": "image_url", "image_url": {"url": "…"}} | Një imazh, si URL data: me përmbajtje base64 ose si URL http(s). | Familja Shannon 3, shannon-1.6-lite, shannon-1.6-pro, dhe modelet open-weight të hostuara që listojnë hyrje imazhi |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Një dokument (PDF, Word, PowerPoint ose Excel), si base64 ose me URL. | Familja Shannon 3 |
Madhësitë, kufijtë dhe lista e plotë e formave kanë faqen e tyre. Imazhet dhe skedarët
Objekti i përgjigjes
| Fusha | Lloji | Përshkrimi |
|---|---|---|
id | string | chatcmpl- e ndjekur nga 32 karaktere heksadecimale. |
object | string | Gjithmonë chat.completion. |
created | integer | Koha e përgjigjes, në sekonda Unix. |
model | string | Id-ja kanonike e modelit që u përgjigj. Mund të ndryshojë në shkrim nga id-ja që dërguat. |
choices | array | Gjithmonë saktësisht një choice, me index 0. |
choices[0].message.role | string | Gjithmonë assistant. |
choices[0].message.content | string | null | Teksti i përgjigjes. Me tool_calls është null te nivelet Shannon; modelet open-weight të hostuara mund të dërgojnë tekst pranë thirrjeve. |
choices[0].message.reasoning_content | string | null | Arsyetimi që modeli shkroi para përgjigjes, ose null kur nuk ka. |
choices[0].message.tool_calls | array | Është i pranishëm vetëm kur modeli thërret mjete. Çdo hyrje ka një id, type function, dhe function me name dhe arguments si string JSON. |
choices[0].message.annotations | array | Vetëm te një kërkesë me web_search: true kërkimi i së cilës gjeti diçka. Një url_citation për çdo burim që emërton një shenjë te content, me url, title, start_index dhe end_index (pozicioni i shenjës, i numëruar në karaktere, fundi nuk përfshihet). |
choices[0].finish_reason | string | Pse mbaroi përgjigjja. Shihni Arsyet e mbarimit. |
usage | object | Tokens-at e kërkesës. Shihni Përdorimi. |
sources | array | Vetëm te një kërkesë me web_search: true kërkimi i së cilës gjeti diçka: rezultatet që iu dhanë modelit, secili me index, title dhe url. [1] në përgjigje është hyrja me index 1. |
Arsyet e mbarimit
| finish_reason | Përshkrimi |
|---|---|
stop | Modeli e mbaroi përgjigjen, ose u shfaq një string stop. |
tool_calls | Modeli thërret një ose më shumë mjete. Ekzekutojini dhe dërgoni rezultatet në mesazhe tool. |
length | Përgjigjja u ndërpre te kufiri i daljes. Raportohet në stream-et e shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 dhe familjes Shannon 3. |
Një përgjigje pa stream raporton stop ose tool_calls.
Përdorimi
| Fusha | Lloji | Përshkrimi | I disponueshëm në |
|---|---|---|---|
usage.prompt_tokens | integer | Tokens-at e hyrjes. | Të gjitha modelet |
usage.completion_tokens | integer | Tokens-at e daljes: arsyetimi, përgjigjja dhe thirrjet e mjeteve së bashku. | Të gjitha modelet |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Të gjitha modelet |
usage.prompt_tokens_details.cached_tokens | integer | Pjesa e prompt_tokens që u lexua nga cache-i i prompt-it. | Modele open-weight të hostuara |
usage.completion_tokens_details.reasoning_tokens | integer | Pjesa e completion_tokens që u shpenzua për arsyetim. | Modele open-weight të hostuara |
Te modelet open-weight të hostuara, prompt_tokens janë mesazhet dhe përkufizimet tuaja të mjeteve të numëruara me tokenizuesin e vetë modelit, plus tokens-at e çdo imazhi. Endpoint-et e numërimit të tokens-ave kthejnë të njëjtin numër para se të dërgoni. Numërimi i tokens-ave
Te nivelet Shannon, prompt_tokens numëron gjithçka që modeli lexoi për të shkruar përgjigjen, kështu që është më i madh se vetëm teksti i mesazheve tuaja.
Streaming
Me stream të vendosur në true përgjigjja arrin si ngjarje chat.completion.chunk dhe mbaron me data: [DONE]. Pjesa e fundit para tij mban finish_reason dhe usage; nuk nevojiten stream_options. Format e pjesëve, rreshtat keep-alive dhe gabimet brenda një stream-i kanë faqen e tyre. Transmetim
Gabimet
Një gabim është një objekt JSON me anëtar error. Kontrollet kryhen në këtë radhë: çelësi API, trupi i kërkesës, id-ja e modelit, pastaj bilanci. Tabela liston ato që ky endpoint kthen më shpesh. Lista e plotë, me atë që duhet provuar përsëri, ka faqen e vet. Trajtimi i gabimeve
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Statusi | Lloji | Mesazhi | Kur |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Nuk u dërgua çelës API, ose çelësi është i panjohur ose i shfuqizuar. |
400 | invalid_request_error | unknown model: <id> | model nuk është id e publikuar. |
400 | invalid_request_error | No user message provided | Nivelet Shannon: kërkesa nuk ka tekst përdoruesi dhe nuk ka tools. |
400 | invalid_request_error | <id> does not accept image input | Një pjesë imazhi iu dërgua një modeli open-weight të hostuar pa hyrje imazhi. |
400 | invalid_request_error | <id> does not accept response_format | response_format iu dërgua një modeli open-weight të hostuar pa dalje të strukturuar. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort mban një vlerë jashtë listës. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages mungon, ose një fushë ka lloj JSON të gabuar. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens është më i madh se ç'ka mbetur nga bilanci juaj. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Mbrojtja nga vërshimi i kërkesave: më shumë se 120 kërkesa në një minutë në llogarinë tuaj. |
500 | server_error | The model backend failed to answer. Please retry. | Modeli nuk prodhoi përgjigje. Dërgoni kërkesën përsëri. |
502 | api_error | The model backend failed to answer. Please retry. | I njëjti, te familja Shannon 3 dhe modelet open-weight të hostuara. |