From 03256dbdad05061654b3d722650f4d1007fdb687 Mon Sep 17 00:00:00 2001 From: CalciumIon <1808837298@qq.com> Date: Fri, 20 Dec 2024 21:50:58 +0800 Subject: [PATCH] refactor: Enhance error handling in Gemini request conversion - Updated `CovertGemini2OpenAI` function to return an error alongside the GeminiChatRequest, improving error reporting for image processing. - Modified `ConvertRequest` methods in both `adaptor.go` files to handle potential errors from the Gemini conversion, ensuring robust request handling. - Improved clarity and maintainability of the code by explicitly managing error cases during request conversion. --- relay/channel/gemini/adaptor.go | 6 +++++- relay/channel/gemini/relay-gemini.go | 8 ++++---- relay/channel/vertex/adaptor.go | 5 ++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/relay/channel/gemini/adaptor.go b/relay/channel/gemini/adaptor.go index d80bd833..8e9dfd1e 100644 --- a/relay/channel/gemini/adaptor.go +++ b/relay/channel/gemini/adaptor.go @@ -57,7 +57,11 @@ func (a *Adaptor) ConvertRequest(c *gin.Context, info *relaycommon.RelayInfo, re if request == nil { return nil, errors.New("request is nil") } - return CovertGemini2OpenAI(*request), nil + ai, err := CovertGemini2OpenAI(*request) + if err != nil { + return nil, err + } + return ai, nil } func (a *Adaptor) ConvertRerankRequest(c *gin.Context, relayMode int, request dto.RerankRequest) (any, error) { diff --git a/relay/channel/gemini/relay-gemini.go b/relay/channel/gemini/relay-gemini.go index 18a54a83..7a0a9694 100644 --- a/relay/channel/gemini/relay-gemini.go +++ b/relay/channel/gemini/relay-gemini.go @@ -17,7 +17,7 @@ import ( ) // Setting safety to the lowest possible values since Gemini is already powerless enough -func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatRequest { +func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) (*GeminiChatRequest, error) { geminiRequest := GeminiChatRequest{ Contents: make([]GeminiChatContent, 0, len(textRequest.Messages)), SafetySettings: []GeminiChatSafetySettings{ @@ -110,7 +110,7 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques imageNum += 1 if constant.GeminiVisionMaxImageNum != -1 && imageNum > constant.GeminiVisionMaxImageNum { - continue + return nil, fmt.Errorf("too many images in the message, max allowed is %d", constant.GeminiVisionMaxImageNum) } // 判断是否是url if strings.HasPrefix(part.ImageUrl.(dto.MessageImageUrl).Url, "http") { @@ -125,7 +125,7 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques } else { _, format, base64String, err := service.DecodeBase64ImageData(part.ImageUrl.(dto.MessageImageUrl).Url) if err != nil { - continue + return nil, fmt.Errorf("decode base64 image data failed: %s", err.Error()) } parts = append(parts, GeminiPart{ InlineData: &GeminiInlineData{ @@ -162,7 +162,7 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques // shouldAddDummyModelMessage = false //} } - return &geminiRequest + return &geminiRequest, nil } func (g *GeminiChatResponse) GetResponseText() string { diff --git a/relay/channel/vertex/adaptor.go b/relay/channel/vertex/adaptor.go index 1b41730d..ebff8207 100644 --- a/relay/channel/vertex/adaptor.go +++ b/relay/channel/vertex/adaptor.go @@ -135,7 +135,10 @@ func (a *Adaptor) ConvertRequest(c *gin.Context, info *relaycommon.RelayInfo, re c.Set("request_model", request.Model) return vertexClaudeReq, nil } else if a.RequestMode == RequestModeGemini { - geminiRequest := gemini.CovertGemini2OpenAI(*request) + geminiRequest, err := gemini.CovertGemini2OpenAI(*request) + if err != nil { + return nil, err + } c.Set("request_model", request.Model) return geminiRequest, nil } else if a.RequestMode == RequestModeLlama {