Aller au contenu
Chat Completions

Chat Completions

POST /v1/chat/completions prend une conversation et renvoie le message suivant du modèle au format OpenAI Chat Completions. Utilisez-le depuis n'importe quel SDK OpenAI ou en HTTP brut ; cette page est la référence champ par champ.

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

La plus petite requête est un id de modèle et un message utilisateur.

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 réponse est un objet 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
  }
}

En-têtes

En-têtes de requête

En-tête Valeur Description
Authorization Bearer YOUR_API_KEY Votre clé API. x-api-key: YOUR_API_KEY est accepté à sa place sur chaque point de terminaison.
Content-Type application/json Obligatoire. Toute autre valeur renvoie 415.
x-request-id Facultatif. Votre propre id pour la requête. Il revient inchangé dans la réponse.

En-têtes de réponse

En-tête Description
x-request-id Sur chaque réponse, erreurs et flux compris : la valeur que vous avez envoyée, ou 12 caractères hexadécimaux si vous n'en avez envoyé aucune. Citez-la quand vous signalez un problème.
content-type application/json, ou text/event-stream quand stream vaut true.

Champs de requête

Seul messages est obligatoire. La colonne Appliqué par nomme les modèles sur lesquels un champ modifie la réponse. Les modèles open-weight hébergés sont les douze ids de la liste des modèles ; la famille Shannon 3 comprend shannon-3, shannon-3-pro, shannon-3.1 et shannon-3.1-pro. Modèles et tarifs

Champ Type Par défaut Description Appliqué par
model string shannon-1.6-lite Le modèle qui répond : un id de la liste des modèles. Envoyez-le avec chaque requête. La correspondance ne tient pas compte de la casse. Un id non publié renvoie 400 unknown model. Tous les modèles
messages array Obligatoire. La conversation, message le plus ancien en premier. Voir Messages ci-dessous. Tous les modèles
stream boolean false true envoie la réponse sous forme de server-sent events pendant qu'elle est écrite. Tous les modèles
max_tokens integer 4096 Limite supérieure de la réponse, en tokens. Une valeur hors de 1 à 65,536 est ramenée dans cette plage. C'est aussi le montant réservé sur votre solde pendant l'exécution de la requête. Voir Longueur de sortie ci-dessous. Modèles open-weight hébergés, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Identique à max_tokens. Quand les deux sont envoyés, max_tokens est utilisé. Modèles open-weight hébergés, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Température d'échantillonnage. Sur les modèles open-weight hébergés, la valeur par défaut est 1 et les valeurs sont maintenues entre 0 et 2. Modèles open-weight hébergés, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Échantillonnage par noyau (nucleus sampling). Les valeurs sont maintenues entre 0 et 1. Modèles open-weight hébergés
seed integer Graine de l'échantillonneur, n'importe quel entier. Sans elle, la graine est dérivée du modèle et de la conversation : la même requête envoyée deux fois utilise donc la même graine. Modèles open-weight hébergés
stop string | array Une chaîne ou un tableau de chaînes. Jusqu'à 4 sont utilisées. La réponse s'arrête avant la première qui apparaît ; le texte d'arrêt lui-même n'est pas renvoyé. Modèles open-weight hébergés
reasoning_effort string high Combien le modèle raisonne avant de répondre : off, low, medium ou high. none et minimal signifient off, default signifie medium, max signifie high. Toute autre valeur renvoie 400. Modèles open-weight hébergés
reasoning object Le même réglage sous forme d'objet : {"effort": "low"}. Quand les deux sont envoyés, reasoning_effort est utilisé. Modèles open-weight hébergés
tools array Les fonctions que le modèle peut appeler, chacune sous la forme {"type": "function", "function": {"name", "description", "parameters"}}. Les appels du modèle reviennent dans tool_calls ; votre code les exécute. Tous les modèles
tool_choice string | object auto "auto" laisse le modèle décider. "required" l'oblige à appeler un outil. {"type": "function", "function": {"name": "…"}} l'oblige à appeler cet outil. Modèles open-weight hébergés
response_format object {"type": "json_object"} pour une réponse JSON, ou {"type": "json_schema", "json_schema": {…}} pour une réponse qui suit votre schéma. Tous les niveaux Shannon ; modèles open-weight hébergés selon la liste par id
web_search boolean false true permet au modèle de chercher sur le web avant de répondre. shannon-1.6-*, shannon-2-*, famille Shannon 3

