# OPENAICHAT

## Aperçu

L’application de **workflow OPENAICHAT** vous permet d’interagir avec des modèles de **chat IA** provenant de plusieurs fournisseurs, notamment OpenAI, Mistral AI, Google Gemini et Anthropic Claude.

## Mode de fonctionnement

* L'application vous permet d'interagir avec les modèles de complétion.
* Des logs d'application sont disponibles. Ceux-ci peuvent être spécifiés en définissant la valeur du paramètre `OpenAIChatLogLevel` dans le fichier `web.config` sur `0` pour désactiver la journalisation, `1` pour les logs d'erreur, `2` pour des logs d'informations ou `3` pour les logs de débogage; la valeur par défaut est `0`.

## Fournisseurs supportés

<table><thead><tr><th width="206.264892578125">Fournisseur</th><th width="207.47296142578125">Format d’API</th><th>URL par défaut</th></tr></thead><tbody><tr><td>OpenAI</td><td>Natif</td><td><code>https://api.openai.com/v1/chat/completions</code></td></tr><tr><td>Mistral AI</td><td>Compatible OpenAI</td><td><code>https://api.mistral.ai/v1/chat/completions</code></td></tr><tr><td>Google Gemini</td><td>Compatible OpenAI</td><td><code>https://generativelanguage.googleapis.com/v1beta/openai/chat/completions</code></td></tr><tr><td>Anthropic Claude</td><td>Natif</td><td><code>https://api.anthropic.com/v1/messages</code></td></tr></tbody></table>

Le fournisseur est détecté automatiquement à partir de l’URL de l’API, mais il peut être défini explicitement à l’aide du paramètre `PROVIDER` (voir le tableau des paramètres facultatifs ci-dessous).

### Fournisseurs compatible OpenAI

L’application OPENAICHAT détecte automatiquement les fournisseurs compatibles OpenAI et les supporte en fonction de l’URL de l’API.

Pour les fournisseurs qui utilisent le format d’API compatible OpenAI (Mistral AI, Google Gemini), vous pouvez définir le paramètre `URL` (ou le paramètre d’URL d’API du fournisseur dans le fichier `web.config`) avec le point de terminaison du fournisseur.

{% hint style="warning" %}
Pour **Anthropic Claude**, qui utilise une API native différente, définissez soit `URL` avec un point de terminaison Anthropic (détection automatique), soit `PROVIDER = anthropic` explicitement.
{% endhint %}

### Paramètres de configuration de l’API du fournisseur

<table><thead><tr><th width="279.69512939453125" valign="top">Paramètre</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>OpenAIApiKey</code></td><td valign="top">Clé d’API OpenAI</td></tr><tr><td valign="top"><code>OpenAIChatApiUrl</code></td><td valign="top">Point de terminaison de l’API OpenAI</td></tr><tr><td valign="top"><code>MistralApiKey</code></td><td valign="top">Clé d’API Mistral AI (requise pour Mistral)</td></tr><tr><td valign="top"><code>MistralChatApiUrl</code></td><td valign="top">Point de terminaison de l’API Mistral AI<br><strong>Par défaut :</strong> <code>https://api.mistral.ai/v1/chat/completions</code></td></tr><tr><td valign="top"><code>GeminiApiKey</code></td><td valign="top">Clé d’API Google Gemini (requise pour Gemini)</td></tr><tr><td valign="top"><code>GeminiChatApiUrl</code></td><td valign="top"><p>Point de terminaison de l’API Google Gemini</p><p><strong>Par défaut :</strong> <code>https://generativelanguage.googleapis.com/v1beta/openai/chat/completions</code> <br><strong>Note :</strong> Ce point de terminaison est en version bêta et peut être modifié lors de la mise en disponibilité générale (GA).</p></td></tr><tr><td valign="top"><code>AnthropicApiKey</code></td><td valign="top">Clé d’API Anthropic (requise pour Anthropic)</td></tr><tr><td valign="top"><code>AnthropicChatApiUrl</code></td><td valign="top">Point de terminaison de l’API Anthropic<br><strong>Par défaut :</strong> <code>https://api.anthropic.com/v1/messages</code></td></tr></tbody></table>

