tool_choice en auto y di en el prompt cuándo se aplica la herramienta. En modelos donde el razonamiento está siempre activo, una llamada forzada tendría que saltarse ese razonamiento, así que la API rechaza la petición en lugar de degradar el modelo en silencio.400 on requests with tool_choice: {"type":"any"}400 on tool_choice: {"type":"tool","name":"..."}The same request works with tool_choice omittedAn agent framework that worked on one model fails on every call after a swapForzar una llamada a herramienta es algo razonable. Es como muchos frameworks garantizan una salida estructurada: definen una herramienta, la fuerzan y analizan los argumentos. Ese truco deja de funcionar en modelos que razonan antes de cada respuesta, porque el camino forzado se salta justo el paso por el que pagas.
El rechazo es mejor que la alternativa. Una API que aceptara el parámetro y lo ignorara te haría creer que has restringido el modelo cuando no es así: un fallo que aparece mucho después, en producción, como salidas ocasionales imposibles de analizar.
Esos mismos modelos suelen rechazar valores no predeterminados de temperature, top_p y top_k, y no admiten rellenar de antemano el turno del asistente. El código portado de un modelo anterior de la misma familia choca con varios a la vez, lo que hace que parezca un problema de autenticación o de endpoint en lugar de un problema de parámetros.
Envía la misma petición dos veces cambiando solo tool_choice:
for CHOICE in '{"type":"auto"}' '{"type":"any"}'; do
echo -n "$CHOICE -> "
curl -s -o /dev/null -w '%{http_code}\n' \
'YOUR_BASE_URL/chat/completions' \
-H 'Authorization: Bearer YOUR_KEY' \
-H 'Content-Type: application/json' \
-d "{\"model\":\"YOUR_MODEL\",\"max_tokens\":16,
\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}],
\"tool_choice\":$CHOICE}"
done
Si auto devuelve 200 y any devuelve 400, el modelo no admite el uso forzado de herramientas. No hay nada mal en tu clave ni en tu endpoint.
claude-fable-5-1 y claude-fable-5: el uso forzado de herramientas, los parámetros de muestreo no predeterminados y el relleno previo del asistente se rechazan. La guía de Fable 5.1 tiene la lista completa junto con sus precios de caché.Revisado por última vez el 2026-10-01. Escrito a partir de problemas diagnosticados en una pasarela compatible con OpenAI en producción, no recopilado de otras webs.