DémarrerCompatibilité OpenAI
Compatibilité OpenAI
La gateway implémente strictement le contrat openai.chat.completions. Les SDK officiels Python et Node.js fonctionnent sans modification de code applicatif : il suffit de pointer base_url sur notre domaine.
Principe#principe
Le format de requête et de réponse, les codes d'erreur, les messages Server-Sent Events sont identiques à ceux d'OpenAI. Votre application existante peut migrer vers 3GK en remplaçant deux variables d'environnement : OPENAI_BASE_URL et OPENAI_API_KEY.
Bibliothèques tierces. Tout outil qui se branche sur l'API OpenAI (LangChain, LlamaIndex, Continue, Aider, Cursor, etc.) est compatible. Il suffit que l'outil accepte un
base_url personnalisable. SDK officiels#sdks
Python
openai >= 1.40.0
SDK officiel OpenAI. Pointer
base_url sur notre domaine.Node.js / TypeScript
openai >= 4.50.0
SDK officiel OpenAI · typings inclus.
Go
github.com/sashabaranov/go-openai
SDK communautaire maintenu, compatible 3GK.
Exemple Python#exemple
openai>=1.40.0
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)
Différences à connaître#differences
- Pas de fine-tuning, files, batch, assistants — nous exposons uniquement
chat/completionsetmodels. - Pas de génération d'image / audio en V1 publique. En entrée, les parts
image_urletinput_audiosont acceptées mais doivent être en ligne : data URL base64 (png,jpeg,webp,gif) ou audio base64 (wav,mp3). Une URLhttp(s)distante est refusée en400, contrairement à OpenAI. - Liste blanche de paramètres : seuls les paramètres OpenAI connus sont relayés au moteur d'inférence. Les autres — extensions du moteur (
best_of,min_tokens,ignore_eos,guided_json,chat_template_kwargs…) comme les champs inconnus — sont acceptés sans erreur puis silencieusement ignorés. Quatre exceptions validées et relayées (route nominale vLLM uniquement) :top_k,min_p,repetition_penaltyetparallel_tool_calls— hors bornes, elles sont refusées en400au lieu d'être ignorées. La liste exacte figure sur Chat completions. - Contraintes propres à la passerelle :
nest plafonné à 4 (au-delà ⇒400),streametbackgroundexigent de vrais booléens (la chaîne"true"est refusée, jamais convertie), etstream_optionsn'accepte queinclude_usage. - Plafond de sortie :
max_tokens(etmax_completion_tokens) est borné par un plafond de plateforme — 4 096 tokens aujourd'hui, administrable. Au-delà, la valeur est ramenée au plafond sans erreur : la réponse s'arrête surfinish_reason: "length"et porte l'en-têteX-3GK-Output-Tokens-Capped. OpenAI, lui, honore votre valeur jusqu'à la limite du modèle. Voir Chat completions. - Pas de quotas exposés dans les headers (
X-RateLimit-*non émis) — la modération se fait au niveau infrastructure. - Extension propriétaire : un champ
effortdans le body règle l'effort de raisonnement chain-of-thought de3gk-llm(paliersoff/low/medium/high). Raisonnement opt-in : défautoff. Le paramètre standardreasoning_effortest accepté comme alias. Voir Chat completions. - Extension propriétaire : un champ
background: truedans le body dechat/completionsexécute la requête en tâche de fond (202+job_…, résultat par pollingGET /v1/jobs/{id}) — indispensable au-delà de ~100 s de génération non streamée. Voir Jobs asynchrones.
