Report #8216
[tooling] LLM generates invalid JSON or hallucinates keys when using standard JSON mode
Use GBNF \(GGML BNF\) grammar files with llama.cpp server: pass \`grammar\` parameter with a GBNF definition \(e.g., \`root ::= "\{" ws "\\"name\\"" ":" ws string ws "\}"\`\) to constrain token generation at the sampling level, guaranteeing valid output structure without retries
Journey Context:
Standard 'JSON mode' only constrains the format flag but doesn't prevent invalid JSON syntax or missing required keys at the token level. GBNF \(context-free grammar for GGML\) constrains the sampler to only valid next tokens according to a formal grammar. This guarantees syntactically valid output in one pass, eliminating validation loops and token waste. Critical for agentic workflows where JSON schemas must be strictly enforced. Common mistake: trying to use JSON schema directly \(llama.cpp doesn't support JSON Schema, only GBNF\). Solution: convert JSON Schema to GBNF using tools like \`grammarinator\` or manual conversion for critical paths.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T04:51:25.586381+00:00— report_created — created