anthropic

package
v0.34.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Claude 4.6 (current).
	ModelOpus   = "claude-opus-4-6"
	ModelSonnet = "claude-sonnet-4-6"

	// Claude 4.5 (Haiku latest).
	ModelHaiku = "claude-haiku-4-5-20251001"
)

Model ID constants for programmatic use.

View Source
const (

	// AnthropicVersion is the Anthropic API version header value used by all
	// providers that speak the Anthropic API (anthropic, claude).
	AnthropicVersion = "2023-06-01"
)

Variables

View Source
var ModelAliases = map[string]string{
	"opus":   ModelOpus,
	"sonnet": ModelSonnet,
	"haiku":  ModelHaiku,
}

ModelAliases maps short alias names to full model IDs. These are used by the auto package for provider-prefixed resolution (e.g., "claude/sonnet").

Functions

func BuildRequestBytes added in v0.29.0

func BuildRequestBytes(reqOpts RequestOptions) ([]byte, error)

BuildRequestBytes builds a JSON Request body for the Anthropic API.

func CalculateCost added in v0.16.0

func CalculateCost(model string, usage *llm.Usage) float64

CalculateCost computes the total cost in USD for the given usage and model. Returns 0 if the model is unknown.

func DefaultOptions added in v0.12.0

func DefaultOptions() []llm.Option

DefaultOptions returns the default options for Anthropic.

func FillCost added in v0.21.0

func FillCost(model string, usage *llm.Usage)

FillCost calculates the cost for the given usage and model and populates both the total Cost field and the granular breakdown fields on the usage struct. No-op if usage is nil or the model is unknown.

func ParseStream added in v0.16.0

func ParseStream(ctx context.Context, body io.ReadCloser, opts ParseOpts) llm.Stream

ParseStream reads an Anthropic-format SSE response body in a background goroutine and returns a stream of structured events.

Ownership: ParseStream takes ownership of body and closes it when the stream ends or ctx is cancelled.

Types

type CacheControl added in v0.29.0

type CacheControl struct {
	Type string `json:"type"`          // always "ephemeral"
	TTL  string `json:"ttl,omitempty"` // "1h" for extended TTL; omit for default 5m
}

CacheControl is the Anthropic API wire type for cache breakpoints.

type ContentBlock added in v0.29.0

type ContentBlock struct {
	Type string `json:"type"`
	Text string `json:"text,omitempty"`
	ID   string `json:"id,omitempty"`
	Name string `json:"name,omitempty"`
}

ContentBlock describes the type and initial state of a content block.

type ContentBlockDelta added in v0.29.0

type ContentBlockDelta struct {
	Type        string `json:"type"`
	Text        string `json:"text,omitempty"`
	PartialJSON string `json:"partial_json,omitempty"`
	Thinking    string `json:"thinking,omitempty"`
	// Signature is the cryptographic verification token emitted by a
	// signature_delta event at the end of a ThinkingConfig block. It must be
	// passed back verbatim to the API in subsequent requests.
	Signature string `json:"signature,omitempty"`
}

ContentBlockDelta is the delta payload within a ContentBlockDeltaEvent.

type ContentBlockDeltaEvent added in v0.29.0

type ContentBlockDeltaEvent struct {
	Index int               `json:"index"`
	Delta ContentBlockDelta `json:"delta"`
}

ContentBlockDeltaEvent carries an incremental delta within a content block.

type ContentBlockStartEvent added in v0.29.0

type ContentBlockStartEvent struct {
	Index        int          `json:"index"`
	ContentBlock ContentBlock `json:"content_block"`
}

ContentBlockStartEvent marks the beginning of a content block (text, tool_use, ThinkingConfig).

type ContentBlockStopEvent added in v0.29.0

type ContentBlockStopEvent struct {
	Index int `json:"index"`
}

ContentBlockStopEvent signals the end of a content block.

type CostFn added in v0.29.0

type CostFn func(model string, usage *llm.Usage)