{% hint style="warning" %}
Chaque fournisseur nécessite sa propre clé d’API. Il n’existe aucun mécanisme de repli entre fournisseurs.
{% endhint %}

### Détection automatique du fournisseur

<table><thead><tr><th valign="top">Modèle d’URL</th><th valign="top">Fournisseur détecté</th></tr></thead><tbody><tr><td valign="top">Contient <code>api.anthropic.com</code></td><td valign="top">Anthropic</td></tr><tr><td valign="top">Contient <code>generativelanguage.googleapis.com</code></td><td valign="top">Gemini</td></tr><tr><td valign="top">Contient <code>api.mistral.ai</code></td><td valign="top">Mistral</td></tr><tr><td valign="top">Par défaut</td><td valign="top">OpenAI</td></tr></tbody></table>

### Fournisseurs compatibles

<table><thead><tr><th valign="top">Fournisseur</th><th valign="top">Type</th></tr></thead><tbody><tr><td valign="top">Azure OpenAI</td><td valign="top">Cloud</td></tr><tr><td valign="top">Ollama</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">vLLM</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">LocalAI</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">LM Studio</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">Together AI</td><td valign="top">Cloud</td></tr><tr><td valign="top">Groq</td><td valign="top">Cloud</td></tr><tr><td valign="top">Mistral AI</td><td valign="top">Cloud</td></tr><tr><td valign="top">OpenRouter</td><td valign="top">Cloud</td></tr></tbody></table>

{% hint style="warning" %}

* N’utilisez pas `MAX_COMPLETION_TOKENS` ni `REASONING_EFFORT` avec des fournisseurs autres qu’OpenAI, sauf si vous savez que le fournisseur supporte ces paramètres.
* Utilisez `MAX_TOKENS` pour définir les limites de jetons lorsque vous utilisez des fournisseurs autres qu’OpenAI.
* Certains fournisseurs peuvent ignorer les paramètres non supportés, tandis que d’autres peuvent retourner une erreur.
  {% endhint %}

## Paramètres requis

<table data-full-width="false"><thead><tr><th width="202" valign="top">Paramètre</th><th width="120.15960693359375" valign="top">Type</th><th width="120.0142822265625" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>MODEL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">ID du modèle à utiliser<br><br>Vous pouvez trouver les modèles disponibles au lien suivant : <a href="https://platform.openai.com/docs/models/">https://platform.openai.com/docs/models/</a> (page disponible en anglais uniquement); le point de terminaison utilisé par défaut est <code>/v1/chat/completions</code>.</td></tr></tbody></table>

Vous pouvez utiliser l'une des configurations suivantes : avec des messages système/utilisateur, avec un numéro de message ou avec un tableau de messages JSON.

### Avec des messages système/utilisateur

<table data-full-width="false"><thead><tr><th width="202" valign="top">Paramètre</th><th width="110.9002685546875" valign="top">Type</th><th width="111.46722412109375" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>SYSTEM_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message système</td></tr><tr><td valign="top"><code>USER_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message utilisateur</td></tr></tbody></table>

### Avec un numéro de message

<table data-full-width="false"><thead><tr><th width="203.17950439453125" valign="top">Paramètre</th><th width="110.18798828125" valign="top">Type</th><th width="112.179443359375" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>MESSAGE_ROLEx</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le type du message, où <code>x</code> correspond au numéro du message ; le la valeur doit être <code>assistant</code>, <code>system</code> ou <code>user</code></td></tr><tr><td valign="top"><code>MESSAGE_CONTENTx</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message utilisateur, où <code>x</code> correspond au numéro du message</td></tr></tbody></table>

### Avec un tableau de messages JSON

