Vai al contenuto
Chat Completions

Chat Completions

POST /v1/chat/completions accetta una conversazione e restituisce il messaggio successivo del modello nel formato OpenAI Chat Completions. Usalo da qualsiasi SDK OpenAI o con semplice HTTP; questa pagina è il riferimento campo per campo.

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

La richiesta più piccola è un id di modello e un messaggio dell'utente.

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)

La risposta è un oggetto 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

Header della richiesta

Header Valore Descrizione
Authorization Bearer YOUR_API_KEY La tua chiave API. In alternativa, su ogni endpoint è accettato x-api-key: YOUR_API_KEY.
Content-Type application/json Obbligatorio. Qualsiasi altro valore restituisce 415.
x-request-id Facoltativo. Un tuo id per la richiesta. Torna invariato nella risposta.

Header della risposta

Header Descrizione
x-request-id Su ogni risposta, compresi errori e stream: il valore che hai inviato, oppure 12 caratteri esadecimali se non ne hai inviato nessuno. Citalo quando segnali un problema.
content-type application/json, oppure text/event-stream quando stream è true.

Campi della richiesta

Solo messages è obbligatorio. La colonna Applicato da indica i modelli su cui un campo cambia la risposta. I modelli open-weight ospitati sono i dodici id dell'elenco dei modelli; la famiglia Shannon 3 è shannon-3, shannon-3-pro, shannon-3.1 e shannon-3.1-pro. Modelli e prezzi

Campo Tipo Default Descrizione Applicato da
model string shannon-1.6-lite Il modello che risponde: un id dall'elenco dei modelli. Invialo a ogni richiesta. La corrispondenza non distingue maiuscole e minuscole. Un id non pubblicato restituisce 400 unknown model. Tutti i modelli
messages array Obbligatorio. La conversazione, dal messaggio più vecchio. Vedi Messaggi più sotto. Tutti i modelli
stream boolean false true invia la risposta come server-sent events man mano che viene scritta. Tutti i modelli
max_tokens integer 4096 Limite massimo della risposta, in token. Un valore fuori dall'intervallo da 1 a 65,536 viene riportato dentro l'intervallo. È anche la quantità messa da parte dal tuo saldo mentre la richiesta è in corso. Vedi Lunghezza dell'output più sotto. Modelli open-weight ospitati, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Come max_tokens. Se vengono inviati entrambi, si usa max_tokens. Modelli open-weight ospitati, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperatura di campionamento. Sui modelli open-weight ospitati il default è 1 e i valori sono mantenuti tra 0 e 2. Modelli open-weight ospitati, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Campionamento nucleus. I valori sono mantenuti tra 0 e 1. Modelli open-weight ospitati
seed integer Seed del campionatore, un intero qualsiasi. Senza di esso, il seed è derivato dal modello e dalla conversazione, quindi la stessa richiesta inviata due volte usa lo stesso seed. Modelli open-weight ospitati
stop string | array Una stringa o un array di stringhe. Se ne usano al massimo 4. La risposta termina prima della prima che compare; il testo di stop stesso non viene restituito. Modelli open-weight ospitati
reasoning_effort string high Quanto ragiona il modello prima di rispondere: off, low, medium o high. none e minimal equivalgono a off, default equivale a medium, max equivale a high. Qualsiasi altro valore restituisce 400. Modelli open-weight ospitati
reasoning object La stessa impostazione in forma di oggetto: {"effort": "low"}. Se vengono inviati entrambi, si usa reasoning_effort. Modelli open-weight ospitati
tools array Le funzioni che il modello può chiamare, ciascuna come {"type": "function", "function": {"name", "description", "parameters"}}. Le chiamate del modello tornano in tool_calls; le esegue il tuo codice. Tutti i modelli
tool_choice string | object auto "auto" lascia decidere il modello. "required" lo obbliga a chiamare un tool. {"type": "function", "function": {"name": "…"}} lo obbliga a chiamare quel tool. Modelli open-weight ospitati
response_format object {"type": "json_object"} per una risposta JSON, oppure {"type": "json_schema", "json_schema": {…}} per una risposta che segue il tuo schema. Tutti i livelli Shannon; modelli open-weight ospitati come indicato per ogni id
web_search boolean false true permette al modello di cercare sul web prima di rispondere. shannon-1.6-*, shannon-2-*, famiglia Shannon 3

