Claudio (Claudio v0.5.0)
View SourceClaudio - An Elixir client for the Anthropic API.
Claudio provides a comprehensive interface for interacting with Claude models through the Anthropic API, including support for:
- Messages API with streaming support
- Tool/function calling
- Message Batches API for large-scale processing
- Request building with validation
- Structured response handling
- Token counting
Quick Start
# Create a client
client = Claudio.Client.new(%{
token: "your-api-key",
version: "2023-06-01"
})
# Build and send a request
alias Claudio.Messages.{Request, Response}
request = Request.new("claude-3-5-sonnet-20241022")
|> Request.add_message(:user, "Hello!")
|> Request.set_max_tokens(1024)
{:ok, response} = Claudio.Messages.create(client, request)
text = Response.get_text(response)
IO.puts(text)Modules
Claudio.Client- HTTP client configurationClaudio.Messages- Messages API operationsClaudio.Messages.Request- Request builderClaudio.Messages.Response- Response parsingClaudio.Messages.Stream- Streaming response handlingClaudio.Batches- Message Batches APIClaudio.Tools- Tool/function calling utilitiesClaudio.Agent- Stateless agent tool-calling loopClaudio.MCP.Client- Model Context Protocol adapterClaudio.A2A.Client- Agent-to-Agent protocol clientClaudio.APIError- API error handling
Examples
Basic Message
client = Claudio.Client.new(%{
token: System.get_env("ANTHROPIC_API_KEY"),
version: "2023-06-01"
})
request = Request.new("claude-3-5-sonnet-20241022")
|> Request.add_message(:user, "What is 2+2?")
|> Request.set_max_tokens(100)
{:ok, response} = Claudio.Messages.create(client, request)
IO.puts(Response.get_text(response))Streaming
request = Request.new("claude-3-5-sonnet-20241022")
|> Request.add_message(:user, "Write a poem")
|> Request.set_max_tokens(1024)
|> Request.enable_streaming()
{:ok, stream} = Claudio.Messages.create(client, request)
stream
|> Claudio.Messages.Stream.parse_events()
|> Claudio.Messages.Stream.accumulate_text()
|> Enum.each(&IO.write/1)Tool Use
alias Claudio.Tools
weather_tool = Tools.define_tool(
"get_weather",
"Get weather for a location",
%{
"type" => "object",
"properties" => %{
"location" => %{"type" => "string"}
},
"required" => ["location"]
}
)
request = Request.new("claude-3-5-sonnet-20241022")
|> Request.add_message(:user, "What's the weather in Paris?")
|> Request.add_tool(weather_tool)
|> Request.set_max_tokens(1024)
{:ok, response} = Claudio.Messages.create(client, request)
if Tools.has_tool_uses?(response) do
tool_uses = Tools.extract_tool_uses(response)
# Execute tools and continue conversation
endBatch Processing
requests = [
%{
"custom_id" => "req-1",
"params" => %{
"model" => "claude-3-5-sonnet-20241022",
"max_tokens" => 1024,
"messages" => [%{"role" => "user", "content" => "Hello"}]
}
}
]
{:ok, batch} = Claudio.Batches.create(client, requests)
{:ok, final} = Claudio.Batches.wait_for_completion(client, batch.id)
{:ok, results} = Claudio.Batches.get_results(client, batch.id)