Sari la conținut
Chat Completions

Chat Completions

POST /v1/chat/completions primește o conversație și returnează următorul mesaj al modelului în formatul OpenAI Chat Completions. Folosește-l din orice SDK OpenAI sau prin HTTP simplu; această pagină este referința câmp cu câmp.

POST https://api.shannon-ai.com/v1/chat/completions

Cea mai mică cerere este un id de model și un mesaj de utilizator.

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)

Răspunsul este un singur obiect JSON:

200 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-e

Header-e de cerere

Header Valoare Descriere
Authorization Bearer YOUR_API_KEY Cheia ta API. x-api-key: YOUR_API_KEY este acceptat în locul ei pe fiecare endpoint.
Content-Type application/json Obligatoriu. Orice altă valoare returnează 415.
x-request-id Opțional. Propriul tău id pentru cerere. Se întoarce neschimbat în răspuns.

Header-e de răspuns

Header Descriere
x-request-id Pe fiecare răspuns, inclusiv erori și stream-uri: valoarea trimisă de tine sau 12 caractere hexazecimale dacă nu ai trimis niciuna. Menționeaz-o când raportezi o problemă.
content-type application/json sau text/event-stream când stream este true.

Câmpuri de cerere

Doar messages este obligatoriu. Coloana Aplicat de indică modelele pe care un câmp modifică răspunsul. Modelele open-weight găzduite sunt cele douăsprezece id-uri din lista de modele; familia Shannon 3 este shannon-3, shannon-3-pro, shannon-3.1 și shannon-3.1-pro. Modele și prețuri

Câmp Tip Implicit Descriere Aplicat de
model string shannon-1.6-lite Modelul care răspunde: un id din lista de modele. Trimite-l la fiecare cerere. Potrivirea nu ține cont de majuscule. Un id care nu este publicat returnează 400 unknown model. Toate modelele
messages array Obligatoriu. Conversația, cu cel mai vechi mesaj primul. Vezi Mesaje mai jos. Toate modelele
stream boolean false true trimite răspunsul ca server-sent events pe măsură ce este scris. Toate modelele
max_tokens integer 4096 Limita superioară a răspunsului, în token-uri. O valoare în afara intervalului 1 – 65,536 este mutată în acel interval. Este și cantitatea rezervată din soldul tău cât timp rulează cererea. Vezi Lungimea ieșirii mai jos. Modele open-weight găzduite, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer La fel ca max_tokens. Când sunt trimise ambele, se folosește max_tokens. Modele open-weight găzduite, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperatura de eșantionare. Pe modelele open-weight găzduite valoarea implicită este 1, iar valorile sunt păstrate între 0 și 2. Modele open-weight găzduite, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Eșantionare nucleus. Valorile sunt păstrate între 0 și 1. Modele open-weight găzduite
seed integer Seed-ul eșantionatorului, orice număr întreg. Fără el, seed-ul este derivat din model și din conversație, deci aceeași cerere trimisă de două ori folosește același seed. Modele open-weight găzduite
stop string | array Un șir de caractere sau o matrice de șiruri. Se folosesc cel mult 4. Răspunsul se încheie înainte de primul care apare; textul de oprire în sine nu este returnat. Modele open-weight găzduite
reasoning_effort string high Cât raționează modelul înainte să răspundă: off, low, medium sau high. none și minimal înseamnă off, default înseamnă medium, max înseamnă high. Orice altă valoare returnează 400. Modele open-weight găzduite
reasoning object Aceeași setare sub formă de obiect: {"effort": "low"}. Când sunt trimise ambele, se folosește reasoning_effort. Modele open-weight găzduite
tools array Funcțiile pe care modelul le poate apela, fiecare sub forma {"type": "function", "function": {"name", "description", "parameters"}}. Apelurile modelului revin în tool_calls; codul tău le rulează. Toate modelele
tool_choice string | object auto "auto" lasă modelul să decidă. "required" îl obligă să apeleze un instrument. {"type": "function", "function": {"name": "…"}} îl obligă să apeleze acel instrument. Modele open-weight găzduite
response_format object {"type": "json_object"} pentru un răspuns JSON sau {"type": "json_schema", "json_schema": {…}} pentru un răspuns care urmează schema ta. Toate nivelurile Shannon; modelele open-weight găzduite conform listei pe id
web_search boolean false true permite modelului să caute pe web înainte de a răspunde. shannon-1.6-*, shannon-2-*, familia Shannon 3

