Fleeexdocs

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 400 qui 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 un 400 casserait là une intégration sans rien apporter.

Honorés

Transmis au modèle, et facturés en conséquence.

ParamètreNotes
modelUn identifiant du catalogue ou un alias. Voir Choisir un modèle.
messagesRô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_choicetool_choice vaut 'auto', 'required', ou { type: 'function', function: { name } }. Voir Appel de fonctions.
response_formatLa forme json_schema. Voir Sortie structurée.
max_completion_tokens / max_tokensEntier de 1 à 32 768. Vaut 1024 par défaut. Voir plus bas.
temperature0 à 2.
top_p0 à 1.
stopUne chaîne, ou jusqu'à 4 chaînes.
streamtrue renvoie un flux SSE de chunks iso-OpenAI. Voir Streaming.
stream_options.include_usageAjoute 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ètreAccepté àPourquoi cela ne change rien
usern'importe quelle chaîneLe 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.
metadatatout enregistrement bornéNi transmis, ni stocké.
storetrue ou falseFleeex 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.
n1 uniquementUne complétion par requête.
logit_bias{} uniquement
frequency_penalty0 uniquementLa valeur par défaut d'OpenAI, et le comportement du fournisseur.
presence_penalty0 uniquementIdem.
logprobsfalse uniquement
response_format{ type: 'text' }La valeur par défaut d'OpenAI ne demande rien, donc rien n'est transmis.
image_url.detail'auto' uniquementLa valeur par défaut d'OpenAI, purement décorative.
json_schema.stricttrue ou falseLe 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ètrePourquoi
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.
seedLa 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 à 1Exactement une complétion est produite par requête.
un logit_bias non videChangerait la sortie.
un frequency_penalty / presence_penalty non nulIdem.
logprobs: trueNon 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 toolsRien parmi quoi choisir.
function.strict, et tout sous-champ non déclaré d'un outilNon 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: trueCe 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.

réponse 400
{
  "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ête1 Mo (un corps plus gros donne un 413), 32 niveaux d'imbrication au maximum
messagesde 1 à 200 entrées
content256 000 caractères par message, ou par partie de texte ; 20 parties au maximum
Images8 au maximum par requête, chacune se décodant en 512 Ko au maximum. Voir Vision
tools128 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_calls32 par message au maximum ; chaque arguments 32 768 caractères au maximum ; tool_call_id 128 au maximum
json_schemaname 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.