Enhance Gemini request handling with fallback support for contents

- Added conditional logic to support `contents` as a fallback to `generateContentRequest`.
- Improved template construction and ensured proper cleanup of request fields.
- Introduced debug logging for troubleshooting request generation.
This commit is contained in:
Luis Pater
2025-07-26 17:04:14 +08:00
parent beff9282f6
commit e64fa48823

View File

@@ -246,7 +246,7 @@ func (h *APIHandlers) geminiCountTokens(c *gin.Context, rawJson []byte) {
c.Header("Content-Type", "application/json") c.Header("Content-Type", "application/json")
alt := h.getAlt(c) alt := h.getAlt(c)
// orgRawJson := rawJson
modelResult := gjson.GetBytes(rawJson, "model") modelResult := gjson.GetBytes(rawJson, "model")
modelName := modelResult.String() modelName := modelResult.String()
cliCtx, cliCancel := context.WithCancel(context.Background()) cliCtx, cliCancel := context.WithCancel(context.Background())
@@ -273,8 +273,13 @@ func (h *APIHandlers) geminiCountTokens(c *gin.Context, rawJson []byte) {
log.Debugf("Request use account: %s, project id: %s", cliClient.GetEmail(), cliClient.GetProjectID()) log.Debugf("Request use account: %s, project id: %s", cliClient.GetEmail(), cliClient.GetProjectID())
template := `{"request":{}}` template := `{"request":{}}`
if gjson.GetBytes(rawJson, "generateContentRequest").Exists() {
template, _ = sjson.SetRaw(template, "request", gjson.GetBytes(rawJson, "generateContentRequest").Raw) template, _ = sjson.SetRaw(template, "request", gjson.GetBytes(rawJson, "generateContentRequest").Raw)
template, _ = sjson.Delete(template, "generateContentRequest") template, _ = sjson.Delete(template, "generateContentRequest")
} else if gjson.GetBytes(rawJson, "contents").Exists() {
template, _ = sjson.SetRaw(template, "request.contents", gjson.GetBytes(rawJson, "contents").Raw)
template, _ = sjson.Delete(template, "contents")
}
rawJson = []byte(template) rawJson = []byte(template)
} }
@@ -286,6 +291,9 @@ func (h *APIHandlers) geminiCountTokens(c *gin.Context, rawJson []byte) {
c.Status(err.StatusCode) c.Status(err.StatusCode)
_, _ = c.Writer.Write([]byte(err.Error.Error())) _, _ = c.Writer.Write([]byte(err.Error.Error()))
cliCancel() cliCancel()
// log.Debugf(err.Error.Error())
// log.Debugf(string(rawJson))
// log.Debugf(string(orgRawJson))
} }
break break
} else { } else {