CostFn calculates token costs for a given model and populates the cost fields on usage. Providers that reuse ParseStream with different pricing (e.g. MiniMax) supply their own CostFn instead of wrapping the publisher.

type Message added in v0.29.0

type Message struct {
	Role    string         `json:"role"`
	Content MessageContent `json:"content"`
}

type MessageContent added in v0.29.0

type MessageContent []MessageContentBlock

type MessageContentBlock added in v0.29.0

type MessageContentBlock interface {
	// contains filtered or unexported methods
}

type MessageContentBlockX added in v0.29.0

type MessageContentBlockX struct {
	Type string `json:"type"`

	Text string `json:"text,omitempty"`

	// === ToolUse Request ===
	ID    string         `json:"id,omitempty"`
	Name  string         `json:"name,omitempty"`
	Input map[string]any `json:"input,omitempty"` // No omitempty — Anthropic requires this field

	ToolUseID string `json:"tool_use_id,omitempty"`
	Content   string `json:"content,omitempty"`
	IsError   bool   `json:"is_error,omitempty"`

	CacheControl *CacheControl `json:"cache_control,omitempty"`
}

type MessageDelta added in v0.29.0

type MessageDelta struct {
	StopReason string `json:"stop_reason"`
}

MessageDelta is the delta payload of a MessageDeltaEvent.

type MessageDeltaEvent added in v0.29.0

type MessageDeltaEvent struct {
	Delta MessageDelta `json:"delta"`
	Usage OutputUsage  `json:"usage"`
}

MessageDeltaEvent carries the stop reason and final output token count.

type MessageStartEvent added in v0.29.0

type MessageStartEvent struct {
	Message MessageStartPayload `json:"message"`
}

MessageStartEvent is emitted at the beginning of a streaming response.

type MessageStartPayload added in v0.29.0

type MessageStartPayload struct {
	ID    string       `json:"id"`
	Model string       `json:"model"`
	Usage MessageUsage `json:"usage"`
}

MessageStartPayload is the payload of a MessageStartEvent.

type MessageStopEvent added in v0.29.0

type MessageStopEvent struct{}

MessageStopEvent signals that the message stream is complete. It carries no payload.

type MessageUsage added in v0.29.0

type MessageUsage struct {
	InputTokens              int `json:"input_tokens"`
	CacheCreationInputTokens int `json:"cache_creation_input_tokens"`
	CacheReadInputTokens     int `json:"cache_read_input_tokens"`
}

MessageUsage carries input token counts from the message_start event.

type OutputUsage added in v0.29.0

type OutputUsage struct {
	OutputTokens int `json:"output_tokens"`
}

OutputUsage carries output token counts from the message_delta event.

type ParseOpts added in v0.29.0

type ParseOpts struct {
	Model string

	// CostFn overrides the default Anthropic cost calculation.
	// When nil, FillCost (Anthropic pricing) is used.
	CostFn CostFn

	// ResponseHeaders contains HTTP response headers, used to extract rate-limit info.
	// Keys should be lowercase header names.
	ResponseHeaders map[string]string
}

ParseOpts configures how ParseStream processes an Anthropic-format SSE body.

type Provider

type Provider struct {
	// contains filtered or unexported fields
}

Provider implements the direct Anthropic API backend.

func New

func New(opts ...llm.Option) *Provider

New creates a new Anthropic provider.

func (*Provider) CountTokens added in v0.24.0

CountTokens estimates the number of input tokens for the given Request.

This is a local approximation using the cl100k_base BPE encoding — no network call is made. Anthropic's tokenizer is proprietary and not publicly available; cl100k_base gives ±5–10% accuracy for English text.

For exact counts, use the Anthropic /v1/messages/count_tokens API directly.

func (*Provider) CreateStream

func (p *Provider) CreateStream(ctx context.Context, opts llm.Request) (llm.Stream, error)

func (*Provider) Models

func (p *Provider) Models() llm.Models

func (*Provider) Name

func (p *Provider) Name() string

func (*Provider) Resolve added in v0.29.0

