Hi all! Just released v0.20.0 — the headline is a new LlmComposer.Agent module.
LlmComposer.Agent — automatic tool-calling loop
Handles the full ask → execute → repeat cycle so you don’t have to manage it manually. Supports sequential and parallel tool execution, a configurable iteration limit, and per-tool error recovery.
LlmComposer.Agent.run(messages, tools: my_tools, provider: :open_ai)
Streaming agent (stream_response: true)
The agent now supports streaming, returning a lazy stream of StreamChunks:
:text_delta— model text as it arrives:tool_call— emitted after each tool execution, result included (no extra telemetry handler needed):done— terminal chunk with cumulative usage and the fullAgent.Result
Works across all supported providers: :open_ai, :open_router, :open_ai_responses, :google, :bedrock, :ollama.
Telemetry improvements
Spans for run_completion and providers_runner, enriched agent events with per-tool arguments and reasoning deltas, plus a :telemetry_metadata option to scope handlers to a single run.
Full changelog: Comparing 0.19.6...0.20.0 · doofinder/llm_composer · GitHub






















