
Migración a Fable 5.1: corrige errores de tool choice
Migra desde Fable 5 preservando llamadas de herramienta e historial. Corrige selección forzada, bloques de pensamiento, compresión y fallbacks.
Migrar de Claude Fable 5 a Claude Fable 5.1 no siempre es un cambio de nombre de modelo de una línea. El nuevo modelo rechaza tool choice forzado, vincula bloques de pensamiento preservados al prefijo de conversación que los produjo, y no puede enviar sus bloques de pensamiento de vuelta a modelos Claude más antiguos. Una integración puede pasar una prueba de humo de un solo turno y aún así fallar en su primera solicitud de salida estructurada, conversación comprimida o fallback.
La migración segura tiene tres partes: reemplaza las llamadas de herramienta forzadas con selección automática más aplicación de esquema, mantén el historial de múltiples turnos solo en modo añadir, y prueba cada ruta que pueda cambiar la conversación a un modelo más antiguo. Si usas la ruta compatible con OpenAI, comienza con la guía de solicitud Claude Fable 5.1; los ejemplos nativos a continuación usan la Messages API de Anthropic para que cada breaking change sea visible.
Respuesta rápida
- Cambia el ID de modelo nativo a
claude-fable-5-1y luego elimina los modostool_choiceforzados;anyy herramientas nombradas devuelven HTTP 400.[1] - Mantén el prompt del sistema, herramientas y prefijo de mensaje anterior sin cambios después de un bloque de pensamiento Fable 5.1. Añade nuevas instrucciones en lugar de reescribir el historial.[1]
- Prueba cada fallback: los modelos Claude más antiguos no pueden leer bloques de pensamiento de Fable 5.1, por lo que la API los elimina antes de continuar.[1]
- El pensamiento adaptativo se mantiene activado. Reemplaza presupuestos de tokens manuales con
efforty ejercita desajustes de prefijo en CI antes del lanzamiento.[1]
Primero, inventaría la ruta de código que estás migrando realmente
Busca más ampliamente que el ID de modelo literal. Un envoltorio puede traducir una configuración genérica de "herramienta requerida" al tool_choice: {"type":"any"} de Anthropic, retener bloques de pensamiento en un almacén de conversaciones o alterar el prompt del sistema en cada solicitud. El problema de OpenCode que surgió poco después del lanzamiento es un ejemplo útil: su adaptador de salida estructurada seleccionó uso de herramienta requerida, que se convirtió en el modo any no compatible de Anthropic y produjo un 400.[6] Ese problema demuestra un patrón de integración real; la guía de migración de Anthropic es la autoridad para el comportamiento de la API.
Audita estos componentes antes de editar:
| Componente | Qué buscar | Fallo esperado |
|---|---|---|
| Selección de modelo | claude-fable-5, alias, listas de fallback | El modelo antiguo aún recibe tráfico |
| Adaptador de herramienta | tool_choice, required, any, herramientas nombradas | 400 invalid_request_error |
| Salida estructurada | herramientas sintéticas, envolvedores de esquema | El envoltorio fuerza automáticamente una herramienta |
| Almacén de conversaciones | thinking, redacted_thinking, firmas | Firma de pensamiento no válida después de una edición |
| Compresión | inyección de resumen, retención de cola, eliminación de mensajes | Bloques posteriores vinculados al prefijo antiguo |
| Prompts dinámicos | fecha actual, permisos, herramientas habilitadas | Cambios de prefijo del sistema o herramienta en cada turno |
| Retry y fallback | IDs de modelo Claude más antiguos | El pensamiento de Fable 5.1 se elimina al cambiar |
| Política de retención | área de trabajo de ZDR u organización | Solicitud rechazada antes de la generación |
Realiza el inventario en el límite de solicitud serializada si es posible. Los objetos de aplicación pueden parecer sin cambios incluso cuando un SDK o adaptador de proveedor los reescribe.
Paso 1: actualiza el ID de modelo pero mantén el resto observable
El ID nativo es claude-fable-5-1. Fable 5.1 retiene la ventana de contexto de un millón de tokens, admite hasta 128,000 tokens de salida y utiliza pensamiento adaptativo siempre activado.[2] Comienza con la misma forma de tráfico de producción e registra IDs de solicitud, códigos de estado, razones de parada, uso de tokens, llamadas de herramienta y fallbacks.
No uses esta migración para cambiar effort, compresión, redacción de prompts y el marco de herramientas al mismo tiempo. Un primer despliegue estrecho hace que un 400 o cambio de comportamiento sea atribuible. Una vez que se establece la compatibilidad, recorre low, medium, high, xhigh y max en la carga de trabajo en lugar de asumir que la configuración anterior es óptima. Anthropic documenta high como el predeterminado.[1]
También elimina cualquiera de estas configuraciones si una integración anterior las proporciona:
# Ambas son inválidas para Claude Fable 5.1.
thinking={"type": "disabled"}
thinking={"type": "enabled", "budget_tokens": 12000}Fable 5.1 decide cuándo y cuánto pensar. Un mensaje de asistente final usado como prefill también devuelve un 400, así que expresa instrucciones de salida en contenido del sistema o usuario en su lugar.[1]
Paso 2: reemplaza tool choice forzado
El límite de compatibilidad es exacto:
Valor tool_choice | Fable 5 | Fable 5.1 |
|---|---|---|
{"type":"auto"} | Compatible | Compatible |
{"type":"none"} | Compatible | Compatible |
{"type":"any"} | Compatible | HTTP 400 |
{"type":"tool","name":"record_summary"} | Compatible | HTTP 400 |
La verificación se aplica a Messages, Message Batches y conteo de tokens. El error informado dice que los tipos de tool-choice tool y any no son compatibles con este modelo.[1] Reintentar el mismo cuerpo no ayudará.
Aquí está el patrón común anterior a la migración:
response = client.messages.create(
model="claude-fable-5",
max_tokens=4096,
tools=[record_summary_tool],
tool_choice={"type": "tool", "name": "record_summary"},
messages=[
{"role": "user", "content": "Summarize the meeting notes."}
],
)Para Fable 5.1, usa selección automática, pon el requisito en la instrucción actual y haz la herramienta estricta:
record_summary_tool = {
"name": "record_summary",
"description": "Record the structured meeting summary.",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"summary": {"type": "string"},
"action_items": {
"type": "array",
"items": {"type": "string"},
},
},
"required": ["summary", "action_items"],
"additionalProperties": False,
},
}
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=4096,
tools=[record_summary_tool],
tool_choice={"type": "auto"},
messages=[{
"role": "user",
"content": (
"Summarize the meeting notes, then call record_summary "
"with the summary and action items."
),
}],
)strict: true limita los argumentos si el modelo llama a la herramienta; no recrea una garantía a nivel de transporte de que se debe llamar la herramienta. Tu aplicación debe verificar que la respuesta contiene el bloque de uso de herramienta requerido. Anthropic también recomienda salidas JSON a través de output_config.format cuando la herramienta forzada existía solo para obtener JSON válido de esquema.[1]
Si la aplicación debe requerir una herramienta nombrada en medio de una conversación, añade un mensaje role: "system" después del mensaje de usuario más reciente. Nombra la herramienta, declara que es obligatoria para este turno e instruye al modelo para comenzar con la llamada. Mantén ese mensaje del sistema en historial posterior. Esto preserva el prefijo anterior; reescribir el prompt del sistema de nivel superior no lo haría.[1]
Trata "el modelo ignoró la instrucción" como un resultado manejado. Rechaza el turno, reintenta bajo una política limitada o falla de forma segura. No describas el prompting como un mecanismo de aplicación absoluta.
Paso 3: preserva el pensamiento en la dirección que la API admite
Cada bloque de pensamiento de Fable 5.1 lleva información de vinculación de modelo y conversación. La compatibilidad es unidireccional:
Pensamiento de Fable 5 ───────► Fable 5.1 puede leerlo
Pensamiento de Opus 5 ───────► Fable 5.1 puede leerlo
Pensamiento de Fable 5.1 ──X──► Fable 5 no puede leerlo
Pensamiento de Fable 5.1 ──X──► Opus 5 no puede leerloClaude Mythos 5.1 es la excepción documentada que puede leer bloques de Fable 5.1. Cuando un enrutador, fallback de rechazo o reintento de cliente envía la conversación a un modelo más antiguo, la API elimina bloques que el destino no puede leer. La solicitud aún puede tener éxito y los tokens de entrada eliminados no se facturan, pero el destino debe planificar nuevamente sin ese razonamiento.[1]
Esto importa para la evaluación de fallback. Una primera solicitud en Fable 5 y una primera solicitud en Fable 5.1 no son equivalentes a un cambio de conversación de 5.1 a 5 en el medio. Mide ambos. Registra input_transformations con la beta de vinculación de pensamiento habilitada; model_binding_mismatch identifica bloques eliminados porque el modelo cambió.
Paso 4: haz el prefijo de conversación solo en modo añadir
Un bloque de pensamiento de Fable 5.1 es válido contra el prompt del sistema exacto, el conjunto de herramientas y el historial de mensajes que lo precedieron. Cambiar cualquiera de ellos antes de reproducir el bloque puede producir un 400 por una firma de pensamiento no válida.[1]
Las ediciones accidentales comunes incluyen:
- reconstruir el prompt del sistema con una marca de tiempo nueva;
- añadir o quitar una herramienta del array
toolsde nivel superior; - eliminar un resultado de herramienta antiguo para ahorrar tokens;
- insertar un resumen antes de turnos recientes mientras se retienen sus bloques de pensamiento;
- eliminar un recordatorio por turno en la siguiente solicitud;
- recuperar bytes de imagen o documento diferentes de la misma URL.
El último caso es fácil de perder: la vinculación cubre bytes de archivo en lugar de solo la cadena URL. Para un archivo reutilizado en turnos, Anthropic recomienda un file_id de Files API estable o contenido base64.[1]
Prefiere estos patrones:
- añade nuevos turnos sin alterar bytes anteriores;
- añade mensajes del sistema dentro de la conversación para instrucciones cambiadas;
- usa bloques de adición y eliminación de herramientas admitidos para cambios de herramientas;
- usa compresión del lado del servidor o edición de contexto;
- si comprimes en el cliente, reemplaza todo el historial con un resumen y el nuevo turno de usuario, sin llevar bloques de pensamiento antiguos.
Esa forma final del lado del cliente es deliberadamente simple. Mantener turnos recientes detrás de un nuevo resumen es seguro solo si sus bloques thinking y redacted_thinking se eliminan, porque esos bloques se crearon contra el historial anterior al resumen.[1]
Diagnostica desajustes de prefijo antes que tus usuarios
Anthropic aplica la verificación del prefijo de conversación por defecto para cuentas creadas en o después del 31 de agosto de 2026. Las cuentas más antiguas pueden no fallar a menos que opten por el control, lo que crea una brecha peligrosa de prueba de "funciona con nuestra clave" para las bibliotecas utilizadas con claves de cliente.[1]
Usa el control beta en una sesión de staging:
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=4096,
thinking={
"type": "adaptive",
"block_binding": {
"prefix_mismatch_behavior": "drop_block"
},
},
messages=conversation,
betas=["thinking-binding-controls-2026-08-01"],
)
for change in response.input_transformations or []:
print(change.path, change.reason)Con drop_block, la API elimina el primer bloque de pensamiento que no coincide y todos los bloques de pensamiento posteriores, luego reporta prefix_binding_mismatch. Con el error por defecto, rechaza la solicitud. Usa drop_block cuando una continuación degradada es preferible al fallo; usa error en CI para exponer una mutación de historial inmediatamente.[1]
Un reintento automático de un cuerpo inválido idéntico no puede reparar el desajuste. Restaura el prefijo original, elimina los bloques de pensamiento afectados o solicita explícitamente el comportamiento de drop una vez.
Revisa el comportamiento que no produce un 400
Las pruebas de compatibilidad también deben cubrir cambios más silenciosos. Anthropic dice que Fable 5.1 puede emitir menos llamadas de herramienta paralelas en bucles de agente largos, producir menos mensajes de progreso y llamar a búsqueda o recuperación menos frecuentemente a low effort.[3] Ninguno de estos necesariamente indica un defecto, pero cada uno puede alterar la latencia o el comportamiento del producto.
Construye aserciones alrededor de lo que la aplicación necesita:
- Para lecturas paralelizables, registra llamadas por turno y viajes de ida y vuelta totales.
- Para una UI de progreso, requiere actualizaciones visibles para el usuario en intervalos definidos en lugar de asumir que aparecen.
- Para respuestas fundamentadas en recuperación, haz explícitos los criterios de recuperación y rechaza respuestas que carecen de evidencia requerida.
- Para agentes de edición, verifica la lista de archivos cambiados y desalienta reescrituras de archivo completo cuando se requiere un parche pequeño.[4]
Mantén también el manejo de rechazo. Fable 5.1 puede devolver stop_reason: "refusal" con una stop_details.category; no trates el texto de respuesta vacío como un fallo de transporte. Cualquier fallback debe contabilizar la compatibilidad de pensamiento unidireccional.[2]
FAQ
¿Por qué Fable 5.1 devuelve un 400 para mi solicitud de salida estructurada?
Inspecciona la solicitud serializada de Anthropic. Un marco puede implementar salida estructurada forzando una herramienta sintética con tool_choice: any. Fable 5.1 rechaza tanto any como una opción de tool nombrada. Cambia a selección automática de herramientas más esquema estricto e instrucción explícita, o utiliza el mecanismo de salida JSON de Anthropic.
¿strict: true garantiza que Claude llame a la herramienta?
No. Garantiza argumentos conformes al esquema cuando se llama a la herramienta. La instrucción puede requerir una llamada, pero tu aplicación aún debe confirmar que existe el bloque de uso de herramienta esperado y manejar su ausencia.
¿Puede Fable 5.1 continuar una conversación de Fable 5?
Sí. Fable 5.1 puede leer pensamiento preservado de Fable 5 y otros modelos Claude anteriores documentados. La dirección inversa no es compatible: el destino más antiguo recibe la conversación después de que se eliminan los bloques de pensamiento de Fable 5.1.
¿Puedo cambiar el prompt del sistema entre turnos?
No reescribiendo el prefijo mientras se reproducen bloques de pensamiento posteriores de Fable 5.1. Añade un mensaje del sistema dentro de la conversación y retén en el historial. Si la aplicación intencionalmente inicia una conversación nueva, puede usar un nuevo prompt del sistema porque no hay bloques de pensamiento antiguos que preservar.
¿Cuál es la estrategia de compresión del lado del cliente más segura?
Reemplaza todo el historial anterior con un mensaje de resumen más el nuevo turno de usuario y no reproduzcas bloques de pensamiento antiguos. Si retienes una cola reciente, elimina bloques de pensamiento y redacted-thinking de esa cola o usa el comportamiento de drop documentado.
¿La migración reduce cada factura de API?
No. Los precios de la lista de entrada y salida permanecen en $10 y $50 por millón de tokens. Las lecturas de caché son más baratas, pero el costo de la tarea también depende de la salida, número de turnos, effort, reintentos y si el caché permanece válido.[5] El desglose de costo de Fable 5.1 maneja ese cálculo por separado.
Puerta de lanzamiento: no despliegues hasta que cada fila pase
| Puerta | Condición de aprobación |
|---|---|
| Ruta de modelo | Cada alias de producción se resuelve a claude-fable-5-1 donde se pretende |
| Herramientas forzadas | Ninguna solicitud serializada contiene tool_choice: any o una herramienta forzada nombrada |
| Salida requerida | Las llamadas de herramienta faltantes y los datos no válidos fallan de forma segura en el código de aplicación |
| Historial de pensamiento | Pruebas de múltiples turnos, cambio de herramienta y compresión no muestran desajuste de prefijo inexplicado |
| Fallback | Las pruebas de degradación toleran el pensamiento de 5.1 eliminado y no doble ejecutan efectos secundarios |
| Retención | El área de trabajo de destino permite la política de retención requerida del modelo |
| Verificaciones de comportamiento | Recuperación, progreso, agrupación de herramientas, rechazos y alcance de edición de archivo cumplen el rúbrica del producto |
Una respuesta de un solo turno verde solo prueba que el ID de modelo y las credenciales funcionan. Una migración verde ejerce la conversación después de una llamada de herramienta, después de un cambio de historial y después del fallback que generalmente se ejecuta solo cuando la producción ya está bajo estrés.
References
- Anthropic, Migrating to Claude Fable 5.1 and Claude Mythos 5.1, accessed September 7, 2026.
- Anthropic, Claude Fable 5.1 overview, accessed September 7, 2026.
- Anthropic, What's new in Claude Fable 5.1, accessed September 7, 2026.
- Anthropic, Prompting Claude Fable 5.1, accessed September 7, 2026.
- Anthropic, API pricing, accessed September 7, 2026.
- OpenCode, Issue #46735: Claude Fable 5.1 structured output tool-choice error, accessed September 7, 2026. The issue is cited as an integration example; API behavior is sourced from Anthropic.
Autor

Categorías
strict: true garantiza que Claude llame a la herramienta?¿Puede Fable 5.1 continuar una conversación de Fable 5?¿Puedo cambiar el prompt del sistema entre turnos?¿Cuál es la estrategia de compresión del lado del cliente más segura?¿La migración reduce cada factura de API?Puerta de lanzamiento: no despliegues hasta que cada fila paseReferencesMás publicaciones

Migración a GPT-6 Astra: Responses, tools y rollback
Migración a GPT-6 Astra: descubrimiento de modelos, API de Responses, controles de razonamiento, validación de herramientas y plan de reversión.


Comparar DeepSeek Harness, OpenCode y Claude Code
Compara DeepSeek Harness, OpenCode y Claude Code según control de entorno, modelos, plugins, permisos, complejidad de instalación y costo de agentes.


GPT Image 2 vs Nano Banana Pro: edición, 4K, API y precio
Comparación de GPT Image 2 y Nano Banana Pro: edición, referencias, salida 4K, búsqueda grounded, transparencia, controles API y precios en vivo en reAPI.