<table data-full-width="false"><thead><tr><th width="204.84893798828125" valign="top">Paramètre</th><th width="111.612548828125" valign="top">Type</th><th width="112.8917236328125" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>MESSAGE_JSON</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>L'objet de message du tableau JSON ; la structure doit correspondre à ce qui suit :</p><pre class="language-json"><code class="lang-json">[
    {
        "role": "assistant/system/user",
        "content": "First message content"
    },
    {
        "role": "assistant/system/user",
        "content": "Second message content"
    }
]
</code></pre></td></tr></tbody></table>

## Paramètres facultatifs

<table data-full-width="false"><thead><tr><th width="207.1766357421875" valign="top">Paramètres</th><th width="111.712158203125" valign="top">Type</th><th width="110.4102783203125" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>PROVIDER</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Force la sélection du fournisseur; s’il n’est pas défini, le fournisseur est détecté automatiquement à partir de l’URL<br><br><strong>Valeurs possibles :</strong> <code>openai</code>, <code>mistral</code>, <code>gemini</code> ou <code>anthropic</code></td></tr><tr><td valign="top"><code>API_KEY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Clé API OpenAI</p><p><br>Par défaut, cette valeur provient du paramètre <code>OpenAIApiKey</code> du fichier <code>web.config</code>.</p></td></tr><tr><td valign="top"><code>URL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Point de terminaison de l'API; cette valeur provient du paramètre <code>OpenAIChatApiUrl</code> dans le fichier <code>web.config</code>, s’il est défini</td></tr><tr><td valign="top"><code>TEMPERATURE</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Température d'échantillonnage, comprise entre <code>0</code> et <code>1</code>; la valeur par défaut est <code>1</code><br></p><p>Des valeurs plus élevées (par exemple <code>0.8</code>) rendront la sortie plus aléatoire, tandis que des valeurs plus faibles (par exemple <code>0.2</code>) la rendront plus ciblée et déterministe.</p></td></tr><tr><td valign="top"><code>TOP_P</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Une alternative à l'échantillonnage avec température, appelée échantillonnage de noyau, où le modèle prend en compte les résultats des jetons avec une masse de probabilité <code>top_p</code>. Ainsi, <code>0.1</code> signifie que seuls les jetons comprenant la masse de probabilité la plus élevée de 10 % sont pris en compte.</p><p>Par défaut : <code>1</code></p></td></tr><tr><td valign="top"><code>FREQUENCY_PENALTY</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Nombre compris entre <code>-2.0</code> et <code>2.0</code>. Les valeurs positives pénalisent les nouveaux jetons en fonction de leur fréquence existante dans le texte jusqu'à présent, réduisant ainsi la probabilité que le modèle répète mot pour mot la même ligne.</p><p>Par défaut : <code>0</code></p></td></tr><tr><td valign="top"><code>MAX_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Nombre maximum de jetons pouvant être générés dans la complétion de chat</p><p></p><p><strong>Par défaut :</strong> <code>256</code></p><p></p><p>✏️ <strong>Note :</strong> Pour les modèles de raisonnement (o1, o3, série GPT-5), utilisez <code>MAX_COMPLETION_TOKENS</code> à la place.<br>Si <code>MAX_TOKENS</code> et <code>MAX_COMPLETION_TOKENS</code> sont tous deux spécifiés, <code>MAX_COMPLETION_TOKENS</code> a priorité.</p></td></tr><tr><td valign="top"><code>MAX_COMPLETION_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Nombre maximum de jetons à générer dans la complétion</p><p></p><p>Ce paramètre est requis pour les modèles de raisonnement (o1, o3, série GPT-5) et a priorité sur <code>MAX_TOKENS</code> lorsque les deux sont spécifiés. Pour les modèles de raisonnement, cette valeur inclut à la fois les jetons de raisonnement et les jetons visibles de la complétion.</p></td></tr><tr><td valign="top"><code>REASONING_EFFORT</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Contrôle le niveau d’effort pour les modèles de raisonnement; applicable uniquement aux modèles de raisonnement (o1, o3, série GPT-5)</p><p></p><p><strong>Valeurs :</strong> <code>low</code>, <code>medium</code> ou <code>high</code></p><p></p><p>⚠️ <strong>Important :</strong> N’utilisez pas ce paramètre avec des modèles non orientés raisonnement (p.ex. GPT-4o, GPT-4-turbo), car cela provoquera une erreur de l’API.</p></td></tr><tr><td valign="top"><code>PRESENCE_PENALTY</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Numéro compris entre <code>-2.0</code> et <code>2.0</code> ; la valeur par défaut est <code>0</code><br></p><p>Les valeurs positives pénalisent les nouveaux jetons selon qu'ils apparaissent ou non dans le texte jusqu'à présent, augmentant ainsi la probabilité du modèle de parler de nouveaux sujets.</p></td></tr><tr><td valign="top"><code>RESPONSE_FORMAT</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Format de réponse : <code>text</code> , <code>json_object</code> ou <code>json_schema</code><br></p><p>Lorsque la valeur est <code>json_object</code>, l'invite système doit contenir le mot-clé JSON.<br>Lorsque la valeur est <code>json_schema</code>, il faut renseigner le schema attendu dans le paramètre <code>RESPONSE_FORMAT_JSON_SCHEMA</code>.</p></td></tr><tr><td valign="top"><code>RESPONSE_FORMAT_JSON_SCHEMA</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le schema JSON qui sera utilisé par le modèle pour répondre.<br>Voir la section <a href="#response_format_json_schema"><code>RESPONSE_FORMAT_JSON_SCHEMA</code></a> ci-dessous pour un exemple.</td></tr><tr><td valign="top"><code>APP_RESPONSE_IGNORE_ERROR</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Spécifie (<code>Y</code> ou <code>N</code>) si l'erreur doit être ignorée; la valeur par défaut est <code>N</code><br></p><p>En cas d'erreur, si le paramètre a <code>Y</code> comme valeur, l'erreur sera ignorée et les paramètres OUT définis (<code>APP_RESPONSE_STATUS</code> ou <code>APP_RESPONSE_CONTENT</code>) seront mappés. Sinon, une exception sera levée.</p></td></tr><tr><td valign="top"><code>TOOLS</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Listes des outils à dispositions du modèle, le format doit être en json et correspondre au format d'OpenAI : <a href="https://platform.openai.com/docs/api-reference/chat/create#chat-create-tools">https://platform.openai.com/docs/api-reference/chat/create#chat-create-tools</a><br>Voir la section <a href="#tools"><code>TOOLS</code></a> ci-dessous pour un exemple.</td></tr><tr><td valign="top"><code>TOOL_CHOICE_REQUIRED</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Spécifie si le modèle doit obligatoirement choisir un outil. Valeurs : <code>Y</code> ou <code>N</code> (par défaut)</td></tr><tr><td valign="top"><code>PARALLEL_TOOL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Spécifie si le modèle peut choisir plusieurs outils. Valeurs : <code>Y</code> (par défaut) ou <code>N</code></td></tr><tr><td valign="top"><code>MESSAGE_HISTORY</code></td><td valign="top">TEXT</td><td valign="top">INOUT</td><td valign="top"><p>L'historique des messages au format JSON. La structure de référence est celle de la documentation d'OpenAI pour l'objet <code>messages</code> </p><p><a href="https://platform.openai.com/docs/api-reference/chat/create#chat-create-messages">https://platform.openai.com/docs/api-reference/chat/create#chat-create-messages</a></p></td></tr><tr><td valign="top"><code>SELECTED_TOOLS</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">La liste des noms d'outils qui ont été sélectionnés, séparé par une virgule</td></tr><tr><td valign="top"><code>SELECTED_TOOLS_PARAM</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Tableau JSON représentant la liste des outils sélectionnés avec leurs paramètres. Voir la section <a href="#selected_tools_params"><code>SELECTED_TOOLS_PARAMS</code></a> ci-dessous pour un exemple de rendu.</td></tr><tr><td valign="top"><code>SELECTED_TOOLS_COUNT</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Le nombre d'outils sélectionnés</td></tr><tr><td valign="top"><code>RESULT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Appel de résultat du chat</td></tr><tr><td valign="top"><code>RESULT_CONTENT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Contenu du message de l'assistant</td></tr><tr><td valign="top"><code>RESULT_TOTAL_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Total des jetons utilisés pour la génération</td></tr><tr><td valign="top"><code>RESULT_COMPLETION_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Total des jetons utilisés pour la génération</td></tr><tr><td valign="top"><code>RESULT_PROMPT_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Total des jetons utilisés pour l'invite</td></tr><tr><td valign="top"><code>APP_RESPONSE_STATUS</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Code d'état de la réponse</td></tr><tr><td valign="top"><code>APP_RESPONSE_CONTENT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Charge utile de réponse ou message d'erreur</td></tr><tr><td valign="top"><code>USER_AUDIO</code></td><td valign="top">FILE</td><td valign="top">IN</td><td valign="top">Fichier audio local envoyé en entrée audio<br><br>WorkflowGen convertit le fichier en base64 avant d’envoyer la requête. Pris en charge par OpenAI (modèles compatibles audio uniquement), Mistral et Gemini.</td></tr><tr><td valign="top"><code>USER_DOCUMENT_URL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>URL d’un document à analyser</p><p><br>À utiliser de préférence avec le paramètre facultatif <code>USER_DOCUMENT_NAME</code>. Supporté par Mistral et Anthropic (URL de PDF uniquement pour Anthropic).</p></td></tr><tr><td valign="top"><code>USER_FILE_ID</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Identifiant de fichier renvoyé par l’API Files du fournisseur</p><p><br>À utiliser lorsque le fichier a déjà été téléversé en dehors d’OPENAICHAT. Supporté par OpenAI, Mistral et Anthropic.</p></td></tr><tr><td valign="top"><code>USER_FILE</code></td><td valign="top">FILE</td><td valign="top">IN</td><td valign="top"><p>Fichier local envoyé inline dans la requête de chat sous forme de contenu de fichier en base64</p><p><br>Aucune étape de téléversement préalable n’est requise. Supporté par OpenAI et Anthropic. Anthropic accepte actuellement uniquement les fichiers PDF et texte brut dans ce flux.</p></td></tr></tbody></table>