func (p *Provider) Resolve(modelID string) (llm.Model, error)

type Request added in v0.29.0

type Request struct {
	Model        string           `json:"model"`
	MaxTokens    int              `json:"max_tokens"`
	Stream       bool             `json:"stream"`
	System       SystemBlocks     `json:"system,omitempty"`
	Messages     []Message        `json:"messages"`
	Tools        []ToolDefinition `json:"tools,omitempty"`
	ToolChoice   any              `json:"tool_choice,omitempty"`
	Thinking     *ThinkingConfig  `json:"thinking,omitempty"`
	Metadata     *metadata        `json:"metadata,omitempty"`
	CacheControl *CacheControl    `json:"cache_control,omitempty"`
	TopK         int              `json:"top_k,omitempty"`
	TopP         float64          `json:"top_p,omitempty"`
	OutputConfig *outputConfig    `json:"output_config,omitempty"`
}

func BuildRequest added in v0.16.0

func BuildRequest(reqOpts RequestOptions) (Request, error)

BuildRequest builds a JSON Request body for the Anthropic API.

type RequestOptions added in v0.16.0

type RequestOptions struct {
	SystemBlocks SystemBlocks
	UserID       string
	LLMRequest   llm.Request
}

RequestOptions contains options for building an Anthropic Request.

type StreamErrorEvent added in v0.29.0

type StreamErrorEvent struct {
	Error StreamErrorPayload `json:"error"`
}

StreamErrorEvent is sent when the API returns a stream-level error. Named StreamErrorEvent to avoid collision with llm.ErrorEvent.

type StreamErrorPayload added in v0.29.0

type StreamErrorPayload struct {
	Message string `json:"message"`
}

StreamErrorPayload carries the error message from a StreamErrorEvent.

type SystemBlocks added in v0.29.0

type SystemBlocks []*TextBlock

type TextBlock added in v0.29.0

type TextBlock struct {
	Text string `json:"text"`
	// contains filtered or unexported fields
}

func Text added in v0.29.0

func Text(text string) *TextBlock

func (*TextBlock) WithCacheControl added in v0.29.0

func (b *TextBlock) WithCacheControl(cc *CacheControl) *TextBlock

type ThinkingBlock added in v0.29.0

type ThinkingBlock struct {
	Thinking  string `json:"thinking"`
	Signature string `json:"signature"`
	// contains filtered or unexported fields
}

func Thinking added in v0.29.0

func Thinking(thinking, signature string) *ThinkingBlock

func (*ThinkingBlock) WithCacheControl added in v0.29.0

func (b *ThinkingBlock) WithCacheControl(cc *CacheControl) *ThinkingBlock

type ThinkingConfig added in v0.29.0

type ThinkingConfig struct {
	Type         string `json:"type"` // "enabled", "adaptive", or "disabled"
	BudgetTokens int    `json:"budget_tokens,omitempty"`
}

type ToolDefinition added in v0.29.0

type ToolDefinition struct {
	Name         string        `json:"name"`
	Description  string        `json:"description"`
	InputSchema  any           `json:"input_schema"`
	CacheControl *CacheControl `json:"cache_control,omitempty"`
}

type ToolResultBlock added in v0.29.0

type ToolResultBlock struct {
	ToolUseID string `json:"tool_use_id"`
	Content   string `json:"content"`
	IsError   bool   `json:"is_error"`
	// contains filtered or unexported fields
}

func ToolResult added in v0.29.0

func ToolResult(id, content string, isError bool) ToolResultBlock

type ToolUseBlock added in v0.29.0

type ToolUseBlock struct {
	ID    string         `json:"id"`
	Name  string         `json:"name"`
	Input map[string]any `json:"input"`
	// contains filtered or unexported fields
}

func ToolUse added in v0.29.0

func ToolUse(id, name string, input map[string]any) ToolUseBlock

Directories

Path Synopsis
Package claude provides an Anthropic provider using Claude OAuth tokens.
Package claude provides an Anthropic provider using Claude OAuth tokens.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL