Endpoints
Appel d'outils
Laissez les modèles appeler vos fonctions avec le format tools d'OpenAI : paramètres, boucle d'appel, tool_choice, streaming et gestion des erreurs.
Essayer dans le playgroundL'appel d'outils (function calling) permet à un modèle de demander à votre code d'exécuter une fonction, puis d'utiliser le résultat dans sa réponse. api14 utilise le format tools d'OpenAI pour tous les modèles qui prennent en charge les outils : OpenAI, Anthropic, Google, Mistral, Qwen, DeepSeek et d'autres. Pour trouver les modèles compatibles avec les outils, filtrez par paramètres pris en charge dans la liste des Modèles (supported_parameters contient tools).
Paramètres de la requête
| Paramètre | Type | Description |
|---|---|---|
tools | array | [{ "type": "function", "function": { "name", "description", "parameters" } }], où parameters est un JSON Schema. |
tool_choice | string | object | "auto" (par défaut), "none", "required", ou { "type": "function", "function": { "name": "get_weather" } }. |
parallel_tool_calls | boolean | Autorise plusieurs appels d'outils dans un même tour (true par défaut quand c'est pris en charge). |
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
const result = await client.chat.completions.create({
"model": "openai/gpt-5-mini",
"messages": [
{
"role": "user",
"content": "What is the weather in Istanbul?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
}
]
});
console.log(result.choices[0].message.tool_calls);
La boucle
- Envoyez
messagesettools. - Si la réponse a
finish_reason: "tool_calls", exécutez chaque entrée demessage.tool_calls. - Ajoutez le message de l'assistant, puis un message
{ "role": "tool", "tool_call_id", "content" }par appel, et renvoyez la requête. - Répétez jusqu'à ce que le modèle réponde par du contenu simple.
Réponse avec un appel d'outil :
{
"id": "gen-1760000000-tool1",
"model": "anthropic/claude-sonnet-4.5",
"choices": [
{
"index": 0,
"finish_reason": "tool_calls",
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_01",
"type": "function",
"function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" }
}
]
}
}
],
"usage": { "prompt_tokens": 182, "completion_tokens": 21, "total_tokens": 203, "cost": 0.000861 }
}
La requête suivante inclut le résultat de l'outil :
{
"model": "anthropic/claude-sonnet-4.5",
"tools": [ ... same tools ... ],
"messages": [
{ "role": "user", "content": "What's the weather in Istanbul?" },
{ "role": "assistant", "content": null, "tool_calls": [ { "id": "call_01", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" } } ] },
{ "role": "tool", "tool_call_id": "call_01", "content": "{\"temp_c\": 21, \"sky\": \"clear\"}" }
]
}
Continuez à envoyer tools à chaque requête de la boucle. De nombreux fournisseurs rejettent un message tool si la requête n'a pas de définitions tools.
Conseils
argumentsest une chaîne de JSON. Analysez-la et validez-la, car les modèles peuvent produire du JSON invalide.- En streaming, les appels d'outils arrivent dans des fragments
delta.tool_callsindexés parindex. Concaténez les chaînesargumentsavant de les analyser. - Pour ne router que vers les fournisseurs qui prennent en charge les outils, définissez
provider: { "require_parameters": true }. Voir Routage des fournisseurs. - Chaque itération de la boucle est une requête facturée séparément.
Erreurs
Un modèle qui ne prend pas en charge les outils peut renvoyer un 400 ou 404 du fournisseur (« No endpoints found that support tool use »). Les autres erreurs sont les mêmes que pour les Chat completions. Voir Erreurs.