One request with format:json branching into three observed outcomes: thinking enabled gives an empty response with done_reason stop, a num_predict cap gives a fragment cut mid-string with done_reason length, and think:false gives valid JSON.
LLM

Ollama’s format:json constrains sampling — it does not promise you parseable JSON

A reasoning model can return an empty response under format:json; a num_predict cap can cut JSON mid-string. think:false and a 20-line repair cover both.