Endpoints
Llamadas a herramientas
Deja que los modelos llamen a tus funciones con el formato tools de OpenAI: parámetros, el bucle de llamadas, tool_choice y consejos con streaming.
Pruébalo en el playgroundLas llamadas a herramientas (function calling) permiten que un modelo pida a tu código que ejecute una función y luego use el resultado en su respuesta. api14 usa el formato tools de OpenAI para todos los modelos que admiten herramientas: OpenAI, Anthropic, Google, Mistral, Qwen, DeepSeek y otros. Para encontrar modelos con soporte de herramientas, filtra por parámetros admitidos en la lista de Modelos (supported_parameters incluye tools).
Parámetros de la petición
| Parámetro | Tipo | Descripción |
|---|---|---|
tools | array | [{ "type": "function", "function": { "name", "description", "parameters" } }], donde parameters es un JSON Schema. |
tool_choice | string | object | "auto" (por defecto), "none", "required", o { "type": "function", "function": { "name": "get_weather" } }. |
parallel_tool_calls | boolean | Permite varias llamadas a herramientas en un mismo turno (por defecto true donde se admita). |
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);
El bucle
- Envía
messagesytools. - Si la respuesta tiene
finish_reason: "tool_calls", ejecuta cada entrada demessage.tool_calls. - Añade el mensaje del asistente, luego un mensaje
{ "role": "tool", "tool_call_id", "content" }por cada llamada, y envía la petición de nuevo. - Repite hasta que el modelo responda con contenido de texto.
Respuesta con una llamada a herramienta:
{
"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 petición siguiente incluye el resultado de la herramienta:
{
"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\"}" }
]
}
Sigue enviando tools en cada petición del bucle. Muchos proveedores rechazan un mensaje tool si la petición no incluye definiciones en tools.
Consejos
argumentses un string de JSON. Analízalo y valídalo, porque los modelos pueden producir JSON no válido.- Con streaming, las llamadas a herramientas llegan en fragmentos de
delta.tool_callsidentificados porindex. Une los strings deargumentsantes de analizarlos. - Para enrutar solo a proveedores que admitan herramientas, establece
provider: { "require_parameters": true }. Consulta Enrutamiento de proveedores. - Cada iteración del bucle es una petición facturada por separado.
Errores
Un modelo que no admite herramientas puede devolver un 400 o 404 del proveedor ("No endpoints found that support tool use"). Los demás errores son los mismos que en Chat completions. Consulta Errores.