OpenAI structured outputs are pretty stable for me. Gemini sometimes responds with a completely different structure.
Gemini 3 flash with grounding sometimes returns json inside ```json...``` causing parsing errors.
https://openrouter.ai/announcements/response-healing-reduce-...
might be useful ( i am not the author )