Altri campi OpenAI, come n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store e prompt_cache_key, sono accettati così il codice client esistente funziona senza modifiche. Non cambiano la risposta: c'è sempre una sola choice, e uno stream termina sempre con l'utilizzo.

Un campo con il tipo JSON sbagliato, per esempio "max_tokens": "100", restituisce 422. Lo stesso vale per una richiesta senza messages.

Tool, output strutturato, ragionamento e ricerca web hanno ciascuno una pagina propria: Chiamata di funzioni, Output strutturati, Sforzo di ragionamento, Ricerca web integrata.

Una richiesta con opzioni

Questa richiesta imposta un messaggio di sistema, i campi di campionamento e lo sforzo di ragionamento. Usa un modello open-weight ospitato, che li applica tutti.

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)

La risposta ha la stessa forma di quella sopra. Il suo usage aggiunge due dettagli sui modelli open-weight ospitati: i token del prompt letti dalla cache e i token spesi per il ragionamento.

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

Lunghezza dell'output

max_tokens fa due cose. Primo, è il numero di token messi da parte dal tuo saldo quando la richiesta inizia. Quando la risposta è completa, quella quantità viene sostituita dai token effettivamente usati dalla richiesta. Se max_tokens è maggiore di ciò che resta del tuo saldo, la richiesta restituisce 429 Quota exceeded anche se la risposta stessa ci sarebbe stata. Invia un max_tokens più basso per mettere da parte meno.

shannon-coder-1 su questo endpoint è conteggiato in modo diverso: ogni richiesta è una delle chiamate Shannon Coder del tuo piano e non viene messo da parte alcun token. Limiti e saldo

Secondo, limita la lunghezza della risposta su questi modelli:

Modelli Cosa fa max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 La risposta si ferma quando raggiunge il limite. Uno stream termina allora con finish_reason length.
Modelli open-weight ospitati Il testo della risposta si ferma a max_tokens. Il ragionamento non viene conteggiato. I valori inferiori a 256 valgono come 256.

Senza max_tokens o max_completion_tokens, il valore è 4,096. Su shannon-coder-1 è 65,536.

Messaggi

Ogni messaggio è un oggetto con un role e un content. content è una stringa, oppure un array di parti quando il messaggio contiene più del solo testo.

Ruolo Descrizione Applicato da
system Istruzioni per il modello. Mettilo per primo. Sui livelli Shannon viene usato il primo messaggio system. Modelli open-weight ospitati, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Letto come system. Modelli open-weight ospitati
user Ciò che chiedi. Sui livelli Shannon l'ultimo messaggio user è il prompt e i messaggi che lo precedono sono la cronologia. Tutti i modelli
assistant Le risposte precedenti del modello. Mantieni i suoi tool_calls quando invii dopo di essi un risultato di tool. Tutti i modelli
tool Il risultato di una chiamata a un tool: tool_call_id contiene l'id della chiamata e content il risultato come stringa. Tutti i modelli

Con un id della famiglia Shannon 3, inserisci nel messaggio user le istruzioni che devono valere.

Sui livelli Shannon una richiesta senza testo dell'utente e senza tools restituisce 400 No user message provided.

Parti di contenuto

Parte Descrizione Disponibile su
{"type": "text", "text": "…"} Testo semplice. Tutti i modelli
{"type": "image_url", "image_url": {"url": "…"}} Un'immagine, come URL data: con contenuto base64 oppure come URL http(s). Famiglia Shannon 3, shannon-1.6-lite, shannon-1.6-pro e i modelli open-weight ospitati che prevedono l'input di immagini
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Un documento (PDF, Word, PowerPoint o Excel), in base64 o tramite URL. Famiglia Shannon 3

Dimensioni, limiti e l'elenco completo delle forme hanno una pagina propria. Immagini e file

L'oggetto della risposta

