Files
bifrost/plugins/compat/dropparams.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

242 lines
7.6 KiB
Go

package compat
import (
"fmt"
"github.com/maximhq/bifrost/core/schemas"
)
// dropUnsupportedParams removes unsupported model parameters from a request in place.
func dropUnsupportedParams(req *schemas.BifrostRequest, supportedParams []string) []string {
if req == nil {
return nil
}
isSupported := make(map[string]bool, len(supportedParams))
for _, param := range supportedParams {
isSupported[param] = true
}
var dropped []string
if req.ChatRequest != nil && req.ChatRequest.Params != nil {
params := req.ChatRequest.Params
if params.Audio != nil && !isSupported["audio"] {
params.Audio = nil
dropped = append(dropped, "audio")
}
if params.FrequencyPenalty != nil && !isSupported["frequency_penalty"] {
params.FrequencyPenalty = nil
dropped = append(dropped, "frequency_penalty")
}
if params.LogitBias != nil && !isSupported["logit_bias"] {
params.LogitBias = nil
dropped = append(dropped, "logit_bias")
}
if params.LogProbs != nil && !isSupported["logprobs"] {
params.LogProbs = nil
dropped = append(dropped, "logprobs")
}
if params.MaxCompletionTokens != nil && !isSupported["max_completion_tokens"] {
params.MaxCompletionTokens = nil
dropped = append(dropped, "max_completion_tokens")
}
if params.Metadata != nil && !isSupported["metadata"] {
params.Metadata = nil
dropped = append(dropped, "metadata")
}
if params.ParallelToolCalls != nil && !isSupported["parallel_tool_calls"] {
params.ParallelToolCalls = nil
dropped = append(dropped, "parallel_tool_calls")
}
if params.Prediction != nil && !isSupported["prediction"] {
params.Prediction = nil
dropped = append(dropped, "prediction")
}
if params.PresencePenalty != nil && !isSupported["presence_penalty"] {
params.PresencePenalty = nil
dropped = append(dropped, "presence_penalty")
}
if params.PromptCacheKey != nil && !isSupported["prompt_cache_key"] {
params.PromptCacheKey = nil
dropped = append(dropped, "prompt_cache_key")
}
if params.PromptCacheRetention != nil && !isSupported["prompt_cache_retention"] {
params.PromptCacheRetention = nil
dropped = append(dropped, "prompt_cache_retention")
}
if params.Reasoning != nil && !isSupported["reasoning"] {
params.Reasoning = nil
dropped = append(dropped, "reasoning")
}
if params.ResponseFormat != nil && !isSupported["response_format"] {
params.ResponseFormat = nil
dropped = append(dropped, "response_format")
}
if params.Seed != nil && !isSupported["seed"] {
params.Seed = nil
dropped = append(dropped, "seed")
}
if params.ServiceTier != nil && !isSupported["service_tier"] {
params.ServiceTier = nil
dropped = append(dropped, "service_tier")
}
if len(params.Stop) > 0 && !isSupported["stop"] {
params.Stop = nil
dropped = append(dropped, "stop")
}
if params.Temperature != nil && !isSupported["temperature"] {
params.Temperature = nil
dropped = append(dropped, "temperature")
}
if params.TopLogProbs != nil && !isSupported["top_logprobs"] {
params.TopLogProbs = nil
dropped = append(dropped, "top_logprobs")
}
if params.TopP != nil && !isSupported["top_p"] {
params.TopP = nil
dropped = append(dropped, "top_p")
}
if params.ToolChoice != nil && !isSupported["tool_choice"] {
params.ToolChoice = nil
dropped = append(dropped, "tool_choice")
}
if len(params.Tools) > 0 && !isSupported["tools"] {
params.Tools = nil
dropped = append(dropped, "tools")
}
if params.Verbosity != nil && !isSupported["verbosity"] {
params.Verbosity = nil
dropped = append(dropped, "verbosity")
}
if params.WebSearchOptions != nil && !isSupported["web_search_options"] {
params.WebSearchOptions = nil
dropped = append(dropped, "web_search_options")
}
}
if req.ResponsesRequest != nil && req.ResponsesRequest.Params != nil {
params := req.ResponsesRequest.Params
if params.MaxOutputTokens != nil && !isSupported["max_output_tokens"] {
params.MaxOutputTokens = nil
dropped = append(dropped, "max_output_tokens")
}
if params.MaxToolCalls != nil && !isSupported["max_tool_calls"] {
params.MaxToolCalls = nil
dropped = append(dropped, "max_tool_calls")
}
if params.Metadata != nil && !isSupported["metadata"] {
params.Metadata = nil
dropped = append(dropped, "metadata")
}
if params.ParallelToolCalls != nil && !isSupported["parallel_tool_calls"] {
params.ParallelToolCalls = nil
dropped = append(dropped, "parallel_tool_calls")
}
if params.PromptCacheKey != nil && !isSupported["prompt_cache_key"] {
params.PromptCacheKey = nil
dropped = append(dropped, "prompt_cache_key")
}
if params.Reasoning != nil && !isSupported["reasoning"] {
params.Reasoning = nil
dropped = append(dropped, "reasoning")
}
if params.ServiceTier != nil && !isSupported["service_tier"] {
params.ServiceTier = nil
dropped = append(dropped, "service_tier")
}
if params.Temperature != nil && !isSupported["temperature"] {
params.Temperature = nil
dropped = append(dropped, "temperature")
}
if params.Text != nil && !isSupported["text"] {
params.Text = nil
dropped = append(dropped, "text")
}
if params.TopLogProbs != nil && !isSupported["top_logprobs"] {
params.TopLogProbs = nil
dropped = append(dropped, "top_logprobs")
}
if params.TopP != nil && !isSupported["top_p"] {
params.TopP = nil
dropped = append(dropped, "top_p")
}
if params.ToolChoice != nil && !isSupported["tool_choice"] {
params.ToolChoice = nil
dropped = append(dropped, "tool_choice")
}
if len(params.Tools) > 0 && !isSupported["tools"] {
params.Tools = nil
dropped = append(dropped, "tools")
}
if !isSupported["web_search"] {
droppedKeys := dropWebsearchToolCalls(req)
dropped = append(dropped, droppedKeys...)
}
}
if req.TextCompletionRequest != nil && req.TextCompletionRequest.Params != nil {
params := req.TextCompletionRequest.Params
if params.FrequencyPenalty != nil && !isSupported["frequency_penalty"] {
params.FrequencyPenalty = nil
dropped = append(dropped, "frequency_penalty")
}
if params.LogitBias != nil && !isSupported["logit_bias"] {
params.LogitBias = nil
dropped = append(dropped, "logit_bias")
}
if params.LogProbs != nil && !isSupported["logprobs"] {
params.LogProbs = nil
dropped = append(dropped, "logprobs")
}
if params.MaxTokens != nil && !isSupported["max_tokens"] {
params.MaxTokens = nil
dropped = append(dropped, "max_tokens")
}
if params.N != nil && !isSupported["n"] {
params.N = nil
dropped = append(dropped, "n")
}
if params.PresencePenalty != nil && !isSupported["presence_penalty"] {
params.PresencePenalty = nil
dropped = append(dropped, "presence_penalty")
}
if params.Seed != nil && !isSupported["seed"] {
params.Seed = nil
dropped = append(dropped, "seed")
}
if len(params.Stop) > 0 && !isSupported["stop"] {
params.Stop = nil
dropped = append(dropped, "stop")
}
if params.Temperature != nil && !isSupported["temperature"] {
params.Temperature = nil
dropped = append(dropped, "temperature")
}
if params.TopP != nil && !isSupported["top_p"] {
params.TopP = nil
dropped = append(dropped, "top_p")
}
}
return dropped
}
// dropWebsearchToolCalls drops web search tool calls from the request
func dropWebsearchToolCalls(req *schemas.BifrostRequest) []string {
dropped := []string{}
tools := req.ResponsesRequest.Params.Tools
kept := tools[:0]
for i, tool := range tools {
if tool.Type == schemas.ResponsesToolTypeWebSearch || tool.Type == schemas.ResponsesToolTypeWebSearchPreview {
dropped = append(dropped, fmt.Sprintf("tools[%d].%s", i, tool.Type))
} else {
kept = append(kept, tool)
}
}
req.ResponsesRequest.Params.Tools = kept
return dropped
}