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/3 and extract/4 for 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.usage

The client defaults fill in model and max_tokens. A field in the body wins over its default.

More of the API

ModuleCoversGuide
Jibucount_tokens/2Getting started
Jibu.ModelsListing and retrieving modelsGetting started
Jibu.ContentImage and document blocks from files, binaries or file idsFiles
Jibu.FilesUpload, list, download and delete filesFiles
Jibu.BatchesMessage Batches at half priceBatches
Jibu.ToolsA tool-use loop with local functionsTools
Jibustream/3 for streamed responsesStreaming
Jibu.ErrorError types, retries and telemetryErrors

In tests, pass plug: {Req.Test, MyStub} to Jibu.new/1. No request then leaves the test.

Documentation