Campo Tipo Descrizione
id string chatcmpl- seguito da 32 caratteri esadecimali.
object string Sempre chat.completion.
created integer Ora della risposta, in secondi Unix.
model string L'id canonico del modello che ha risposto. Può differire nella grafia dall'id che hai inviato.
choices array Sempre esattamente una choice, con index 0.
choices[0].message.role string Sempre assistant.
choices[0].message.content string | null Il testo della risposta. Con tool_calls è null sui livelli Shannon; i modelli open-weight ospitati possono inviare testo accanto alle chiamate.
choices[0].message.reasoning_content string | null Il ragionamento che il modello ha scritto prima della risposta, oppure null se non ce n'è.
choices[0].message.tool_calls array Presente solo quando il modello chiama dei tool. Ogni voce ha un id, type function e function con il name e gli arguments come stringa JSON.
choices[0].message.annotations array Solo su una richiesta con web_search: true la cui ricerca ha trovato qualcosa. Un url_citation per ogni fonte nominata da un marcatore in content, con url, title, start_index e end_index (la posizione del marcatore, contata in caratteri, fine esclusa).
choices[0].finish_reason string Perché la risposta è terminata. Vedi Motivi di conclusione.
usage object I token della richiesta. Vedi Utilizzo.
sources array Solo su una richiesta con web_search: true la cui ricerca ha trovato qualcosa: i risultati dati al modello, ciascuno con index, title e url. [1] nella risposta è la voce con index 1.

Motivi di conclusione

finish_reason Descrizione
stop Il modello ha concluso la risposta, oppure è comparsa una stringa stop.
tool_calls Il modello chiama uno o più tool. Eseguili e invia i risultati in messaggi tool.
length La risposta è stata troncata al limite di output. Riportato negli stream di shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 e della famiglia Shannon 3.

Una risposta senza streaming riporta stop o tool_calls.

Utilizzo

Campo Tipo Descrizione Disponibile su
usage.prompt_tokens integer Token di input. Tutti i modelli
usage.completion_tokens integer Token di output: ragionamento, risposta e chiamate a tool insieme. Tutti i modelli
usage.total_tokens integer prompt_tokens più completion_tokens. Tutti i modelli
usage.prompt_tokens_details.cached_tokens integer La parte di prompt_tokens che è stata letta dalla prompt cache. Modelli open-weight ospitati
usage.completion_tokens_details.reasoning_tokens integer La parte di completion_tokens che è stata spesa per il ragionamento. Modelli open-weight ospitati

Sui modelli open-weight ospitati, prompt_tokens sono i tuoi messaggi e le definizioni dei tool contati con il tokenizer del modello stesso, più i token delle eventuali immagini. Gli endpoint di conteggio dei token restituiscono lo stesso numero prima dell'invio. Conteggio dei token

Sui livelli Shannon, prompt_tokens conta tutto ciò che il modello ha letto per scrivere la risposta, quindi è maggiore del solo testo dei tuoi messaggi.

Streaming

Con stream impostato su true la risposta arriva come eventi chat.completion.chunk e termina con data: [DONE]. L'ultimo chunk prima di esso porta finish_reason e usage; non servono stream_options. Le forme dei chunk, le righe keep-alive e gli errori all'interno di uno stream hanno una pagina propria. Streaming

Errori

Un errore è un oggetto JSON con un membro error. I controlli vengono eseguiti in quest'ordine: chiave API, corpo della richiesta, id del modello, poi saldo. La tabella elenca ciò che questo endpoint restituisce più spesso. L'elenco completo, con cosa riprovare, ha una pagina propria. Gestione errori

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Stato Tipo Messaggio Quando
401 authentication_error Missing authentication
Invalid API key
Non è stata inviata alcuna chiave API, oppure la chiave è sconosciuta o revocata.
400 invalid_request_error unknown model: <id> model non è un id pubblicato.
400 invalid_request_error No user message provided Livelli Shannon: la richiesta non contiene testo dell'utente né tools.
400 invalid_request_error <id> does not accept image input È stata inviata una parte immagine a un modello open-weight ospitato senza input di immagini.
400 invalid_request_error <id> does not accept response_format response_format è stato inviato a un modello open-weight ospitato senza output strutturato.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort contiene un valore fuori dall'elenco.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages manca, oppure un campo ha il tipo JSON sbagliato.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens è maggiore di ciò che resta del tuo saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: più di 120 richieste in un minuto sul tuo account.
500 server_error The model backend failed to answer. Please retry. Il modello non ha prodotto una risposta. Invia di nuovo la richiesta.
502 api_error The model backend failed to answer. Please retry. Lo stesso, sulla famiglia Shannon 3 e sui modelli open-weight ospitati.