## Entrée multimodale

OPENAICHAT supporte l’entrée utilisateur multimodale via `USER_AUDIO`, `USER_DOCUMENT_URL`, `USER_FILE_ID` et `USER_FILE`.

Utilisez ces paramètres avec `USER_MESSAGE` pour indiquer au modèle quoi faire avec l’audio, le document ou le fichier joint.

### Support des fournisseurs

<table data-header-hidden><thead><tr><th>Fournisseur</th><th align="center" valign="middle">USER_AUDIO</th><th width="200.28204345703125" align="center" valign="middle">USER_DOCUMENT_URL</th><th align="center" valign="middle">USER_FILE_ID</th><th width="123.32049560546875" align="center">USER_FILE</th></tr></thead><tbody><tr><td>OpenAI</td><td align="center" valign="middle">Oui, avec des modèles compatibles audio</td><td align="center" valign="middle">Non</td><td align="center" valign="middle">Oui</td><td align="center">Oui</td></tr><tr><td>Mistral</td><td align="center" valign="middle">Oui</td><td align="center" valign="middle">Oui</td><td align="center" valign="middle">Oui</td><td align="center">Non</td></tr><tr><td>Gemini (OpenAI-compatible endpoint)</td><td align="center" valign="middle">Oui</td><td align="center" valign="middle">Non</td><td align="center" valign="middle">Non</td><td align="center">non</td></tr><tr><td>Anthropic</td><td align="center" valign="middle">Non</td><td align="center" valign="middle">Oui, pour les URLs de documents PDF</td><td align="center" valign="middle">Oui</td><td align="center">Oui, pour les fichiers PDF et texte brut</td></tr></tbody></table>

