package anthropic

  1. Overview
  2. Docs
OCaml bindings for the Anthropic API

Install

dune-project
 Dependency

Authors

Maintainers

Sources

anthropic-0.1.0.tbz
sha256=c0ab4ca6eda616706628defc0d7ce79fb233b02e1a79afe00807af8df021b7e6
sha512=e6b8507b0264f7325d2eead525de0c2abd80cb5bc67b2beb60526e44e4e1212117155ddfca9130893a9fb7eb00bdfbfc700ba47fffebf2ea52228d62c8b9ebc1

doc/README.html

OCaml Anthropic

OCaml bindings for the Anthropic API, providing a type-safe and ergonomic interface to interact with Claude models. This library uses Eio for non-blocking I/O, and supports all major Anthropic API features including streaming responses, tool use, batch processing, and the beta Files API.

Features

  • Streaming support: Real-time response streaming with backpressure control
  • Tool use: Enable Claude to interact with external functions and APIs
  • Batch processing: Efficiently process multiple requests asynchronously
  • File uploads (beta): Upload and reference files in conversations
  • Automatic retries: Built-in retry logic with exponential backoff
  • Full model support: Compatible with all Claude models (Haiku, Sonnet, Opus)

Installation

opam install anthropic

Quick Start

open Eio.Std
open Anthropic

let () =
  Eio_main.run @@ fun env ->
  Switch.run @@ fun sw ->
  (* Create client - reads API key from ANTHROPIC_API_KEY env var *)
  let client = create_client ~sw ~env () in
  
  (* Send a message *)
  let messages = [
    Message.user [Content_block.text "What is OCaml?"]
  ] in
  
  match Messages.send client ~model:`Claude_3_5_Haiku_Latest 
          ~messages ~max_tokens:1000 () with
  | Ok response ->
      List.iter (function
        | Messages.Text_block { text } -> print_endline text
        | _ -> ()) response.content
  | Error err -> 
      Printf.eprintf "Error: %s\n" (string_of_error err)

Usage Examples

Streaming Responses

(* Stream responses in real-time *)
match Messages.send_stream client ~model:`Claude_3_5_Sonnet_Latest
        ~messages ~max_tokens:1000 () with
| Ok stream ->
    Eio.Stream.iter (function
      | Content_block_delta { delta = `Text text; _ } -> 
          print_string text; flush stdout
      | Message_stop -> print_newline ()
      | _ -> ()) stream
| Error e -> Printf.eprintf "Error: %s\n" (string_of_error e)

Using Tools

(* Define a tool *)
let weather_tool = {
  name = "get_weather";
  description = Some "Get the current weather in a location";
  input_schema = `Assoc [
    ("type", `String "object");
    ("properties", `Assoc [
      ("location", `Assoc [
        ("type", `String "string");
        ("description", `String "City and state")
      ])
    ]);
    ("required", `List [`String "location"])
  ]
} in

(* Let Claude use the tool *)
Messages.send client ~model:`Claude_3_5_Haiku_Latest
  ~messages:[Message.user [Content_block.text "What's the weather in Paris?"]]
  ~tools:[weather_tool]
  ~max_tokens:1000 ()

Batch Processing

(* Process multiple requests efficiently *)
let requests = List.init 100 (fun i -> {
  custom_id = Printf.sprintf "req_%d" i;
  params = `Assoc [
    ("model", `String "claude-3-5-haiku-20241022");
    ("max_tokens", `Int 100);
    ("messages", `List [
      `Assoc [
        ("role", `String "user");
        ("content", `String (Printf.sprintf "Summarize article %d" i))
      ]
    ])
  ]
}) in

match Batches.submit client ~requests () with
| Ok batch -> 
    Printf.printf "Batch %s sent, processing %d requests\n" 
      batch.id (List.length requests)
| Error e -> Printf.eprintf "Error: %s\n" (string_of_error e)

File Uploads (Beta)

(* Upload a file *)
let content = Eio.Flow.string_source "Analysis data..." in
match Beta.Files.upload client ~filename:"data.csv" 
        ~media_type:"text/csv" ~content () with
| Ok file ->
    (* Reference in a message *)
    let messages = [{
      role = `User;
      content = [
        Beta.Messages.Text "Analyze this data:";
        Beta.Messages.File { id = file.id }
      ]
    }] in
    Beta.Messages.send_with_betas client
      ~betas:[("anthropic-beta", "files-api-2025-04-14")]
      ~model:`Claude_3_5_Sonnet_Latest
      ~messages ~max_tokens:2000 ()
| Error e -> Printf.eprintf "Error: %s\n" (string_of_error e)

Configuration

Environment Variables

  • ANTHROPIC_API_KEY: Your Anthropic API key (required if not passed to create_client)

Client Options

let client = create_client ~sw ~env 
  ~api_key:"sk-ant-..." 
  ~base_url:"https://api.anthropic.com/v1"
  ~max_retries:5 
  ()

License

This project is licensed under the ISC License - see the LICENSE file for details.

OCaml

Innovation. Community. Security.