Thin Anthropic Messages API client for MoonBit built on gaato/http and gaato/sdk-runtime.
Dependencies
pub struct Anthropic {
// private fields
}async fn Anthropic::create_message(self : Anthropic, request : MessageRequest) -> MessageResponse raise SdkErrorasync fn Anthropic::create_message_params(self : Anthropic, params : CreateMessageParams) -> Message raise SdkErrorasync fn Anthropic::list_models(self : Anthropic, limit? : Int, after_id? : String, before_id? : String) -> ListResponseModelInfo raise SdkErrorfn Anthropic::new(api_key~ : String, transport : &Transport, clock : &Clock, base_url? : String, version? : String, auth_header? : AuthHeader, retry? : RetryPolicy) -> Anthropicasync fn[E : Error] Anthropic::stream_message(self : Anthropic, request : MessageRequest, f : async (MessageEvent) -> Unit raise E) -> Unitasync fn[E : Error] Anthropic::stream_message_params(self : Anthropic, params : CreateMessageParams, f : async (MessageStreamEvent) -> Unit raise E) -> Unittest {
let error : @anthropic.ApiErrorBody = {
type_: "invalid_request_error",
message: "invalid request",
}
assert_eq(error.message, "invalid request")
}test {
assert_eq(@anthropic.Message::assistant("hello"), {
role: @anthropic.Assistant,
content: @anthropic.Text("hello"),
})
}test {
let message = @anthropic.Message::tool_result(
tool_use_id="toolu_1",
content="done",
)
assert_eq(message.role, @anthropic.User)
}test {
assert_eq(@anthropic.Message::user("hello"), {
role: @anthropic.User,
content: @anthropic.Text("hello"),
})
}pub(all) enum MessageEvent {
MessageStart(MessageResponse)
ContentBlockStart(index~ : Int, block~ : ContentBlock)
TextDelta(index~ : Int, text~ : String)
ThinkingDelta(index~ : Int, thinking~ : String)
SignatureDelta(index~ : Int, signature~ : String)
InputJsonDelta(index~ : Int, partial_json~ : String)
ContentBlockStop(index~ : Int)
MessageDelta(delta~ : MessageDelta, usage~ : MessageDeltaUsage)
MessageStop
Ping
Error(ApiErrorBody)
Other(String, Json)
} derive(Eq, Debug)pub(all) struct MessageRequest {
model : String
max_tokens : Int
messages : Array[Message]
system : String?
temperature : Double?
stop_sequences : Array[String]?
tools : Array[ToolDef]?
tool_choice : ToolChoice?
thinking : ThinkingConfigParam?
output_config : OutputConfig?
metadata : Metadata?
extra : Map[String, Json]
} derive(Eq, Debug)fn MessageRequest::new(model~ : String, max_tokens~ : Int, messages~ : Array[Message], system? : String, temperature? : Double, stop_sequences? : Array[String], tools? : Array[ToolDef], tool_choice? : ToolChoice, thinking? : ThinkingConfigParam, output_config? : OutputConfig, metadata? : Metadata, extra? : Map[String, Json]) -> MessageRequesttest {
let request = @anthropic.MessageRequest::new(
model="claude-opus-5",
max_tokens=64,
messages=[@anthropic.Message::user("hello")],
)
assert_eq(request.messages.length(), 1)
}pub(all) struct MessageResponse {
id : String
model : String
role : Role
content : Array[ContentBlock]
stop_reason : StopReason?
usage : Usage
message : Message
raw : Json
} derive(Eq, Debug)test {
let tool = @anthropic.ToolDef::new(name="lookup", input_schema={
"type": "object",
})
assert_eq(tool.name, "lookup")
}pub struct ToolUseAccumulator {
// private fields
}test {
let tools = @anthropic.ToolUseAccumulator::new()
tools.feed(
@anthropic.ContentBlockStart(
index=0,
block=@anthropic.ToolUse(id="toolu_1", name="lookup", input={}),
),
)
tools.feed(@anthropic.InputJsonDelta(index=0, partial_json="{}"))
tools.feed(@anthropic.ContentBlockStop(index=0))
assert_eq(tools.finish()[0].2, {})
}fn ToolUseAccumulator::finish(self : ToolUseAccumulator) -> Array[(String, String, Json)] raise ParseErrorInstall
Download zipThin Anthropic Messages API client for MoonBit built on gaato/http and gaato/sdk-runtime.
Dependencies