A thin client for the Anthropic API, built on Req.
Jibu sends request bodies unchanged. It has no model list and no parameter schema. New API fields therefore work without a new release.
Features
ask/3andextract/4for text and structured output, with client defaults- Full Messages requests with effort and prompt caching
- Token counting and the Models API
- Image and document content, and the Files API
- Message Batches
- A tool-use loop with local tool functions
- Streaming with a function per event and the assembled message
- Typed errors, retries with
retry-after, and telemetry - Tests through
Req.Test, without the network
Jibu is not affiliated with or endorsed by Anthropic.
Installation
Add Jibu to the dependencies in mix.exs:
{:jibu, "~> 0.2"}Quick start
client = Jibu.new(model: "claude-opus-5-5", max_tokens: 1024)
{:ok, text} = Jibu.ask(client, "Name three rivers in Germany.", effort: :low)
{:ok, booking} = Jibu.extract(client, "Workshop with MRV, 9 to 11:30.", schema)Without :api_key, Jibu reads ANTHROPIC_API_KEY from the environment.
Full requests
Jibu.messages/2 takes the whole request body as a map and returns the whole response.
Jibu sends the body unchanged, so every field of the API works, including new ones.
{:ok, response} =
Jibu.messages(client, %{
system: [%{type: "text", text: "You sort bookings.", cache_control: %{type: "ephemeral"}}],
messages: [%{role: "user", content: "Workshop with MRV, 9 to 11:30."}],
output_config: %{effort: "low"}
})
Jibu.Response.text(response)
response.stop_reason
response.usageThe client defaults fill in model and max_tokens. A field in the body wins over its default.
More of the API
| Module | Covers | Guide |
|---|---|---|
Jibu | count_tokens/2 | Getting started |
Jibu.Models | Listing and retrieving models | Getting started |
Jibu.Content | Image and document blocks from files, binaries or file ids | Files |
Jibu.Files | Upload, list, download and delete files | Files |
Jibu.Batches | Message Batches at half price | Batches |
Jibu.Tools | A tool-use loop with local functions | Tools |
Jibu | stream/3 for streamed responses | Streaming |
Jibu.Error | Error types, retries and telemetry | Errors |
In tests, pass plug: {Req.Test, MyStub} to Jibu.new/1. No request then leaves the test.
Documentation
- Getting started
- Structured output
- Prompt caching
- Images, documents and files
- Batches
- Tools
- Streaming
- Errors, retries and telemetry
- Contributing: development setup, mise commands and checks.
- Changelog