Building LLM applications for production