242 lines
7.6 KiB
Go
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
|
|
}
|