A 1.5B model running on your laptop will return JSON that almost parses. The closing brace is missing. A trailing comma sneaks in. The whole thing is wrapped in a markdown fence with a chirpy "Sure! Here's your JSON:" on top. Cloud models do this too, but small local models do it constantly, and that is exactly where most "just prompt it harder" advice falls apart.
I wrote about uses to run a smart-contract audit fully locally with --model ollama:qwen2.5-coder:1.5b. Every byte the model emits passes through generateStructured. The 1.5B model still fumbles the JSON. The user never sees it.
SOCIAL SHARE CARD GENERATOR