Llm_composer - Elixir library for building LLM-based applications

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 full Agent.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