on main help sign in
chore: add extra body & header to openai and anthropic
commita3f6f0fe2955ed9fde8bb3c730cd8f831211f16f authorKujtim Hoxha <kujtimii.h@gmail.com> dateFri 18 Jul 2025, 12:41 (1 year ago) parent7ee0eb0
5 files changed+17−4
internal/config/config.go+2 internal/config/load.go+1 internal/llm/provider/anthropic.go+6 internal/llm/provider/openai.go+6−4 internal/llm/provider/provider.go+2
internal/config/config.go+2
@@ -75,6 +75,8 @@ type ProviderConfig struct {
7575
7676 // Extra headers to send with each request to the provider.
7777 ExtraHeaders map[string]string `json:"extra_headers,omitempty"`
78+ // Extra body
79+ ExtraBody map[string]any `json:"extra_body,omitempty"`
7880
7981 // Used to pass extra parameters to the provider.
8082 ExtraParams map[string]string `json:"-"`
internal/config/load.go+1
@@ -141,6 +141,7 @@ func (c *Config) configureProviders(env env.Env, resolver VariableResolver, know
141141 Type: p.Type,
142142 Disable: config.Disable,
143143 ExtraHeaders: config.ExtraHeaders,
144+ ExtraBody: config.ExtraBody,
144145 ExtraParams: make(map[string]string),
145146 Models: p.Models,
146147 }
internal/llm/provider/anthropic.go+6
@@ -45,6 +45,12 @@ func createAnthropicClient(opts providerClientOptions, useBedrock bool) anthropi
4545 if useBedrock {
4646 anthropicClientOptions = append(anthropicClientOptions, bedrock.WithLoadDefaultConfig(context.Background()))
4747 }
48+ for _, header := range opts.extraHeaders {
49+ anthropicClientOptions = append(anthropicClientOptions, option.WithHeaderAdd(header, opts.extraHeaders[header]))
50+ }
51+ for key, value := range opts.extraBody {
52+ anthropicClientOptions = append(anthropicClientOptions, option.WithJSONSet(key, value))
53+ }
4854 return anthropic.NewClient(anthropicClientOptions...)
4955}
5056
internal/llm/provider/openai.go+6−4
@@ -44,10 +44,12 @@ func createOpenAIClient(opts providerClientOptions) openai.Client {
4444 }
4545 }
4646
47− if opts.extraHeaders != nil {
48− for key, value := range opts.extraHeaders {
49− openaiClientOptions = append(openaiClientOptions, option.WithHeader(key, value))
50− }
47+ for key, value := range opts.extraHeaders {
48+ openaiClientOptions = append(openaiClientOptions, option.WithHeader(key, value))
49+ }
50+
51+ for extraKey, extraValue := range opts.extraBody {
52+ openaiClientOptions = append(openaiClientOptions, option.WithJSONSet(extraKey, extraValue))
5153 }
5254
5355 return openai.NewClient(openaiClientOptions...)
internal/llm/provider/provider.go+2
@@ -70,6 +70,7 @@ type providerClientOptions struct {
7070 systemMessage string
7171 maxTokens int64
7272 extraHeaders map[string]string
73+ extraBody map[string]any
7374 extraParams map[string]string
7475}
7576
@@ -147,6 +148,7 @@ func NewProvider(cfg config.ProviderConfig, opts ...ProviderClientOption) (Provi
147148 config: cfg,
148149 apiKey: resolvedAPIKey,
149150 extraHeaders: cfg.ExtraHeaders,
151+ extraBody: cfg.ExtraBody,
150152 model: func(tp config.SelectedModelType) provider.Model {
151153 return *config.Get().GetModelByType(tp)
152154 },