### Variantes indexées

Ces paramètres supportent également des variantes indexées lorsqu’un seul message utilisateur doit contenir plusieurs blocs de contenu.

#### 📌 Exemples

* `USER_AUDIO1`, `USER_AUDIO2`
* `USER_DOCUMENT_URL1`, `USER_DOCUMENT_URL2`
* `USER_FILE_ID1`, `USER_FILE_ID2`
* `USER_FILE1`, `USER_FILE2`

Utilisez `USER_DOCUMENT_NAME1`, `USER_DOCUMENT_NAME2`, etc., avec l’index correspondant de `USER_DOCUMENT_URL`.

{% hint style="info" %}

* Lorsque des paramètres multimodaux indexés sont utilisés, les versions non indexées de `USER_AUDIO`, `USER_DOCUMENT_URL`, `USER_FILE_ID` et `USER_FILE` sont ignorées.
* Si `USER_MESSAGE1` n’est pas fourni, le `USER_MESSAGE` non indexé peut tout de même être inclus comme premier bloc de texte.
* Si le fournisseur sélectionné ne supporte pas l’un de ces types de contenu, OPENAICHAT ignore ce contenu et écrit une entrée de journal informative (si la journalisation de l’application est activée).
  {% endhint %}

## Considérations spécifiques aux fournisseurs