Alte câmpuri OpenAI, precum n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store și prompt_cache_key, sunt acceptate astfel încât codul client existent să ruleze neschimbat. Ele nu modifică răspunsul: există întotdeauna o singură alegere (choice), iar un stream se încheie întotdeauna cu utilizarea.

Un câmp cu tipul JSON greșit, de exemplu "max_tokens": "100", returnează 422. La fel și o cerere fără messages.

Instrumentele, ieșirea structurată, raționamentul și căutarea web au fiecare propria pagină: Apelare funcții, Rezultate structurate, Efort de raționament, Căutare web integrată.

O cerere cu opțiuni

Această cerere setează un mesaj de sistem, câmpurile de eșantionare și efortul de raționament. Folosește un model open-weight găzduit, care le aplică pe toate.

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)

Răspunsul are aceeași formă ca mai sus. usage adaugă două detalii pe modelele open-weight găzduite: token-urile de prompt citite din cache și token-urile consumate pentru raționament.

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

Lungimea ieșirii

max_tokens face două lucruri. În primul rând, este numărul de token-uri rezervat din soldul tău la începutul cererii. Când răspunsul este complet, această sumă este înlocuită cu token-urile folosite de cerere. Dacă max_tokens este mai mare decât ce a rămas din soldul tău, cererea returnează 429 Quota exceeded chiar dacă răspunsul în sine ar fi încăput. Trimite un max_tokens mai mic pentru a rezerva mai puțin.

shannon-coder-1 este numărat diferit pe acest endpoint: fiecare cerere este unul dintre apelurile Shannon Coder ale planului tău și nu se rezervă token-uri pentru ea. Limite și sold

În al doilea rând, limitează lungimea răspunsului pe aceste modele:

Modele Ce face max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Răspunsul se oprește când atinge limita. Un stream se încheie atunci cu finish_reason length.
Modele open-weight găzduite Textul răspunsului se oprește la max_tokens. Raționamentul nu se numără în acesta. Valorile sub 256 sunt tratate ca 256.

Fără max_tokens sau max_completion_tokens, valoarea este 4,096. Pe shannon-coder-1 este 65,536.

Mesaje

Fiecare mesaj este un obiect cu un role și un content. content este un șir de caractere sau o matrice de părți atunci când mesajul conține mai mult decât text.

Rol Descriere Aplicat de
system Instrucțiuni pentru model. Pune-l primul. Pe nivelurile Shannon se folosește primul mesaj system. Modele open-weight găzduite, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Citit ca system. Modele open-weight găzduite
user Ce întrebi. Pe nivelurile Shannon, ultimul mesaj user este prompt-ul, iar mesajele dinaintea lui sunt istoricul. Toate modelele
assistant Răspunsurile anterioare ale modelului. Păstrează tool_calls ale acestuia când trimiți după el un rezultat de instrument. Toate modelele
tool Rezultatul unui apel de instrument: tool_call_id conține id-ul apelului, iar content rezultatul ca șir de caractere. Toate modelele

Cu un id din familia Shannon 3, pune instrucțiunile care trebuie respectate în mesajul user.

Pe nivelurile Shannon, o cerere fără text de la utilizator și fără tools returnează 400 No user message provided.

Părți de conținut

Parte Descriere Disponibil pe
{"type": "text", "text": "…"} Text simplu. Toate modelele
{"type": "image_url", "image_url": {"url": "…"}} O imagine, ca URL data: cu conținut base64 sau ca URL http(s). Familia Shannon 3, shannon-1.6-lite, shannon-1.6-pro și modelele open-weight găzduite care acceptă imagini la intrare
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Un document (PDF, Word, PowerPoint sau Excel), ca base64 sau prin URL. Familia Shannon 3

Dimensiunile, limitele și lista completă a formelor au propria pagină. Imagini și fișiere

Obiectul răspuns

