Chat completions
Génère une réponse conversationnelle à partir d'une liste de messages. Endpoint principal de la plateforme, compatible avec le format openai.chat.completions.create. Supporte le streaming SSE.
Endpoint#endpoint
openai Python et Node.js fonctionne immédiatement en pointant base_url sur notre domaine. Aucune réécriture nécessaire. Paramètres requête#params
| Champ | Description |
|---|---|
model string requis | Identifiant du modèle : <code>3gk-llm</code> (alias stable, découplé du modèle sous-jacent). La liste complète est exposée par GET /v1/models. ex. "3gk-llm" |
messages array<Message> requis | Historique de la conversation. Rôles supportés : "system", "user", "assistant", "tool". |
effort "off" | "low" | "medium" | "high" défaut "off" | Extension 3GK. Règle l'effort de raisonnement (chain-of-thought) de <code>3gk-llm</code>. Raisonnement opt-in : off par défaut (configurable côté admin). Voir le tableau dédié ci-dessous. Inconnu ⇒ 400 invalid_request. |
reasoning_effort "minimal" | "low" | "medium" | "high" | Alias standard OpenAI de effort (minimal ⇒ low). Ignoré si effort est présent (effort prime). Inconnu ⇒ 400 invalid_request. |
stream boolean défaut false | Si true, la réponse est envoyée en Server-Sent Events. Voir Streaming SSE. |
background boolean défaut false | Extension 3GK. Si true, la requête est acceptée immédiatement (202 + identifiant job_…) et exécutée en arrière-plan ; le résultat se récupère via GET /v1/jobs/{id}. Incompatible avec stream. Voir Jobs asynchrones. |
temperature number · 0.0 → 2.0 défaut 0.7 | Contrôle la créativité. Valeurs basses pour des sorties déterministes, hautes pour de la variété. |
max_tokens integer défaut 1024 | Budget de réponse (hors raisonnement). Cf. encart "Réconciliation max_tokens" ci-dessous. max_completion_tokens accepté en alias OpenAI. |
top_p number · 0.0 → 1.0 défaut 1.0 | Nucleus sampling. Alternative à temperature. |
stop string | string[] | Séquences qui interrompent la génération. |
seed integer | Améliore la reproductibilité (best-effort, non garanti). |
user string | Identifiant opaque de l'utilisateur final. Utile pour le débogage côté admin. |
presence_penalty, frequency_penalty, logit_bias, response_format, tools, tool_choice, etc.). Leur comportement dépend du modèle cible. 524). Deux parades : le streaming SSE (tant que le premier token arrive vite), ou le mode asynchrone background: true — soumission immédiate puis récupération par polling. Voir Jobs asynchrones. Paliers d'effort
Le paramètre effort contrôle l'effort de raisonnement chain-of-thought de 3gk-llm (modèle à raisonnement). Le client choisit un palier — le budget de tokens raisonnement est figé côté gateway et ne peut pas être réglé directement. Le raisonnement est opt-in : sans effort ni reasoning_effort, le palier appliqué est off (défaut configurable côté admin).
| effort | Thinking | Budget raisonnement |
|---|---|---|
off (défaut) | désactivé | — |
low | activé | 1 024 tokens |
medium | activé | 4 096 tokens |
high | activé | 16 384 tokens |
Vous pouvez aussi utiliser le paramètre standard OpenAI reasoning_effort (minimal | low | medium | high) pour réactiver le raisonnement sans le champ propriétaire effort : minimal est mappé sur low. Si les deux sont fournis, effort prime.
Réconciliation max_tokens
Côté backend, max_tokens plafonne le total raisonnement + réponse. Pour vous éviter de soustraire vous-même le budget de raisonnement, la gateway traite votre max_tokens comme le budget de réponse uniquement et ajoute le budget de raisonnement avant de relayer :
- Si
max_tokensabsent : valeur par défaut1024. - Pour
effort: off: pas d'ajout, on relaie votre valeur (ou le défaut) telle quelle, et le raisonnement est désactivé en amont (enable_thinking=false). max_completion_tokens(alias OpenAI récent) prime surmax_tokenssi les deux sont fournis.- Cette réconciliation s'applique uniquement aux modèles qui supportent le thinking (c'est le cas de
3gk-llm). Pour les autres, votremax_tokenspasse inchangé.
effort est honoré de la même façon : activation/désactivation du raisonnement (enable_thinking) et réconciliation de max_tokens identiques. Seule réserve : le plafonnement strict du raisonnement (thinking_token_budget) n'est pas garanti côté Scaleway — la longueur du raisonnement peut donc varier, mais votre budget de réponse reste préservé. X-3GK-Backend (primary = infrastructure nominale, fallback = secours) et X-3GK-Resolved-Model indiquant l'identifiant public du modèle servi. Utile pour vérifier qu'une requête est bien servie en nominal plutôt qu'en secours. Exemples#exemples
from openai import OpenAI client = OpenAI( base_url="https://ai.3gks.cloud/v1", api_key="sk-3gk-7XQp4kL8…", ) response = client.chat.completions.create( model="3gk-llm", messages=[ {"role": "system", "content": "Tu es un assistant pour courtier en assurance."}, {"role": "user", "content": "Résume ce contrat : …"}, ], temperature=0.3, max_tokens=512, ) print(response.choices[0].message.content)
Format de réponse#response
Réponse JSON conforme à l'API OpenAI. L'identifiant id est préfixé 3gk-cmpl- suivi de 24 caractères aléatoires — utilisez-le pour corréler avec les logs admin en cas de support.
{
"id": "3gk-cmpl-7XQp4kL8mNfRtQzVa2bC3dE4",
"object": "chat.completion",
"created": 1715761712,
"model": "3gk-llm",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Le contrat couvre la responsabilité civile…"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 412,
"completion_tokens": 248,
"total_tokens": 660
}
} Sur les paliers low / medium / high, le champ choices[].message.reasoning et usage.completion_tokens_details.reasoning_tokens sont également retournés. En effort: off, ces champs sont strippés.
Codes de réponse#status
choices.background: true : job accepté, réponse {id: "job_…", status: "queued"}. Résultat via GET /v1/jobs/{id}.model ou messages absent).3gk-llm ou consultez GET /v1/models.Pour le détail du format d'erreur et des stratégies de retry, voir Codes d'erreur.
Routage & fallback#routing
Les requêtes chat.completions sont routées par défaut vers nos instances vLLM locales (GPU hébergés en France). Si l'administrateur a configuré un mode fallback ou auto et que les instances vLLM sont indisponibles, le trafic bascule vers Scaleway Generative APIs (Paris, FR). Aucune donnée ne sort du territoire français.
502 / 504) sans retry automatique. Pour basculer en Scaleway, l'administrateur doit activer le mode auto ou forceFallback. 