feat: add `ExtraBody` provider option to openai-compat (#220)

Andrey Nering created

This was already present to some other providers, like Vercel and
OpenRouter.

Change summary

providers/openaicompat/language_model_hooks.go | 3 +++
providers/openaicompat/provider_options.go     | 1 +
2 files changed, 4 insertions(+)

Detailed changes

providers/openaicompat/language_model_hooks.go 🔗

@@ -47,6 +47,9 @@ func PrepareCallFunc(model fantasy.LanguageModel, params *openaisdk.ChatCompleti
 	if providerOptions.User != nil {
 		params.User = param.NewOpt(*providerOptions.User)
 	}
+	if len(providerOptions.ExtraBody) > 0 {
+		params.SetExtraFields(providerOptions.ExtraBody)
+	}
 	return nil, nil
 }
 

providers/openaicompat/provider_options.go 🔗

@@ -28,6 +28,7 @@ func init() {
 type ProviderOptions struct {
 	User            *string                 `json:"user"`
 	ReasoningEffort *openai.ReasoningEffort `json:"reasoning_effort"`
+	ExtraBody       map[string]any          `json:"extra_body,omitempty"`
 }
 
 // ReasoningData represents reasoning data for OpenAI-compatible provider.