D'autres champs OpenAI, comme n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store et prompt_cache_key, sont acceptés pour que le code client existant fonctionne sans changement. Ils ne modifient pas la réponse : il y a toujours un seul choix, et un flux se termine toujours par l'utilisation.

Un champ avec un mauvais type JSON, par exemple "max_tokens": "100", renvoie 422. Une requête sans messages aussi.

Les outils, la sortie structurée, le raisonnement et la recherche web ont chacun leur propre page : Appel de fonction, Résultats structurés, Effort de raisonnement, Recherche Web intégrée.

Une requête avec des options

Cette requête définit un message système, les champs d'échantillonnage et l'effort de raisonnement. Elle utilise un modèle open-weight hébergé, qui les applique tous.

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 réponse a la même forme que ci-dessus. Son usage ajoute deux détails sur les modèles open-weight hébergés : les tokens de prompt lus dans le cache et les tokens dépensés en raisonnement.

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

Longueur de sortie

max_tokens fait deux choses. D'abord, c'est le nombre de tokens réservés sur votre solde au début de la requête. Quand la réponse est terminée, ce montant est remplacé par les tokens que la requête a utilisés. Si max_tokens est supérieur à ce qui reste de votre solde, la requête renvoie 429 Quota exceeded même si la réponse elle-même aurait tenu. Envoyez un max_tokens plus bas pour réserver moins.

shannon-coder-1 est compté différemment sur ce point de terminaison : chaque requête est l'un des appels Shannon Coder de votre forfait, et aucun token n'est réservé pour elle. Limites et solde

Ensuite, il limite la longueur de la réponse sur ces modèles :

Modèles Ce que fait max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 La réponse s'arrête quand elle atteint la limite. Un flux se termine alors avec finish_reason length.
Modèles open-weight hébergés Le texte de la réponse s'arrête à max_tokens. Le raisonnement n'est pas décompté. Les valeurs inférieures à 256 valent 256.

Sans max_tokens ni max_completion_tokens, la valeur est 4,096. Sur shannon-coder-1, elle est 65,536.

Messages

Chaque message est un objet avec un role et un content. content est une chaîne, ou un tableau de parties quand le message porte plus que du texte.

Rôle Description Appliqué par
system Instructions pour le modèle. Placez-le en premier. Sur les niveaux Shannon, c'est le premier message system qui est utilisé. Modèles open-weight hébergés, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Lu comme system. Modèles open-weight hébergés
user Ce que vous demandez. Sur les niveaux Shannon, le dernier message user est le prompt et les messages qui le précèdent sont l'historique. Tous les modèles
assistant Réponses précédentes du modèle. Conservez ses tool_calls quand vous envoyez un résultat d'outil après. Tous les modèles
tool Le résultat d'un appel d'outil : tool_call_id contient l'id de l'appel et content le résultat sous forme de chaîne. Tous les modèles

Avec un id de la famille Shannon 3, placez les instructions qui doivent être respectées dans le message user.

Sur les niveaux Shannon, une requête sans texte utilisateur et sans tools renvoie 400 No user message provided.

Parties de contenu

Partie Description Disponible sur
{"type": "text", "text": "…"} Texte brut. Tous les modèles
{"type": "image_url", "image_url": {"url": "…"}} Une image, sous forme d'URL data: avec contenu base64 ou d'URL http(s). Famille Shannon 3, shannon-1.6-lite, shannon-1.6-pro, et les modèles open-weight hébergés qui acceptent les images en entrée
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Un document (PDF, Word, PowerPoint ou Excel), en base64 ou par URL. Famille Shannon 3

Les tailles, les limites et la liste complète des formes ont leur propre page. Images et fichiers

L'objet de réponse

