What happened when I stopped treating LLM tool calls like ordinary function calls and started treating them like distributed transactions.