Large language models (LLMs) are incredibly powerful general reasoning tools that are useful in a wide range of situations. But working with LLMs presents challenges that are different from building traditional software: * Calls tend to be long-running, and stream generated output as it becomes