Champ Type Description
id string chatcmpl- suivi de 32 caractères hexadécimaux.
object string Toujours chat.completion.
created integer Heure de la réponse, en secondes Unix.
model string L'id canonique du modèle qui a répondu. Son orthographe peut différer de l'id que vous avez envoyé.
choices array Toujours exactement un choix, avec index 0.
choices[0].message.role string Toujours assistant.
choices[0].message.content string | null Le texte de la réponse. Avec tool_calls, il vaut null sur les niveaux Shannon ; les modèles open-weight hébergés peuvent envoyer du texte à côté des appels.
choices[0].message.reasoning_content string | null Le raisonnement que le modèle a écrit avant la réponse, ou null s'il n'y en a pas.
choices[0].message.tool_calls array Présent uniquement quand le modèle appelle des outils. Chaque entrée a un id, un type function, et function avec le name et les arguments sous forme de chaîne JSON.
choices[0].message.annotations array Seulement sur une requête avec web_search: true dont la recherche a trouvé quelque chose. Un url_citation pour chaque source qu'un repère dans content nomme, avec url, title, start_index et end_index (la position du repère, comptée en caractères, fin non incluse).
choices[0].finish_reason string Pourquoi la réponse s'est terminée. Voir Raisons de fin.
usage object Les tokens de la requête. Voir Utilisation.
sources array Seulement sur une requête avec web_search: true dont la recherche a trouvé quelque chose : les résultats remis au modèle, chacun avec index, title et url. [1] dans la réponse est l'entrée dont index vaut 1.

Raisons de fin

finish_reason Description
stop Le modèle a terminé sa réponse, ou une chaîne stop est apparue.
tool_calls Le modèle appelle un ou plusieurs outils. Exécutez-les et envoyez les résultats dans des messages tool.
length La réponse a été coupée à la limite de sortie. Indiqué dans les flux de shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 et de la famille Shannon 3.

Une réponse hors streaming indique stop ou tool_calls.

Utilisation

Champ Type Description Disponible sur
usage.prompt_tokens integer Tokens d'entrée. Tous les modèles
usage.completion_tokens integer Tokens de sortie : raisonnement, réponse et appels d'outil ensemble. Tous les modèles
usage.total_tokens integer prompt_tokens plus completion_tokens. Tous les modèles
usage.prompt_tokens_details.cached_tokens integer La partie de prompt_tokens qui a été lue dans le cache du prompt. Modèles open-weight hébergés
usage.completion_tokens_details.reasoning_tokens integer La partie de completion_tokens qui a été dépensée en raisonnement. Modèles open-weight hébergés

Sur les modèles open-weight hébergés, prompt_tokens correspond à vos messages et définitions d'outils comptés avec le tokenizer propre au modèle, plus les tokens des éventuelles images. Les points de terminaison de comptage de tokens renvoient le même nombre avant l'envoi. Décompte de tokens

Sur les niveaux Shannon, prompt_tokens compte tout ce que le modèle a lu pour écrire la réponse ; il est donc supérieur au seul texte de vos messages.

Streaming

Avec stream à true, la réponse arrive sous forme d'événements chat.completion.chunk et se termine par data: [DONE]. Le dernier chunk avant celui-ci porte finish_reason et usage ; aucun stream_options n'est nécessaire. Les formes de chunk, les lignes keep-alive et les erreurs dans un flux ont leur propre page. Diffusion en continu

Erreurs

Une erreur est un objet JSON avec un membre error. Les vérifications s'exécutent dans cet ordre : clé API, corps de la requête, id du modèle, puis solde. Le tableau liste ce que ce point de terminaison renvoie le plus souvent. La liste complète, avec ce qu'il faut réessayer, a sa propre page. Gestion des erreurs

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Statut Type Message Quand
401 authentication_error Missing authentication
Invalid API key
Aucune clé API n'a été envoyée, ou la clé est inconnue ou révoquée.
400 invalid_request_error unknown model: <id> model n'est pas un id publié.
400 invalid_request_error No user message provided Niveaux Shannon : la requête n'a ni texte utilisateur ni tools.
400 invalid_request_error <id> does not accept image input Une partie image a été envoyée à un modèle open-weight hébergé sans entrée image.
400 invalid_request_error <id> does not accept response_format response_format a été envoyé à un modèle open-weight hébergé sans sortie structurée.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort contient une valeur hors de la liste.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages est absent, ou un champ a un mauvais type JSON.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens est supérieur à ce qui reste de votre solde.
429 rate_limit_error Too many requests. Retry in <n>s. Protection anti-flood : plus de 120 requêtes en une minute sur votre compte.
500 server_error The model backend failed to answer. Please retry. Le modèle n'a pas produit de réponse. Renvoyez la requête.
502 api_error The model backend failed to answer. Please retry. Idem, sur la famille Shannon 3 et les modèles open-weight hébergés.