diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 01e049358..2481be5c9 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -42,6 +42,11 @@ func betaRequestOptions(flags []string) []option.RequestOption { // by Generate and Stream: user-agent, raw tool injection, and any // beta API flags. func buildRequestOptions(call fantasy.Call, rawTools []json.RawMessage, betaFlags []string) []option.RequestOption { + providerOptions := &ProviderOptions{} + if v, ok := call.ProviderOptions[Name]; ok { + providerOptions, _ = v.(*ProviderOptions) + } + reqOpts := callUARequestOptions(call) if len(rawTools) > 0 { // Tools are injected as raw JSON rather than via params.Tools @@ -50,6 +55,9 @@ func buildRequestOptions(call fantasy.Call, rawTools []json.RawMessage, betaFlag // this will need updating. reqOpts = append(reqOpts, option.WithJSONSet("tools", rawTools)) } + for k, v := range providerOptions.ExtraBody { + reqOpts = append(reqOpts, option.WithJSONSet(k, v)) + } if len(betaFlags) > 0 { reqOpts = append(reqOpts, betaRequestOptions(betaFlags)...) } diff --git a/providers/anthropic/provider_options.go b/providers/anthropic/provider_options.go index ae643b3c7..4c89a4438 100644 --- a/providers/anthropic/provider_options.go +++ b/providers/anthropic/provider_options.go @@ -71,6 +71,7 @@ type ProviderOptions struct { Thinking *ThinkingProviderOption `json:"thinking"` Effort *Effort `json:"effort"` DisableParallelToolUse *bool `json:"disable_parallel_tool_use"` + ExtraBody map[string]any `json:"extra_body,omitempty"` } // Options implements the ProviderOptions interface.