Por qué esquemas Draft-07 válidos fallan con HTTP 400 en las APIs de LLM
Los motores de decodificación restringida compilan tu JSON Schema en una gramática libre de contexto o máscara de tokens antes de generar. Para mantener la compilación rápida y acotada, OpenAI, Anthropic y Google exigen un subconjunto de JSON Schema más estricto que el generado por defecto en Ajv, Zod o Pydantic.
Por ejemplo, el modo strict: true de OpenAI rechaza cualquier objeto sin additionalProperties: false o con propiedades fuera de required, por lo que los campos opcionales deben declararse como uniones anulables (["string", "null"]) dentro de required. Por el contrario, generationConfig.responseSchema de Google Gemini rechaza por completo la palabra clave additionalProperties.
| Regla del esquema | OpenAI Estricto (strict: true) | Herramienta / JSON estricto Anthropic | Gemini responseSchema |
|---|---|---|---|
| El tipo raíz debe ser "object" | Obligatorio | Obligatorio | Recomendado |
| "additionalProperties": false en cada objeto | Obligatorio (400 si falta) | Obligatorio (400 si falta) | Rechazado (400 si aparece) |
| Todas las propiedades en "required" | Obligatorio (usa [type, "null"] en opcionales) | Permite claves opcionales | Permite claves opcionales |
| Regex pattern / minLength / format | No admitido en gramática estricta | Limitado; usa description + validación propia | No admitido en la mayoría de formatos |