From 1f2bdb1402cf2bb9b7a551b91842030b33e2fb38 Mon Sep 17 00:00:00 2001 From: CaIon Date: Wed, 15 Oct 2025 21:48:36 +0800 Subject: [PATCH] fix: gemini embedding --- dto/gemini.go | 1 + relay/embedding_handler.go | 2 ++ relay/gemini_handler.go | 3 +++ relay/helper/valid_request.go | 2 +- 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/dto/gemini.go b/dto/gemini.go index 947e90a3f..d9d153374 100644 --- a/dto/gemini.go +++ b/dto/gemini.go @@ -12,6 +12,7 @@ import ( ) type GeminiChatRequest struct { + Requests []GeminiChatRequest `json:"requests,omitempty"` // For batch requests Contents []GeminiChatContent `json:"contents"` SafetySettings []GeminiChatSafetySettings `json:"safetySettings,omitempty"` GenerationConfig GeminiChatGenerationConfig `json:"generationConfig,omitempty"` diff --git a/relay/embedding_handler.go b/relay/embedding_handler.go index a67794455..9bb76df03 100644 --- a/relay/embedding_handler.go +++ b/relay/embedding_handler.go @@ -8,6 +8,7 @@ import ( "github.com/QuantumNous/new-api/common" "github.com/QuantumNous/new-api/dto" + "github.com/QuantumNous/new-api/logger" relaycommon "github.com/QuantumNous/new-api/relay/common" "github.com/QuantumNous/new-api/relay/helper" "github.com/QuantumNous/new-api/service" @@ -48,6 +49,7 @@ func EmbeddingHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError * if err != nil { return types.NewError(err, types.ErrorCodeConvertRequestFailed, types.ErrOptionWithSkipRetry()) } + logger.LogDebug(c, fmt.Sprintf("converted embedding request body: %s", string(jsonData))) requestBody := bytes.NewBuffer(jsonData) statusCodeMappingStr := c.GetString("status_code_mapping") resp, err := adaptor.DoRequest(c, info, requestBody) diff --git a/relay/gemini_handler.go b/relay/gemini_handler.go index a95b67f8b..b3eb7f336 100644 --- a/relay/gemini_handler.go +++ b/relay/gemini_handler.go @@ -240,6 +240,8 @@ func GeminiEmbeddingHandler(c *gin.Context, info *relaycommon.RelayInfo) (newAPI return types.NewError(err, types.ErrorCodeChannelModelMappedError, types.ErrOptionWithSkipRetry()) } + req.SetModelName("models/" + info.UpstreamModelName) + adaptor := GetAdaptor(info.ApiType) if adaptor == nil { return types.NewError(fmt.Errorf("invalid api type: %d", info.ApiType), types.ErrorCodeInvalidApiType, types.ErrOptionWithSkipRetry()) @@ -264,6 +266,7 @@ func GeminiEmbeddingHandler(c *gin.Context, info *relaycommon.RelayInfo) (newAPI return types.NewError(err, types.ErrorCodeChannelParamOverrideInvalid, types.ErrOptionWithSkipRetry()) } } + logger.LogDebug(c, "Gemini embedding request body: "+string(jsonData)) requestBody = bytes.NewReader(jsonData) resp, err := adaptor.DoRequest(c, info, requestBody) diff --git a/relay/helper/valid_request.go b/relay/helper/valid_request.go index a761c68ce..d48939387 100644 --- a/relay/helper/valid_request.go +++ b/relay/helper/valid_request.go @@ -300,7 +300,7 @@ func GetAndValidateGeminiRequest(c *gin.Context) (*dto.GeminiChatRequest, error) if err != nil { return nil, err } - if len(request.Contents) == 0 { + if len(request.Contents) == 0 && len(request.Requests) == 0 { return nil, errors.New("contents is required") }