|
|
|
|
@@ -107,6 +107,15 @@ func (h *APIHandlers) GeminiHandler(c *gin.Context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (h *APIHandlers) geminiStreamGenerateContent(c *gin.Context, rawJson []byte) {
|
|
|
|
|
alt := h.getAlt(c)
|
|
|
|
|
|
|
|
|
|
if alt == "" {
|
|
|
|
|
c.Header("Content-Type", "text/event-stream")
|
|
|
|
|
c.Header("Cache-Control", "no-cache")
|
|
|
|
|
c.Header("Connection", "keep-alive")
|
|
|
|
|
c.Header("Access-Control-Allow-Origin", "*")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get the http.Flusher interface to manually flush the response.
|
|
|
|
|
flusher, ok := c.Writer.(http.Flusher)
|
|
|
|
|
if !ok {
|
|
|
|
|
@@ -122,8 +131,6 @@ func (h *APIHandlers) geminiStreamGenerateContent(c *gin.Context, rawJson []byte
|
|
|
|
|
modelResult := gjson.GetBytes(rawJson, "model")
|
|
|
|
|
modelName := modelResult.String()
|
|
|
|
|
|
|
|
|
|
alt := h.getAlt(c)
|
|
|
|
|
|
|
|
|
|
cliCtx, cliCancel := context.WithCancel(context.Background())
|
|
|
|
|
var cliClient *client.Client
|
|
|
|
|
defer func() {
|
|
|
|
|
@@ -246,7 +253,7 @@ func (h *APIHandlers) geminiCountTokens(c *gin.Context, rawJson []byte) {
|
|
|
|
|
c.Header("Content-Type", "application/json")
|
|
|
|
|
|
|
|
|
|
alt := h.getAlt(c)
|
|
|
|
|
|
|
|
|
|
// orgRawJson := rawJson
|
|
|
|
|
modelResult := gjson.GetBytes(rawJson, "model")
|
|
|
|
|
modelName := modelResult.String()
|
|
|
|
|
cliCtx, cliCancel := context.WithCancel(context.Background())
|
|
|
|
|
@@ -273,8 +280,13 @@ func (h *APIHandlers) geminiCountTokens(c *gin.Context, rawJson []byte) {
|
|
|
|
|
log.Debugf("Request use account: %s, project id: %s", cliClient.GetEmail(), cliClient.GetProjectID())
|
|
|
|
|
|
|
|
|
|
template := `{"request":{}}`
|
|
|
|
|
template, _ = sjson.SetRaw(template, "request", gjson.GetBytes(rawJson, "generateContentRequest").Raw)
|
|
|
|
|
template, _ = sjson.Delete(template, "generateContentRequest")
|
|
|
|
|
if gjson.GetBytes(rawJson, "generateContentRequest").Exists() {
|
|
|
|
|
template, _ = sjson.SetRaw(template, "request", gjson.GetBytes(rawJson, "generateContentRequest").Raw)
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -286,6 +298,9 @@ func (h *APIHandlers) geminiCountTokens(c *gin.Context, rawJson []byte) {
|
|
|
|
|
c.Status(err.StatusCode)
|
|
|
|
|
_, _ = c.Writer.Write([]byte(err.Error.Error()))
|
|
|
|
|
cliCancel()
|
|
|
|
|
// log.Debugf(err.Error.Error())
|
|
|
|
|
// log.Debugf(string(rawJson))
|
|
|
|
|
// log.Debugf(string(orgRawJson))
|
|
|
|
|
}
|
|
|
|
|
break
|
|
|
|
|
} else {
|
|
|
|
|
|