azmaveth
ExLLM - Multi-provider LLM library (inspired by Python’s LiteLLM)
I started this a couple weeks ago using Claude Code. I am a relatively experienced developer, but a newbie with Elixir and unfamiliar with standard conventions. This has not been fully reviewed line-by-line, but it’s in a mostly usable state so I thought I’d share it.
I have used this alongside my other new library - ExMCP (yeah, I’m terrible at naming) to build out a chat client similar to Block’s Goose. It’s been tested fairly extensively with Anthropic, OpenAI, and Ollama, but less with the others.
Feature List:
- Unified API: Single interface for multiple LLM providers
- Streaming Support: Real-time streaming responses with error recovery
- Cost Tracking: Automatic cost calculation for all API calls (if cost data is available)
- Token Estimation: Heuristic-based token counting for cost prediction
- Context Management: Automatic message truncation to fit model context windows
- Session Management: Built-in conversation state tracking and persistence
- Structured Outputs: Schema validation and retries via Instructor integration
- Function Calling: Unified interface for tool use across providers
- Model Discovery: Query and compare model capabilities across providers
- Capability Normalization: Automatic normalization of provider-specific feature names
- Error Recovery: Automatic retry with exponential backoff and stream resumption
- Mock Testing: Built-in mock adapter for testing without API calls (use with Response Caching)
- Response Caching: Cache real provider responses for offline testing and cost reduction
- Type Safety: Comprehensive typespecs and structured data
- Configurable: Flexible configuration system with multiple providers
- Extensible: Easy to add new LLM providers via adapter pattern
Currently supported providers:
- Anthropic
- OpenAI
- Gemini
- OpenRouter
- Groq
- xAI/Grok
Local providers:
- Ollama
- LM Studio
- Bumblebee
Please give feedback!
Trending in Announcing
Hey everyone!
Req is an HTTP client for Elixir that I’ve been working on for quite some time. There is already a lot of HTTP clients out...
New
Samly can be used to enable SAML 2.0 Single Sign On in a Plug/Phoenix application.
This library uses Erlang esaml to provide
plug enabl...
New
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries.
offset-based pagination with...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Hi all!
I want to present a small library which provides a mix task for generating an Entity-Relationship Diagram for Ecto schemas.
You...
New
Hello
Published a new library - ProcessHub!
ProcessHub is a library designed to manage process distribution within the Elixir cluster. ...
New
Other Trending Topics
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
I am seeing a lot of aplications of Argumentum ad Vericundiam in software discussions. They do link some piece of writing and point us to...
New
Hey folks,
I just published a post about Hologram’s funding and where the project goes next - the short version:
Curiosum as Main Spons...
New
This showed up on my feed.. anyone heard of it? Just hype?
Ox Alpha is a reasoning model designed for coding, sustained ag...
New
It’s not that it’s vocabulary is too advanced. It’s something worse.
I get lost trying to follow even a paragraph written by Claude. It’...
New
Today we’re releasing Oban for Python. Not an Oban client in Python. Not a pythonx wrapper embedded in Elixir. Nope, it’s a fully operati...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #ai
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 1- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
gtcode
This is great, because DSPy uses LiteLLM. Will switch out to using this lib for the LM adapter in DSPEx.
The Gemini integration looks comprehensive:
https://github.com/azmaveth/ex_llm/tree/master/test/ex_llm/adapters/gemini