You're building an LLM feature that uses Gemini to call tools, then returns a final answer to the user. In practice, the model sometimes emits malformed JSON, arguments that do not match the schema, or picks the wrong tool for the task. You need a loop that is reliable enough to ship and can recover from these failures without silently doing the wrong thing.
How would you implement a reliable tool-calling loop using Gemini? What is your fallback strategy when the model generates malformed JSON or selects an incorrect tool?