Error: «This model does not support assistant message prefill»
This model does not support assistant message prefill. The conversation must end with a user message.
Este error 400 sale al migrar de Claude Sonnet 4.5 (o Haiku 4.5) a claude-sonnet-5-5: tu código acaba la conversación con un mensaje del asistente para «empujar» el formato de la respuesta, y los modelos nuevos ya no lo aceptan. La conversación tiene que acabar con un mensaje del usuario.
Comprobado el
Ejemplo: lo que dice la ficha del modelo del error
claude-sonnet-4-5 Anthropic
Fecha de apagado: 30 de noviembre de 2026
Sustituto oficial: claude-sonnet-5-5
Qué cambia en tu código
- Cambia
modelporclaude-sonnet-5-5(o el sustituto de la tabla). - Sonnet 5.5 piensa por defecto si no envías
thinking. Para responder sin pensar antes, como Sonnet 4.5, envíathinking: {"type": "between_tools"}con un esfuerzolow,mediumohigh.{"type": "disabled"}da error 400. - Pon
output_config.effortexplícito, y subemax_tokenssi activas el pensamiento: lo incluye. temperature,top_pytop_kcon un valor que no sea el de por defecto dan error 400: quítalos.- El prefill (acabar la conversación con un mensaje del asistente) da error 400: usa salidas estructuradas o explica el formato en el prompt.
- Lee la respuesta por tipo de bloque (
type == "text"), no por posición: puede llegar un bloquethinkingdelante.
Código de ejemplo
Python
import anthropic
client = anthropic.Anthropic() # lee ANTHROPIC_API_KEY del entorno
msg = client.messages.create(
model="claude-sonnet-5-5", # antes: "claude-sonnet-4-5"
max_tokens=4096,
thinking={"type": "between_tools"}, # sin pensar antes de responder, como antes
output_config={"effort": "medium"},
# sin temperature, top_p ni top_k: dan error 400
messages=[{"role": "user", "content": "Hola"}],
)
text = "".join(b.text for b in msg.content if b.type == "text")Node.js
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // lee ANTHROPIC_API_KEY del entorno
const msg = await client.messages.create({
model: "claude-sonnet-5-5", // antes: "claude-sonnet-4-5"
max_tokens: 4096,
thinking: { type: "between_tools" }, // sin pensar antes de responder, como antes
output_config: { effort: "medium" },
// sin temperature, top_p ni top_k: dan error 400
messages: [{ role: "user", content: "Hola" }],
});
const text = msg.content.filter((b) => b.type === "text").map((b) => b.text).join("");Fuentes: Anthropic · Model deprecations · Claude Sonnet 5.5 migration guide
Te avisamos antes de que se apague tu modelo
Un email 30 días antes y otro 7 días antes de la fecha oficial, con el sustituto y lo que cambia en el código. Gratis, sin cuenta y sin publicidad.
¿Usas más de un modelo? Pega tu código en el comprobador gratuito.
Abrir el comprobador→¿Tienes un repositorio entero? Revísalo de una vez desde la terminal, sin instalar nada:
npx -y github:ericc2005t/ai-model-sunsetPreguntas
- ¿Cómo consigo entonces el formato que quería?
- Si el prefill era para obtener JSON o un formato fijo, usa salidas estructuradas (o una herramienta con campos fijos). Si era para el tono o el arranque de la frase, descríbelo en el prompt.
- ¿Hay más errores de este tipo al migrar?
- Sí:
temperature,top_potop_kdistintos del valor por defecto,thinking: {"type": "disabled"}, los presupuestos de pensamiento (budget_tokens) y forzar una herramienta concreta también dan 400 en Sonnet 5.5.
¿Prefieres que te lo arregle yo? Cambio de modelo, 79 €; migración completa, 290–490 €. Te respondo en 24 h con el precio cerrado.
Pide el arreglo: te respondo en 24 h
Sin llamadas y sin pagar nada aquí. Cuéntame qué usa tu app y qué falla: te respondo por escrito en 24 h con el precio cerrado y el plazo.