Un array de messages es un contrato con reglas de orden ocultas: las respuestas tool deben seguir directamente al mensaje assistant que las declaró, cada tool_call_id declarado debe responderse antes de que la conversación avance, y Anthropic además exige que user y assistant alternen con system movido a un parámetro de nivel superior. Cuando el código ensambla el array dinámicamente - recortando historial, reintentando llamadas, fusionando turnos - estos invariantes se rompen con facilidad, y el error de la API cita la regla sin decirte qué mensaje la violó. Esta herramienta recorre el array con la misma lógica de emparejamiento y señala el índice exacto.
OpenAI Chat Completions y Anthropic Messages difieren en lo fundamental: qué roles existen, dónde viven las instrucciones system y cómo se emparejan las llamadas tool con sus resultados (tool_calls y mensajes tool de nivel superior frente a bloques tool_use y tool_result). Cambia el perfil y la misma entrada se vuelve a juzgar al instante - útil al migrar un registro de conversación de un proveedor a otro, porque la lista de diagnósticos se convierte en tu checklist de migración.
Todo se analiza y diagnostica localmente en tu navegador. Nada de lo que pegas se sube ni se registra - los registros de conversación suelen contener credenciales, datos de clientes y prompts internos, así que deliberadamente no hay lado servidor ni analítica sobre tu entrada.
Preguntas y respuestas frecuentes sobre este tema.
Los 400 estructurales: los mensajes con role tool deben responder a un mensaje con tool_calls, un assistant con tool_calls debe ir seguido de mensajes tool, roles desconocidos o ausentes, arrays vacíos, formas de content inválidas, y del lado de Anthropic la alternancia rota entre user y assistant, system mal colocado e ids de tool_use y tool_result sin pareja. Los problemas semánticos - nombre de modelo erróneo, longitud de contexto excedida, argumentos de función malformados - son fallos distintos y quedan fuera del alcance.
Los tipos atrapan errores de forma en tiempo de compilación, pero las reglas que producen la mayoría de los 400 son reglas de orden entre mensajes: si este tool_call_id fue declarado dos mensajes atrás, si cada llamada declarada fue respondida antes del siguiente turno user. Eso solo existe en runtime, después de que tu lógica de recorte de historial y reintentos ensambló el array real. Pega ese array aquí y el emparejamiento entre mensajes se verifica directamente - en cualquier lenguaje, incluidos logs de producción.
Sí - el análisis y el diagnóstico se ejecutan por completo en tu navegador. El contenido nunca sale de la página: sin subida, sin almacenamiento, sin analítica sobre el texto pegado. Y como el diagnóstico solo lee roles, ids y formas, puedes censurar los valores de content antes de pegar si prefieres mayor cautela.