Files
bifrost/core/providers/openai/text.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

76 lines
2.4 KiB
Go

package openai
import (
"maps"
"github.com/maximhq/bifrost/core/providers/utils"
"github.com/maximhq/bifrost/core/schemas"
)
// ToOpenAITextCompletionRequest converts a Bifrost text completion request to OpenAI format
func ToOpenAITextCompletionRequest(bifrostReq *schemas.BifrostTextCompletionRequest) *OpenAITextCompletionRequest {
if bifrostReq == nil {
return nil
}
params := bifrostReq.Params
openaiReq := &OpenAITextCompletionRequest{
Model: bifrostReq.Model,
Prompt: bifrostReq.Input,
}
if params != nil {
openaiReq.TextCompletionParameters = *params
// Drop user field if it exceeds OpenAI's 64 character limit
openaiReq.TextCompletionParameters.User = SanitizeUserField(openaiReq.TextCompletionParameters.User)
if bifrostReq.Params.ExtraParams != nil {
openaiReq.ExtraParams = maps.Clone(bifrostReq.Params.ExtraParams)
openaiReq.TextCompletionParameters.ExtraParams = openaiReq.ExtraParams
}
}
if bifrostReq.Provider == schemas.Fireworks {
openaiReq.applyFireworksTextCompletionCompatibility()
}
return openaiReq
}
// applyFireworksTextCompletionCompatibility maps Fireworks-specific text fields.
func (req *OpenAITextCompletionRequest) applyFireworksTextCompletionCompatibility() {
if req == nil || req.ExtraParams == nil {
return
}
// Fireworks uses prompt_cache_isolation_key for text-completion cache isolation.
if req.PromptCacheIsolationKey == nil {
if value, ok := req.ExtraParams["prompt_cache_key"]; ok {
switch typed := value.(type) {
case string:
if typed != "" {
req.PromptCacheIsolationKey = &typed
}
case *string:
if typed != nil && *typed != "" {
req.PromptCacheIsolationKey = typed
}
}
}
}
delete(req.ExtraParams, "prompt_cache_key")
req.TextCompletionParameters.ExtraParams = req.ExtraParams
}
// ToBifrostTextCompletionRequest converts an OpenAI text completion request to Bifrost format
func (req *OpenAITextCompletionRequest) ToBifrostTextCompletionRequest(ctx *schemas.BifrostContext) *schemas.BifrostTextCompletionRequest {
if req == nil {
return nil
}
provider, model := schemas.ParseModelString(req.Model, utils.CheckAndSetDefaultProvider(ctx, schemas.OpenAI))
return &schemas.BifrostTextCompletionRequest{
Provider: provider,
Model: model,
Input: req.Prompt,
Params: &req.TextCompletionParameters,
Fallbacks: schemas.ParseFallbacks(req.Fallbacks),
}
}