provider_options.go

  1// Package anthropic provides an implementation of the fantasy AI SDK for Anthropic's language models.
  2package anthropic
  3
  4import (
  5	"encoding/json"
  6
  7	"charm.land/fantasy"
  8)
  9
 10// Global type identifiers for Anthropic-specific provider data.
 11const (
 12	TypeProviderOptions         = Name + ".options"
 13	TypeReasoningOptionMetadata = Name + ".reasoning_metadata"
 14	TypeProviderCacheControl    = Name + ".cache_control_options"
 15)
 16
 17// Register Anthropic provider-specific types with the global registry.
 18func init() {
 19	fantasy.RegisterProviderType(TypeProviderOptions, func(data []byte) (fantasy.ProviderOptionsData, error) {
 20		var v ProviderOptions
 21		if err := json.Unmarshal(data, &v); err != nil {
 22			return nil, err
 23		}
 24		return &v, nil
 25	})
 26	fantasy.RegisterProviderType(TypeReasoningOptionMetadata, func(data []byte) (fantasy.ProviderOptionsData, error) {
 27		var v ReasoningOptionMetadata
 28		if err := json.Unmarshal(data, &v); err != nil {
 29			return nil, err
 30		}
 31		return &v, nil
 32	})
 33	fantasy.RegisterProviderType(TypeProviderCacheControl, func(data []byte) (fantasy.ProviderOptionsData, error) {
 34		var v ProviderCacheControlOptions
 35		if err := json.Unmarshal(data, &v); err != nil {
 36			return nil, err
 37		}
 38		return &v, nil
 39	})
 40}
 41
 42// ProviderOptions represents additional options for the Anthropic provider.
 43type ProviderOptions struct {
 44	SendReasoning          *bool                   `json:"send_reasoning"`
 45	Thinking               *ThinkingProviderOption `json:"thinking"`
 46	DisableParallelToolUse *bool                   `json:"disable_parallel_tool_use"`
 47}
 48
 49// Options implements the ProviderOptions interface.
 50func (o *ProviderOptions) Options() {}
 51
 52// MarshalJSON implements custom JSON marshaling with type info for ProviderOptions.
 53func (o ProviderOptions) MarshalJSON() ([]byte, error) {
 54	type plain ProviderOptions
 55	return fantasy.MarshalProviderType(TypeProviderOptions, plain(o))
 56}
 57
 58// UnmarshalJSON implements custom JSON unmarshaling with type info for ProviderOptions.
 59func (o *ProviderOptions) UnmarshalJSON(data []byte) error {
 60	type plain ProviderOptions
 61	var p plain
 62	if err := fantasy.UnmarshalProviderType(data, &p); err != nil {
 63		return err
 64	}
 65	*o = ProviderOptions(p)
 66	return nil
 67}
 68
 69// ThinkingProviderOption represents thinking options for the Anthropic provider.
 70type ThinkingProviderOption struct {
 71	BudgetTokens int64 `json:"budget_tokens"`
 72}
 73
 74// ReasoningOptionMetadata represents reasoning metadata for the Anthropic provider.
 75type ReasoningOptionMetadata struct {
 76	Signature    string `json:"signature"`
 77	RedactedData string `json:"redacted_data"`
 78}
 79
 80// Options implements the ProviderOptions interface.
 81func (*ReasoningOptionMetadata) Options() {}
 82
 83// MarshalJSON implements custom JSON marshaling with type info for ReasoningOptionMetadata.
 84func (m ReasoningOptionMetadata) MarshalJSON() ([]byte, error) {
 85	type plain ReasoningOptionMetadata
 86	return fantasy.MarshalProviderType(TypeReasoningOptionMetadata, plain(m))
 87}
 88
 89// UnmarshalJSON implements custom JSON unmarshaling with type info for ReasoningOptionMetadata.
 90func (m *ReasoningOptionMetadata) UnmarshalJSON(data []byte) error {
 91	type plain ReasoningOptionMetadata
 92	var p plain
 93	if err := fantasy.UnmarshalProviderType(data, &p); err != nil {
 94		return err
 95	}
 96	*m = ReasoningOptionMetadata(p)
 97	return nil
 98}
 99
100// ProviderCacheControlOptions represents cache control options for the Anthropic provider.
101type ProviderCacheControlOptions struct {
102	CacheControl CacheControl `json:"cache_control"`
103}
104
105// Options implements the ProviderOptions interface.
106func (*ProviderCacheControlOptions) Options() {}
107
108// MarshalJSON implements custom JSON marshaling with type info for ProviderCacheControlOptions.
109func (o ProviderCacheControlOptions) MarshalJSON() ([]byte, error) {
110	type plain ProviderCacheControlOptions
111	return fantasy.MarshalProviderType(TypeProviderCacheControl, plain(o))
112}
113
114// UnmarshalJSON implements custom JSON unmarshaling with type info for ProviderCacheControlOptions.
115func (o *ProviderCacheControlOptions) UnmarshalJSON(data []byte) error {
116	type plain ProviderCacheControlOptions
117	var p plain
118	if err := fantasy.UnmarshalProviderType(data, &p); err != nil {
119		return err
120	}
121	*o = ProviderCacheControlOptions(p)
122	return nil
123}
124
125// CacheControl represents cache control settings for the Anthropic provider.
126type CacheControl struct {
127	Type string `json:"type"`
128}
129
130// NewProviderOptions creates new provider options for the Anthropic provider.
131func NewProviderOptions(opts *ProviderOptions) fantasy.ProviderOptions {
132	return fantasy.ProviderOptions{
133		Name: opts,
134	}
135}
136
137// NewProviderCacheControlOptions creates new cache control options for the Anthropic provider.
138func NewProviderCacheControlOptions(opts *ProviderCacheControlOptions) fantasy.ProviderOptions {
139	return fantasy.ProviderOptions{
140		Name: opts,
141	}
142}
143
144// ParseOptions parses provider options from a map for the Anthropic provider.
145func ParseOptions(data map[string]any) (*ProviderOptions, error) {
146	var options ProviderOptions
147	if err := fantasy.ParseOptions(data, &options); err != nil {
148		return nil, err
149	}
150	return &options, nil
151}