### Disponibilité des paramètres selon le fournisseur

<table data-full-width="false"><thead><tr><th width="287.1766357421875">Paramètre</th><th width="114.906005859375" align="center">OpenAI</th><th width="115.92022705078125" align="center">Mistral</th><th width="115.0997314453125" align="center">Gemini</th><th width="116.30633544921875" align="center">Anthropic</th></tr></thead><tbody><tr><td><code>MODEL</code></td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td></tr><tr><td><code>SYSTEM_MESSAGE</code></td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td></tr><tr><td><code>USER_MESSAGE</code></td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td></tr><tr><td><code>TEMPERATURE</code></td><td align="center"><code>0</code>-<code>2</code></td><td align="center"><code>0</code>-<code>2</code></td><td align="center"><code>0</code>-<code>1</code></td><td align="center"><code>0</code>-<code>1</code></td></tr><tr><td><code>TOP_P</code></td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Non</td></tr><tr><td><code>MAX_TOKENS</code></td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Requis</td></tr><tr><td><code>TOOLS</code></td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td><td align="center">Oui</td></tr><tr><td><code>RESPONSE_FORMAT</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td><code>DEVELOPER_MESSAGE</code></td><td align="center">o1+ only</td><td align="center">No</td><td align="center">No</td><td align="center">No</td></tr><tr><td><code>MAX_COMPLETION_TOKENS</code></td><td align="center">o1+ only</td><td align="center">No</td><td align="center">No</td><td align="center">No</td></tr><tr><td><code>REASONING_EFFORT</code></td><td align="center">o1/o3</td><td align="center">No</td><td align="center">Mapped</td><td align="center">Mapped</td></tr><tr><td><code>FREQUENCY_PENALTY</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td><code>PRESENCE_PENALTY</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td><code>PARALLEL_TOOL</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr></tbody></table>

{% hint style="info" %}

* PLes paramètres non supportés par un fournisseur sont ignorés silencieusement.
* Les valeurs de `TEMPERATURE` supérieures à `1.0` sont plafonnées à `1.0` pour Gemini et Anthropic (Mistral supporte `0`–`2`).
* `REASONING_EFFORT` est mappé vers les configurations de raisonnement propres au fournisseur\
  `MAX_TOKENS` est requis pour Anthropic (non facultatif).
* Lorsque `REASONING_EFFORT` est utilisé avec Anthropic, `TEMPERATURE` et `TOP_P` sont ignorés (exigence de l’API).
  {% endhint %}

{% hint style="warning" %}
`TOP_P` n’est pas envoyé pour Anthropic, car les modèles Claude 4.5 n’autorisent pas l’utilisation simultanée de la température et de `top_p`.
{% endhint %}

## Modèles de raisonnement OpenAI

OpenAI propose des modèles de raisonnement (o1, o3, série GPT-5) qui utilisent un raisonnement interne avant de générer une réponse. Ces modèles ont des exigences spécifiques en matière de paramètres :

### Paramètres

<table><thead><tr><th valign="top">Paramètre</th><th>Description</th></tr></thead><tbody><tr><td valign="top"><code>MAX_COMPLETION_TOKENS</code> </td><td><strong>Requis pour les modèles de raisonnement.</strong> Spécifie le nombre maximum de jetons pour la complétion, incluant à la fois les jetons de raisonnement et les jetons de sortie visibles.</td></tr><tr><td valign="top"><code>REASONING_EFFORT</code></td><td><p><strong>Facultatif.</strong> Contrôle la profondeur du raisonnement : <code>low</code>, <code>medium</code> ou <code>high</code>.</p><p></p><p>Des valeurs plus élevées utilisent davantage de jetons de raisonnement, mais peuvent produire de meilleurs résultats.</p></td></tr></tbody></table>

{% hint style="warning" %}

* Utilisez `MAX_COMPLETION_TOKENS` au lieu de `MAX_TOKENS` pour les modèles de raisonnement. Le paramètre `MAX_TOKENS` est obsolète pour ces modèles.
* N’utilisez pas `REASONING_EFFORT` avec des modèles non orientés raisonnement (p.ex. GPT-4o, GPT-4-turbo). Ces modèles ne supportent pas ce paramètre et l’API renverra une erreur.
* Lorsque vous utilisez `REASONING_EFFORT`, définissez toujours `MAX_COMPLETION_TOKENS`. Si `REASONING_EFFORT` est spécifié sans `MAX_COMPLETION_TOKENS`, aucune limite de jetons n’est envoyée à l’API (l’API utilisera ses limites par défaut). Ce comportement est intentionnel, car les modèles de raisonnement rejettent le paramètre `MAX_TOKENS`.
* Les jetons de raisonnement ne sont pas visibles dans le contenu de la réponse, mais ils sont inclus dans le décompte des jetons et la facturation.
  {% endhint %}

### Paramètres de sortie

<table><thead><tr><th valign="top">Paramètre</th><th>Description</th></tr></thead><tbody><tr><td valign="top"><code>RESULT_REASONING_TOKENS</code></td><td><p>Nombre de jetons utilisés pour le raisonnement interne</p><p></p><p>Uniquement renseigné pour les modèles de raisonnement; renvoie <code>0</code> pour les autres modèles.</p></td></tr><tr><td valign="top"><code>RESULT_CACHED_TOKENS</code></td><td>Nombre de jetons de l’invite servis depuis le cache (s’applique à tous les modèles prenant en charge la mise en cache des invites)</td></tr></tbody></table>

### Exemple d’utilisation d’un modèle de raisonnement

```
MODEL = gpt-5-mini
USER_MESSAGE = "Solve this math problem: If a train travels 120 km in 2 hours, what is its average speed?"
MAX_COMPLETION_TOKENS = 500
REASONING_EFFORT = medium
```

#### Sortie

```
RESULT_CONTENT = "Average speed = distance ÷ time = 120 km ÷ 2 h = 60 km/h."
RESULT_TOTAL_TOKENS = 124
RESULT_COMPLETION_TOKENS = 95
RESULT_PROMPT_TOKENS = 29
RESULT_REASONING_TOKENS = 64
RESULT_CACHED_TOKENS = 0
```

## Cas d’utilisation du schéma JSON

En utilisation un schéma JSON comme format de réponse, cela force l'application à répondre de manière structuré pour correspondre au schéma.&#x20;

Vous avez la possibilité d'extraire directement les valeurs retournées pour les mettre dans une donnée; il suffit d'indiquer en nom de paramètre le nom de la propriété à extraire et de mettre en OUT la donnée cible.

## Exemples

### `TOOLS`

<pre class="language-json"><code class="lang-json"><strong>[
</strong>    {
        "name": "GET_STOCK_INFORMATION",
        "description": "Get stock information about a product. If the product is not found, return an error. If the stock is less than 10, return a warning and a purchase order should be done.",      
        "parameters": {
            "type": "object",
            "properties": {
                "product_name": {
                    "type": "string",
                    "description": "The product name"
                },
                "serial_number": {
                    "type": "string",
                    "description": "The product serial number"
                }
            },
            "additionalProperties": false,
            "required": ["serial_number"]
        }
    },
    {
        "name": "PURCHASE_ORDER",
        "description": "Make a purchase order for a product.",    
        "parameters": {
            "type": "object",
            "properties": {
                "product_name": {
                    "type": "string",
                    "description": "The product name"
                },
                "serial_number": {
                    "type": "string",
                    "description": "The product serial number"
                },
                "quantity": {
                    "type": "number",
                    "description": "The quantity of the product to purchase"
                }
            },
            "additionalProperties": false,
            "required": ["serial_number", "quantity"]
        }
    }
]
</code></pre>

### `SELECTED_TOOLS_PARAMS`

```json
[
    {
        "name": "GET_STOCK_INFORMATION",
        "id": "call_Vuc2Ga8jP7vUksxG9C0fwpY8",
        "parameters": {
            "product_name": "vis",
            "serial_number": "V45645"
        }
        
    },
    {
        "name": "GET_STOCK_INFORMATION",
        "id": "call_nq3SCVUk0FjAHCeqOZGNXpC8",
        "parameters": {
            "product_name": "boulons",
            "serial_number": "b456"
        }
    }
]
```

### `RESPONSE_FORMAT_JSON_SCHEMA`

```json
{
  "name": "schema",
  "schema": {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
      "advice": {
        "type": "string"
      },
      "next_action": {
        "type": "string",
        "enum": ["expert","sales","support","logistics",null]
      },
      "confidence_level": {
        "type": "number"
      }
    },
    "required": ["advice", "next_action","confidence_level"]
  }
}
```

## **Fournisseurs compatibles OpenAI**

L’application **OPENAICHAT** peut être utilisée avec des fournisseurs compatibles OpenAI en spécifiant un point de terminaison d’API personnalisé via le paramètre `URL` ou le paramètre `OpenAIChatApiUrl` dans le fichier `web.config`.

### Fournisseurs compatibles

<table><thead><tr><th valign="top">Fournisseur</th><th valign="top">Type</th></tr></thead><tbody><tr><td valign="top">Azure OpenAI</td><td valign="top">Cloud</td></tr><tr><td valign="top">Ollama</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">vLLM</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">LocalAI</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">LM Studio</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">Together AI</td><td valign="top">Cloud</td></tr><tr><td valign="top">Groq</td><td valign="top">Cloud</td></tr><tr><td valign="top">Mistral AI</td><td valign="top">Cloud</td></tr><tr><td valign="top">OpenRouter</td><td valign="top">Cloud</td></tr></tbody></table>

{% hint style="warning" %}

* N’utilisez pas `MAX_COMPLETION_TOKENS` ni `REASONING_EFFORT` avec des fournisseurs non-OpenAI, sauf si vous savez que le fournisseur supporte ces paramètres.
* Utilisez `MAX_TOKENS` pour définir les limites de jetons lorsque vous utilisez des fournisseurs non-OpenAI.
* Certains fournisseurs peuvent ignorer les paramètres non supportés, tandis que d’autres peuvent renvoyer une erreur.
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.workflowgen.com/admin-fr/applications-de-workflow/openai/openaichat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
