Anthropic ✓ system y max_tokens en el cuerpo ✓ user, assistant y UN solo mensaje con ambos tool_result ✓ tool_use con input ✓ argumentos vacíos se envían como {} (no []) ✓ resultado con error marcado is_error ✓ herramientas con input_schema ✓ interpreta tool_use, texto y uso OpenAI (Responses API) ✓ instructions y max_output_tokens ✓ sin retención: store=false y razonamiento cifrado ✓ primer ítem: mensaje del usuario ✓ function_call con call_id y argumentos en texto ✓ argumentos vacíos como {} ✓ function_call_output por cada resultado ✓ herramientas planas, strict=false ✓ interpreta function_call y uso ✓ reenvía el razonamiento cifrado ✓ reenvía la llamada sin campos de solo salida ✓ interpreta respuesta de texto Gemini ✓ interpreta functionCall y omite resumen de pensamiento ✓ conserva la parte cruda con thoughtSignature ✓ reenvía el turno del modelo con la firma intacta ✓ functionResponse con id y nombre de la llamada ✓ herramienta sin argumentos se declara sin parameters ✓ systemInstruction y maxOutputTokens ✓ respuestas de funciones consecutivas en un solo turno ✓ limpia claves de esquema no soportadas ✓ args vacío se reenvía como objeto {} y no como lista [] ✓ resultado vacío de función se envía como objeto ✓ args con contenido: el nivel superior es objeto y las listas se conservan (Gemini acepta cualquier valor anidado) ✓ respuesta bloqueada no rompe el flujo Todas las pruebas pasaron