218 lines
8.5 KiB
Go
218 lines
8.5 KiB
Go
package perplexity
|
|
|
|
import (
|
|
"github.com/maximhq/bifrost/core/schemas"
|
|
)
|
|
|
|
// ToPerplexityResponsesRequest converts a BifrostResponsesRequest to PerplexityChatRequest
|
|
func ToPerplexityResponsesRequest(bifrostReq *schemas.BifrostResponsesRequest) *PerplexityChatRequest {
|
|
if bifrostReq == nil {
|
|
return nil
|
|
}
|
|
|
|
perplexityReq := &PerplexityChatRequest{
|
|
Model: bifrostReq.Model,
|
|
}
|
|
|
|
// Map basic parameters
|
|
if bifrostReq.Params != nil {
|
|
// Core parameters
|
|
perplexityReq.MaxTokens = bifrostReq.Params.MaxOutputTokens
|
|
perplexityReq.Temperature = bifrostReq.Params.Temperature
|
|
perplexityReq.TopP = bifrostReq.Params.TopP
|
|
|
|
// Handle reasoning effort mapping
|
|
if bifrostReq.Params.Reasoning != nil && bifrostReq.Params.Reasoning.Effort != nil {
|
|
if *bifrostReq.Params.Reasoning.Effort == "minimal" {
|
|
perplexityReq.ReasoningEffort = schemas.Ptr("low")
|
|
} else {
|
|
perplexityReq.ReasoningEffort = schemas.Ptr(*bifrostReq.Params.Reasoning.Effort)
|
|
}
|
|
}
|
|
|
|
// Handle extra parameters for Perplexity-specific fields
|
|
if bifrostReq.Params.ExtraParams != nil {
|
|
// Search-related parameters
|
|
if searchMode, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["search_mode"]); ok {
|
|
perplexityReq.SearchMode = searchMode
|
|
}
|
|
|
|
if languagePreference, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["language_preference"]); ok {
|
|
perplexityReq.LanguagePreference = languagePreference
|
|
}
|
|
|
|
if searchDomainFilter, ok := schemas.SafeExtractStringSlice(bifrostReq.Params.ExtraParams["search_domain_filter"]); ok {
|
|
perplexityReq.SearchDomainFilter = searchDomainFilter
|
|
}
|
|
|
|
if returnImages, ok := schemas.SafeExtractBoolPointer(bifrostReq.Params.ExtraParams["return_images"]); ok {
|
|
perplexityReq.ReturnImages = returnImages
|
|
}
|
|
|
|
if returnRelatedQuestions, ok := schemas.SafeExtractBoolPointer(bifrostReq.Params.ExtraParams["return_related_questions"]); ok {
|
|
perplexityReq.ReturnRelatedQuestions = returnRelatedQuestions
|
|
}
|
|
|
|
if searchRecencyFilter, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["search_recency_filter"]); ok {
|
|
perplexityReq.SearchRecencyFilter = searchRecencyFilter
|
|
}
|
|
|
|
if searchAfterDateFilter, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["search_after_date_filter"]); ok {
|
|
perplexityReq.SearchAfterDateFilter = searchAfterDateFilter
|
|
}
|
|
|
|
if searchBeforeDateFilter, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["search_before_date_filter"]); ok {
|
|
perplexityReq.SearchBeforeDateFilter = searchBeforeDateFilter
|
|
}
|
|
|
|
if lastUpdatedAfterFilter, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["last_updated_after_filter"]); ok {
|
|
perplexityReq.LastUpdatedAfterFilter = lastUpdatedAfterFilter
|
|
}
|
|
|
|
if lastUpdatedBeforeFilter, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["last_updated_before_filter"]); ok {
|
|
perplexityReq.LastUpdatedBeforeFilter = lastUpdatedBeforeFilter
|
|
}
|
|
|
|
if topK, ok := schemas.SafeExtractIntPointer(bifrostReq.Params.ExtraParams["top_k"]); ok {
|
|
perplexityReq.TopK = topK
|
|
}
|
|
|
|
if stream, ok := schemas.SafeExtractBoolPointer(bifrostReq.Params.ExtraParams["stream"]); ok {
|
|
perplexityReq.Stream = stream
|
|
}
|
|
|
|
if disableSearch, ok := schemas.SafeExtractBoolPointer(bifrostReq.Params.ExtraParams["disable_search"]); ok {
|
|
perplexityReq.DisableSearch = disableSearch
|
|
}
|
|
|
|
if enableSearchClassifier, ok := schemas.SafeExtractBoolPointer(bifrostReq.Params.ExtraParams["enable_search_classifier"]); ok {
|
|
perplexityReq.EnableSearchClassifier = enableSearchClassifier
|
|
}
|
|
|
|
if presencePenalty, ok := schemas.SafeExtractFloat64Pointer(bifrostReq.Params.ExtraParams["presence_penalty"]); ok {
|
|
perplexityReq.PresencePenalty = presencePenalty
|
|
}
|
|
|
|
if frequencyPenalty, ok := schemas.SafeExtractFloat64Pointer(bifrostReq.Params.ExtraParams["frequency_penalty"]); ok {
|
|
perplexityReq.FrequencyPenalty = frequencyPenalty
|
|
}
|
|
|
|
if responseFormat, ok := schemas.SafeExtractFromMap(bifrostReq.Params.ExtraParams, "response_format"); ok {
|
|
perplexityReq.ResponseFormat = &responseFormat
|
|
}
|
|
|
|
// Perplexity-specific request fields
|
|
if numSearchResults, ok := schemas.SafeExtractIntPointer(bifrostReq.Params.ExtraParams["num_search_results"]); ok {
|
|
perplexityReq.NumSearchResults = numSearchResults
|
|
}
|
|
|
|
if numImages, ok := schemas.SafeExtractIntPointer(bifrostReq.Params.ExtraParams["num_images"]); ok {
|
|
perplexityReq.NumImages = numImages
|
|
}
|
|
|
|
if searchLanguageFilter, ok := schemas.SafeExtractStringSlice(bifrostReq.Params.ExtraParams["search_language_filter"]); ok {
|
|
perplexityReq.SearchLanguageFilter = searchLanguageFilter
|
|
}
|
|
|
|
if imageFormatFilter, ok := schemas.SafeExtractStringSlice(bifrostReq.Params.ExtraParams["image_format_filter"]); ok {
|
|
perplexityReq.ImageFormatFilter = imageFormatFilter
|
|
}
|
|
|
|
if imageDomainFilter, ok := schemas.SafeExtractStringSlice(bifrostReq.Params.ExtraParams["image_domain_filter"]); ok {
|
|
perplexityReq.ImageDomainFilter = imageDomainFilter
|
|
}
|
|
|
|
if safeSearch, ok := schemas.SafeExtractBoolPointer(bifrostReq.Params.ExtraParams["safe_search"]); ok {
|
|
perplexityReq.SafeSearch = safeSearch
|
|
}
|
|
|
|
if streamMode, ok := schemas.SafeExtractStringPointer(bifrostReq.Params.ExtraParams["stream_mode"]); ok {
|
|
perplexityReq.StreamMode = streamMode
|
|
}
|
|
|
|
// Handle web_search_options
|
|
if webSearchOptionsParam, ok := schemas.SafeExtractFromMap(bifrostReq.Params.ExtraParams, "web_search_options"); ok {
|
|
if webSearchOptionsSlice, ok := webSearchOptionsParam.([]interface{}); ok {
|
|
var webSearchOptions []WebSearchOption
|
|
for _, optionInterface := range webSearchOptionsSlice {
|
|
if optionMap, ok := optionInterface.(map[string]interface{}); ok {
|
|
option := WebSearchOption{}
|
|
|
|
if searchContextSize, ok := schemas.SafeExtractStringPointer(optionMap["search_context_size"]); ok {
|
|
option.SearchContextSize = searchContextSize
|
|
}
|
|
|
|
if imageResultsEnhancedRelevance, ok := schemas.SafeExtractBoolPointer(optionMap["image_results_enhanced_relevance"]); ok {
|
|
option.ImageResultsEnhancedRelevance = imageResultsEnhancedRelevance
|
|
}
|
|
|
|
if searchType, ok := schemas.SafeExtractStringPointer(optionMap["search_type"]); ok {
|
|
option.SearchType = searchType
|
|
}
|
|
|
|
// Handle user_location
|
|
if userLocationParam, ok := schemas.SafeExtractFromMap(optionMap, "user_location"); ok {
|
|
if userLocationMap, ok := userLocationParam.(map[string]interface{}); ok {
|
|
userLocation := &WebSearchOptionUserLocation{}
|
|
|
|
if latitude, ok := schemas.SafeExtractFloat64Pointer(userLocationMap["latitude"]); ok {
|
|
userLocation.Latitude = latitude
|
|
}
|
|
if longitude, ok := schemas.SafeExtractFloat64Pointer(userLocationMap["longitude"]); ok {
|
|
userLocation.Longitude = longitude
|
|
}
|
|
if city, ok := schemas.SafeExtractStringPointer(userLocationMap["city"]); ok {
|
|
userLocation.City = city
|
|
}
|
|
if country, ok := schemas.SafeExtractStringPointer(userLocationMap["country"]); ok {
|
|
userLocation.Country = country
|
|
}
|
|
if region, ok := schemas.SafeExtractStringPointer(userLocationMap["region"]); ok {
|
|
userLocation.Region = region
|
|
}
|
|
|
|
option.UserLocation = userLocation
|
|
}
|
|
}
|
|
|
|
webSearchOptions = append(webSearchOptions, option)
|
|
}
|
|
}
|
|
perplexityReq.WebSearchOptions = webSearchOptions
|
|
}
|
|
}
|
|
|
|
// Handle media_response
|
|
if mediaResponseParam, ok := schemas.SafeExtractFromMap(bifrostReq.Params.ExtraParams, "media_response"); ok {
|
|
if mediaResponseMap, ok := mediaResponseParam.(map[string]interface{}); ok {
|
|
mediaResponse := &MediaResponse{}
|
|
|
|
if overridesParam, ok := schemas.SafeExtractFromMap(mediaResponseMap, "overrides"); ok {
|
|
if overridesMap, ok := overridesParam.(map[string]interface{}); ok {
|
|
overrides := MediaResponseOverrides{}
|
|
|
|
if returnVideos, ok := schemas.SafeExtractBoolPointer(overridesMap["return_videos"]); ok {
|
|
overrides.ReturnVideos = returnVideos
|
|
}
|
|
if returnImages, ok := schemas.SafeExtractBoolPointer(overridesMap["return_images"]); ok {
|
|
overrides.ReturnImages = returnImages
|
|
}
|
|
|
|
mediaResponse.Overrides = overrides
|
|
}
|
|
}
|
|
|
|
perplexityReq.MediaResponse = mediaResponse
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Process ResponsesInput (which contains the Responses messages)
|
|
if bifrostReq.Input != nil {
|
|
perplexityReq.Messages = schemas.ToChatMessages(bifrostReq.Input)
|
|
}
|
|
|
|
return perplexityReq
|
|
}
|