Hey everyone! ![]()
I’d like to share Mistral, an Elixir client for the Mistral AI API. The library has been on Hex for a while, but I haven’t posted about it here until now — and we just shipped v0.5.0 with a big batch of new features, so it felt like a good time.
With this release, Mistral covers almost all of the Mistral AI platform endpoints, making it the most complete Mistral client available for Elixir.
What it does
Mistral provides a simple, idiomatic Elixir interface to the Mistral AI platform:
client = Mistral.init("your_api_key")
{:ok, response} = Mistral.chat(client,
model: "mistral-small-latest",
messages: [
%{role: "user", content: "Write a haiku about Elixir"}
]
)
Features
- Chat Completions with function calling / tool use
- FIM (Fill-in-the-Middle) code completions
- Streaming with utilities for collecting, accumulating, and transforming chunks
(Mistral.Streaming) - Conversations API with multi-turn state management and helper utilities
(Mistral.Conversations) - Agents API (full CRUD, versioning, aliases, completions)
- Embeddings with similarity/distance utilities (Mistral.Embeddings)
- Classification & Moderation
- Batch Processing
- Fine-tuning
- File Operations (upload, download, list, delete)
- OCR
- Response Caching via ETS (Mistral.Cache)
- Automatic retry with exponential backoff and jitter
- Structured output (JSON mode + JSON Schema validation)
What’s new in v0.5.0
This release adds 48+ new API functions and 5 utility modules. The highlights:
- Conversations, Agents, Classification, Batch, FIM, and Fine-tuning APIs —
near-complete coverage of the Mistral platform - Mistral.Streaming — collect_content/1, accumulate_response/1, tee/2, merge/1,
and more for working with SSE streams - Mistral.Embeddings — cosine similarity, euclidean distance, ranking, and batch
comparisons - Mistral.Cache — optional ETS-based response caching for deterministic endpoints
- Mistral.Conversations — helpers for extracting content, managing history, and
sliding window context - Automatic retry — transient errors (408, 429, 5xx) are retried with exponential
backoff by default
Full changelog: mistral/CHANGELOG.md at main · rodloboz/mistral · GitHub
Links
- Hex: mistral | Hex
- Docs: Mistral v0.5.0 — Documentation
- GitHub:
{:mistral, “~> 0.5.0”}
Feedback, issues, and PRs are very welcome!






















