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

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
}