80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package gemini
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
providerUtils "github.com/maximhq/bifrost/core/providers/utils"
|
|
"github.com/maximhq/bifrost/core/schemas"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
// ToGeminiError derives a GeminiGenerationError from a BifrostError
|
|
func ToGeminiError(bifrostErr *schemas.BifrostError) *GeminiGenerationError {
|
|
if bifrostErr == nil {
|
|
return nil
|
|
}
|
|
code := 500
|
|
status := ""
|
|
if bifrostErr.Error != nil && bifrostErr.Error.Type != nil {
|
|
status = *bifrostErr.Error.Type
|
|
}
|
|
message := ""
|
|
if bifrostErr.Error != nil && bifrostErr.Error.Message != "" {
|
|
message = bifrostErr.Error.Message
|
|
}
|
|
if bifrostErr.StatusCode != nil {
|
|
code = *bifrostErr.StatusCode
|
|
}
|
|
return &GeminiGenerationError{
|
|
Error: &GeminiGenerationErrorStruct{
|
|
Code: code,
|
|
Message: message,
|
|
Status: status,
|
|
},
|
|
}
|
|
}
|
|
|
|
// parseGeminiError parses Gemini error responses
|
|
func parseGeminiError(resp *fasthttp.Response) *schemas.BifrostError {
|
|
// Try to parse as []GeminiGenerationError
|
|
var errorResps []GeminiGenerationError
|
|
bifrostErr := providerUtils.HandleProviderAPIError(resp, &errorResps)
|
|
if len(errorResps) > 0 {
|
|
var message string
|
|
var firstError *GeminiGenerationErrorStruct
|
|
for _, errorResp := range errorResps {
|
|
if errorResp.Error != nil {
|
|
if firstError == nil {
|
|
firstError = errorResp.Error
|
|
}
|
|
message = message + errorResp.Error.Message + "\n"
|
|
}
|
|
}
|
|
// Trim trailing newline
|
|
message = strings.TrimSuffix(message, "\n")
|
|
if bifrostErr.Error == nil {
|
|
bifrostErr.Error = &schemas.ErrorField{}
|
|
}
|
|
// Set Code from first error if available
|
|
if firstError != nil {
|
|
bifrostErr.Error.Code = schemas.Ptr(strconv.Itoa(firstError.Code))
|
|
}
|
|
// Set Message to trimmed concatenated message
|
|
bifrostErr.Error.Message = message
|
|
return bifrostErr
|
|
}
|
|
|
|
// Try to parse as GeminiGenerationError
|
|
var errorResp GeminiGenerationError
|
|
bifrostErr = providerUtils.HandleProviderAPIError(resp, &errorResp)
|
|
if errorResp.Error != nil {
|
|
if bifrostErr.Error == nil {
|
|
bifrostErr.Error = &schemas.ErrorField{}
|
|
}
|
|
bifrostErr.Error.Code = schemas.Ptr(strconv.Itoa(errorResp.Error.Code))
|
|
bifrostErr.Error.Message = errorResp.Error.Message
|
|
}
|
|
return bifrostErr
|
|
}
|