Structured output enforcer
Getting an LLM to reliably return parseable JSON is a common production
headache: stray markdown fences, chatty preambles, and trailing commas all
break JSON.parse. The robust pattern combines a strict prompt that bans
those habits with a retry loop that feeds the parse error back to the model
and asks for a correction. This tool generates both.
How it works
You provide a base prompt and the JSON schema you expect. The tool produces an
enforced prompt that tells the model to return only valid JSON matching your
schema — no fences, no commentary. It also emits a provider-agnostic JavaScript
snippet with an extractJson helper that strips code fences and isolates the
outermost object, plus a loop that, on any parse failure, re-prompts the model
with the error and the bad output up to your chosen retry limit.
Tips and notes
- Keep the schema small and flat. Deeply nested schemas are harder for models to honor; flatten where you can and validate nested parts separately.
- Prefer native JSON mode when you have it. If your provider offers structured outputs or function calling, use it as the primary path and keep this retry loop as a fallback for other models.
- Log retries. A high retry rate signals a prompt or schema problem worth fixing rather than papering over with more attempts.
- Validate after parsing. Successful
JSON.parseonly means it is valid JSON, not that it matches your schema — add a schema check (Zod, Ajv) before trusting the data.