Skip to main content

Chat completion

POST/v1/chat/completions

La route /chat/completions permet de générer une réponse à partir d’un échange conversationnel structuré en messages (system, user, assistant). Elle est adaptée aux cas d’usage simples de type chatbot, avec un historique clair et un schéma proche des premières API OpenAI.

Attention

Cette route est progressivement amenée à être remplacée par /responses, plus flexible et plus complète.

Structure

Chaque requête doit inclure un JSON similaire à :

Corps de requête
{
"model": "ClovisLLM",
"messages": [
{ "role": "system", "content": "Tu es un assistant utile." },
{ "role": "user", "content": "Explique-moi ce qu’est une API." }
],
"temperature": 0.7,
"max_tokens": 2000
}

Description des champs

ChampTypeObligatoireDescription
modelint✔️Nom du modèle
messagesarray✔️Historique des messages
temperaturefloatCréativité (0 = déterministe)
max_tokensintLimite de tokens générés
top_pfloatNucleus sampling
nintNombre de réponses
streambooleanStreaming de la réponse
stopstringarrayToken(s) d’arrêt
presence_penaltyfloatDécourage répétitions de sujets
frequency_penaltyfloatDécourage répétitions de mots
userstringIdentifiant utilisateur
response_formatobject{ "type": "json_object"}, pour forcer une réponse bien formée.

Réponse de l'API

Tableau principal de la réponse

ChampTypeDescription
idstringIdentifiant unique de la requête (utile pour debug / logs).
objectstringType d’objet retourné ("chat.completion").
createdint (timestamp)Timestamp UNIX (en secondes).
modelstringLe modèle effectivement utilisé.
choicesarrayListe des complétions générées (une ou plusieurs).
usageobjectCompte des tokens utilisés.
system_fingerprintstring (optionnel)Identifiant interne du modèle (utile pour déboguer).

Détail du champ choices

ChampTypeDescription
indexintNuméro de la réponse (0 = première).
messageobject{ "role": "assistant", "content": "…" } – la vraie réponse du modèle.
finish_reasonstringRaison de l’arrêt de la génération (voir tableau 2.2.2).
provider_specific_fieldsobjectMétadonnées du backend (latence, modèle réel, etc.).

Valeurs de finish_reason

ValeurSignification
stopRéponse terminée naturellement (fin du texte ou fin logique).
lengthArrêté car la limite max_tokens a été atteinte.
content_filterArrêté par un filtre de sécurité / modération.
function_callAppel d’une fonction / outil (API function calling).
tool_callsMême chose mais au format tools.
nullEn cours de streaming partiel ou erreur interne.

Détails du champ usage

ChampTypeDescription
prompt_tokensintNombre de tokens utilisés pour la demande (messages envoyés).
completion_tokensintNombre de tokens générés dans la réponse.
total_tokensintSomme des deux précédents.

Détails du sous‑objet message

ChampTypeDescription
rolestringRôle du message : system, user, assistant, function, tool.
contentstringTexte du message (ce que dit le rôle).

À quoi sert le champ role ?

ValeurQui parle ?Utilisation typiqueExemple
systemLe concepteur / le cadre de l’assistantDonne le contexte, le ton et les règles de comportement du modèle."Tu es un assistant Clovis, toujours poli et concis."
userL’utilisateur finalMessage envoyé par l’humain (question, demande, instruction)."Explique‑moi ce qu’est un blob Azure."
assistantLe modèleReprésente la réponse précédente du modèle (utile pour garder l’historique)."Un blob Azure est un objet de stockage de données..."
functionRésultat d’une fonction (ancienne syntaxe)Sortie d’une fonction appelée par le modèle (remplacé par tool dans les versions récentes)."Résultat de la recherche : 3 documents trouvés."
toolRésultat d’un outil externeUtilisé dans le cadre du function calling ou d’appels d’API externes.{"title":"Rapport.pdf"}

Résumé rapide

Corps de requête
{
"id": "string",
"object": "chat.completion",
"created": 1700000000,
"model": "ClovisLLM",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "…" },
"finish_reason": "stop",
"provider_specific_fields": { /* … */ }
}
],
"usage": {
"prompt_tokens": 123,
"completion_tokens": 456,
"total_tokens": 579
},
"system_fingerprint": "optional‑string"
}

(Les champs peuvent varier légèrement selon le fournisseur d’API : OpenAI, Azure, Anthropic, etc.)

Exemples d’utilisation

curl https://llm-gateway.clovis-ai.fr/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer sk-xxxxxxxx"
-d '{
"model": "ClovisLLM",
"messages": [
{"role": "system", "content": "Tu es un assistant utile."},
{"role": "user", "content": "Explique-moi ce qu’est une API."}
],
"temperature": 0.7
}'