Cuando el modelo invoca un tool, el runtime puede:
El segundo flujo es mucho más barato que dejar que el handler reciba basura y la maneje. Por eso el schema ajustado paga doble: el modelo aprende los valores válidos del feedback, y tu handler se ahorra checks.
JSON Schema tiene más herramientas de las que se usan. Las que vas a usar el 95% del tiempo:
| Caso | Constraint | Ejemplo |
|---|---|---|
| Valores discretos | enum | "enum": ["sms", "comms", "email"] |
| Número en rango | minimum, maximum | "minimum": 0, "maximum": 100 |
| Entero (no float) | type: "integer" | usar en vez de "number" para contadores |
| String con largo limitado | minLength, maxLength | "maxLength": 280 (tweets) |
| String con formato | format | "format": "date-time", "format": "email", "format": "uri" |
| String con regex | pattern | "pattern": "^[A-Z]{3}-\\d{4}$" (códigos tipo "BAY-1234") |
| Array no vacío | minItems | "minItems": 1 |
severity, va a probar "high", "alta", "urgent", "critical". Con enum, se queda en los 3 que vos definiste.Cannot read property of undefined.format: date-time que el sistema chequea.A la derecha tenés schedule_maintenance vacío. Definí los 5 parámetros con los constraints correctos. El validador chequea cada constraint con regex; al final un llm-judge confirma que no contradigan el caso de uso.
Cuanto más apretado el schema, menos código defensivo en el handler. El schema es la primera línea de defensa.