Paramètres pris en charge
Le protocole est iso-OpenAI et la surface de paramètres en est un sous-ensemble documenté. Ce qui est honoré, ce qui est accepté sans effet, et ce qui donne un 400 qui le nomme.
chat.completions.create prend le type de requête d'OpenAI : TypeScript vous laissera
donc renseigner n'importe quel champ déclaré par OpenAI. Ce que le proxy Fleeex accepte à
l'intérieur de cette requête est plus étroit : un large sous-ensemble, mais un
sous-ensemble. Cette page en donne la liste.
L'échec est bruyant plutôt que discret. Une seule règle décide du sort d'un paramètre :
Un paramètre qui changerait la réponse, la facturation ou une garantie que Fleeex laisserait entendre donne un
400qui le nomme, car l'ignorer en silence vous remettrait une mauvaise réponse que vous ne pourriez pas détecter. Un paramètre qui ne change rien d'observable est accepté et ignoré, car un400casserait là une intégration sans rien apporter.
Honorés
Transmis au modèle, et facturés en conséquence.
| Paramètre | Notes |
|---|---|
model | Un identifiant du catalogue ou un alias. Voir Choisir un modèle. |
messages | Rôles system, user, assistant, tool. content est une chaîne ou un tableau de parties text / image_url. Comprend tool_call_id sur un message tool et tool_calls rejoués sur un message assistant. |
tools, tool_choice | tool_choice vaut 'auto', 'required', ou { type: 'function', function: { name } }. Voir Appel de fonctions. |
response_format | La forme json_schema. Voir Sortie structurée. |
max_completion_tokens / max_tokens | Entier de 1 à 32 768. Vaut 1024 par défaut. Voir plus bas. |
temperature | 0 à 2. |
top_p | 0 à 1. |
stop | Une chaîne, ou jusqu'à 4 chaînes. |
stream | true renvoie un flux SSE de chunks iso-OpenAI. Voir Streaming. |
stream_options.include_usage | Ajoute le chunk d'usage final. Exige stream: true. Voir Usage en streaming. |
Acceptés sans effet
Validés, puis ignorés, car ils ne changent rien d'observable. Le SDK OpenAI, LangChain, LiteLLM et le SDK Vercel AI en envoient plusieurs par défaut : les refuser coûterait donc une intégration sans rien apporter.
| Paramètre | Accepté à | Pourquoi cela ne change rien |
|---|---|---|
user | n'importe quelle chaîne | Le couple facturé est la clé d'API vérifiée plus x-fleeex-user. Un champ du corps ne doit jamais désigner un utilisateur. |
metadata | tout enregistrement borné | Ni transmis, ni stocké. |
store | true ou false | Fleeex ne conserve ni prompt ni contenu de complétion et n'expose aucun endpoint qui pourrait en renvoyer un : true n'a donc rien à changer. |
n | 1 uniquement | Une complétion par requête. |
logit_bias | {} uniquement | |
frequency_penalty | 0 uniquement | La valeur par défaut d'OpenAI, et le comportement du fournisseur. |
presence_penalty | 0 uniquement | Idem. |
logprobs | false uniquement | |
response_format | { type: 'text' } | La valeur par défaut d'OpenAI ne demande rien, donc rien n'est transmis. |
image_url.detail | 'auto' uniquement | La valeur par défaut d'OpenAI, purement décorative. |
json_schema.strict | true ou false | Le fournisseur contraint la sortie sans condition, puisqu'il n'a pas de mode non strict : strict: false obtient donc une garantie plus forte que celle promise par OpenAI, jamais une plus faible. |
Un champ décoratif à une seule valeur voit cette valeur épinglée plutôt que d'être laissé
passer : n: 1 est décoratif, n: 2 demande deux complétions qui ne sont pas produites,
et n'en renvoyer qu'une serait à la fois une mauvaise réponse et une question de
facturation.
Un null explicite se lit comme « non renseigné » sur tout champ optionnel. C'est ainsi
que plusieurs clients OpenAI sérialisent un champ qu'ils n'ont pas posé : il est donc
normalisé plutôt que transmis.
Refusés : un 400 qui nomme le paramètre
| Paramètre | Pourquoi |
|---|---|
un model non pris en charge ou désactivé | Absent du catalogue. Le message renvoie en écho la valeur que vous avez envoyée, pas celle vers laquelle un alias pointait. |
seed | La configuration d'inférence du fournisseur n'a ni graine ni équivalent portable. L'accepter en silence annoncerait une reproductibilité que Fleeex ne peut pas tenir. |
n supérieur à 1 | Exactement une complétion est produite par requête. |
un logit_bias non vide | Changerait la sortie. |
un frequency_penalty / presence_penalty non nul | Idem. |
logprobs: true | Non produit. |
tool_choice: 'none' | Le fournisseur n'a aucun moyen d'exposer les outils tout en en interdisant l'usage. Retirer les outils changerait à la fois la réponse et les tokens d'entrée facturés ; ignorer le champ laisserait le modèle appeler un outil que vous aviez interdit. Envoyez plutôt la requête sans tools. |
tool_choice sans tools | Rien parmi quoi choisir. |
function.strict, et tout sous-champ non déclaré d'un outil | Non implémenté ; voir json_schema.strict plus haut, qui est un autre champ. |
response_format: { type: 'json_object' } | Il n'existe pas de mode JSON sans schéma sur lequel le projeter, et toute approximation serait malhonnête de façon indétectable. Envoyez un json_schema, comme l'indique le message. |
un image_url.url qui n'est pas une URI data: | Fleeex devrait aller le chercher côté serveur, sur le chemin de facturation. Envoyez data:image/png;base64,…. Voir Vision. |
un image_url.detail autre que 'auto' | low et high sélectionnent une autre tokenisation de l'image : ils changeraient la réponse et les tokens facturés. |
stream_options sans stream: true | Ce paramètre n'existe que dans le protocole de streaming. |
| tout élément non déclaré | Y compris une clé inconnue imbriquée dans stream_options, dans un outil ou dans json_schema. |
Le message nomme chaque paramètre refusé et liste les paramètres acceptés, lus sur le schéma de requête lui-même : rien de tout cela n'a donc à être découvert par tâtonnement.
{
"error": {
"code": "BAD_REQUEST",
"message": "Unsupported parameter: 'seed'. Accepted: model, messages, max_completion_tokens, …",
"correlationId": "…"
}
}max_completion_tokens dimensionne la réservation
max_completion_tokens est le nom actuel chez OpenAI, max_tokens le nom déprécié. Les
deux sont acceptés, et le nouveau nom l'emporte si vous envoyez les deux. Aucun des deux
n'est un simple plafond posé au modèle : ce nombre dimensionne aussi la réservation que
Fleeex pose sur le portefeuille avant d'appeler le fournisseur. Une valeur inutilement
grande peut donc se transformer en 402 sur un portefeuille qui aurait couvert la réponse
réelle. La valeur par défaut est 1024.
Limites
Des bornes de taille, pour qu'aucun champ ne puisse être arbitrairement gros. Toutes
donnent un 400.
| Limite | |
|---|---|
| Corps de requête | 1 Mo (un corps plus gros donne un 413), 32 niveaux d'imbrication au maximum |
messages | de 1 à 200 entrées |
content | 256 000 caractères par message, ou par partie de texte ; 20 parties au maximum |
| Images | 8 au maximum par requête, chacune se décodant en 512 Ko au maximum. Voir Vision |
tools | 128 au maximum ; name 64 caractères au maximum sur [A-Za-z0-9_-] ; description 4 096 au maximum ; parameters un objet JSON, 16 384 caractères sérialisés au maximum et 10 niveaux de profondeur |
tool_calls | 32 par message au maximum ; chaque arguments 32 768 caractères au maximum ; tool_call_id 128 au maximum |
json_schema | name 64 caractères au maximum sur [A-Za-z0-9_-] ; schema un objet JSON, 16 384 caractères sérialisés au maximum et 10 niveaux de profondeur ; description 4 096 au maximum |
La version toujours à jour
Cette page suit la description OpenAPI de la route elle-même,
POST /v1/chat/completions, générée à partir du schéma de requête et donc faisant
autorité. Si les deux venaient à diverger, c'est la route qui l'emporte.