For non-urgent workflows I mostly use Batch APIs. As you said, the bare batch APIs are a pain to use.
On top of that, I would add that most async-to-batch libraries force users to learn a new framework or refactor their existing code, which is a huge friction in itself.
I've been in those trenches as a developer and I decided to create a literal 2-liner python lib that gets you from async to batch: https://github.com/vienneraphael/batchling
You don't need to change your code and it supports most providers (Anthropic, Gemini, Groq, Mistral, OpenAI, Together, Vertex, XAI, Doubleword) and all imagineable python frameworks (Langchain, PydanticAI, Instructor, DSPy, LiteLLM, Pydantic Evals, ..)
Hey, idk if that helps but I developed something similar to the wrapper you're mentioning as an open-source python library.
Just plug any async function into the provided async context manager and you get Batch APIs in two lines of code with any existing framework you currently have: https://github.com/vienneraphael/batchling
Let me know if you have any questions, looking forward to having your feedback!
On top of that, I would add that most async-to-batch libraries force users to learn a new framework or refactor their existing code, which is a huge friction in itself.
I've been in those trenches as a developer and I decided to create a literal 2-liner python lib that gets you from async to batch: https://github.com/vienneraphael/batchling
You don't need to change your code and it supports most providers (Anthropic, Gemini, Groq, Mistral, OpenAI, Together, Vertex, XAI, Doubleword) and all imagineable python frameworks (Langchain, PydanticAI, Instructor, DSPy, LiteLLM, Pydantic Evals, ..)