Câmp Tip Descriere
id string chatcmpl- urmat de 32 de caractere hexazecimale.
object string Întotdeauna chat.completion.
created integer Momentul răspunsului, în secunde Unix.
model string Id-ul canonic al modelului care a răspuns. Poate diferi ca ortografie de id-ul trimis de tine.
choices array Întotdeauna exact o alegere (choice), cu index 0.
choices[0].message.role string Întotdeauna assistant.
choices[0].message.content string | null Textul răspunsului. Împreună cu tool_calls este null pe nivelurile Shannon; modelele open-weight găzduite pot trimite text alături de apeluri.
choices[0].message.reasoning_content string | null Raționamentul scris de model înaintea răspunsului sau null dacă nu există.
choices[0].message.tool_calls array Prezent doar când modelul apelează instrumente. Fiecare intrare are un id, type function și function cu name și arguments ca șir JSON.
choices[0].message.annotations array Doar la o cerere cu web_search: true a cărei căutare a găsit ceva. Câte un url_citation pentru fiecare sursă numită de un marcaj din content, cu url, title, start_index și end_index (poziția marcajului, numărată în caractere, sfârșitul nu este inclus).
choices[0].finish_reason string Motivul pentru care s-a încheiat răspunsul. Vezi Motive de încheiere.
usage object Token-urile cererii. Vezi Utilizare.
sources array Doar la o cerere cu web_search: true a cărei căutare a găsit ceva: rezultatele date modelului, fiecare cu index, title și url. [1] din răspuns este intrarea cu index 1.

Motive de încheiere

finish_reason Descriere
stop Modelul și-a încheiat răspunsul sau a apărut un șir stop.
tool_calls Modelul apelează unul sau mai multe instrumente. Rulează-le și trimite rezultatele în mesaje tool.
length Răspunsul a fost tăiat la limita de ieșire. Raportat în stream-urile pentru shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 și familia Shannon 3.

Un răspuns fără streaming raportează stop sau tool_calls.

Utilizare

Câmp Tip Descriere Disponibil pe
usage.prompt_tokens integer Token-uri de intrare. Toate modelele
usage.completion_tokens integer Token-uri de ieșire: raționament, răspuns și apeluri de instrumente la un loc. Toate modelele
usage.total_tokens integer prompt_tokens plus completion_tokens. Toate modelele
usage.prompt_tokens_details.cached_tokens integer Partea din prompt_tokens care a fost citită din cache-ul de prompt. Modele open-weight găzduite
usage.completion_tokens_details.reasoning_tokens integer Partea din completion_tokens care a fost consumată pentru raționament. Modele open-weight găzduite

Pe modelele open-weight găzduite, prompt_tokens reprezintă mesajele și definițiile tale de instrumente, numărate cu tokenizatorul propriu al modelului, plus token-urile imaginilor, dacă există. Endpoint-urile de numărare a token-urilor returnează același număr înainte să trimiți cererea. Numărarea token-urilor

Pe nivelurile Shannon, prompt_tokens numără tot ce a citit modelul pentru a scrie răspunsul, deci este mai mare decât textul mesajelor tale luat singur.

Streaming

Cu stream setat la true, răspunsul sosește ca evenimente chat.completion.chunk și se încheie cu data: [DONE]. Ultimul chunk dinaintea lui poartă finish_reason și usage; nu este nevoie de stream_options. Formele chunk-urilor, liniile keep-alive și erorile din interiorul unui stream au propria pagină. Streaming

Erori

O eroare este un obiect JSON cu un membru error. Verificările rulează în această ordine: cheia API, corpul cererii, id-ul modelului, apoi soldul. Tabelul listează ce returnează cel mai des acest endpoint. Lista completă, cu ce merită reîncercat, are propria pagină. Gestionare erori

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Stare Tip Mesaj Când
401 authentication_error Missing authentication
Invalid API key
Nu a fost trimisă nicio cheie API sau cheia este necunoscută ori revocată.
400 invalid_request_error unknown model: <id> model nu este un id publicat.
400 invalid_request_error No user message provided Niveluri Shannon: cererea nu are text de la utilizator și nici tools.
400 invalid_request_error <id> does not accept image input O parte de tip imagine a fost trimisă unui model open-weight găzduit care nu acceptă imagini la intrare.
400 invalid_request_error <id> does not accept response_format response_format a fost trimis unui model open-weight găzduit fără ieșire structurată.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort conține o valoare din afara listei.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages lipsește sau un câmp are tipul JSON greșit.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens este mai mare decât ce a rămas din soldul tău.
429 rate_limit_error Too many requests. Retry in <n>s. Protecție anti-flood: mai mult de 120 de cereri într-un minut pe contul tău.
500 server_error The model backend failed to answer. Please retry. Modelul nu a produs un răspuns. Trimite cererea din nou.
502 api_error The model backend failed to answer. Please retry. La fel, pe familia Shannon 3 și pe modelele open-weight găzduite.