Nota corta, de las que te ahorran media hora.
Si estás llamando a un modelo de la familia GPT-5 con la API de OpenAI y le pasas max_tokens, la llamada falla. El parámetro que se usó durante años para limitar la respuesta ya no es válido en GPT-5. El reemplazo es max_completion_tokens.
// GPT-5.x rechaza esto
await client.chat.completions.create({
model: "gpt-5.4-nano",
max_tokens: 600,
});
// correcto
await client.chat.completions.create({
model: "gpt-5.4-nano",
max_completion_tokens: 600,
});Por qué cuesta encontrarlo
El problema no es el cambio en sí —los nombres de parámetros evolucionan. El problema es que el error no apunta al arreglo. Te llega un fallo del lado del servidor, sin un «quisiste decir max_completion_tokens». Si vienes copiando un snippet de hace un año, o de un modelo viejo, vas a leer tu código tres veces buscando un typo que no existe.
El contexto del cambio
GPT-5 introdujo los reasoning tokens: tokens que el modelo gasta pensando antes de escribir la respuesta visible. Con eso, «max tokens» se volvió ambiguo: ¿el límite es sobre lo que ves, o sobre todo lo que el modelo consume? max_completion_tokens es el nombre que desambigua: es el techo de la completion.
La lección portable
Cuando subas de versión de modelo, no asumas que la firma de la llamada sobrevive. Lee las notas de la versión antes de cambiar el string del modelo, no después de que producción tire 400. El agente de este sitio corre en gpt-5.4-nano, y este fue exactamente el escalón con el que tropecé al cablearlo.