| package middleware
|
|
|
| import (
|
| "bytes"
|
| "encoding/json"
|
| "io"
|
| "net/http"
|
|
|
| "github.com/QuantumNous/new-api/common"
|
| "github.com/QuantumNous/new-api/constant"
|
| relayconstant "github.com/QuantumNous/new-api/relay/constant"
|
| "github.com/gin-gonic/gin"
|
| )
|
|
|
| func JimengRequestConvert() func(c *gin.Context) {
|
| return func(c *gin.Context) {
|
| action := c.Query("Action")
|
| if action == "" {
|
| abortWithOpenAiMessage(c, http.StatusBadRequest, "Action query parameter is required")
|
| return
|
| }
|
|
|
|
|
| var originalReq map[string]interface{}
|
| if err := common.UnmarshalBodyReusable(c, &originalReq); err != nil {
|
| abortWithOpenAiMessage(c, http.StatusBadRequest, "Invalid request body")
|
| return
|
| }
|
| model, _ := originalReq["req_key"].(string)
|
| prompt, _ := originalReq["prompt"].(string)
|
|
|
| unifiedReq := map[string]interface{}{
|
| "model": model,
|
| "prompt": prompt,
|
| "metadata": originalReq,
|
| }
|
|
|
| jsonData, err := json.Marshal(unifiedReq)
|
| if err != nil {
|
| abortWithOpenAiMessage(c, http.StatusInternalServerError, "Failed to marshal request body")
|
| return
|
| }
|
|
|
|
|
| c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonData))
|
| c.Set(common.KeyRequestBody, jsonData)
|
|
|
| if image, ok := originalReq["image"]; !ok || image == "" {
|
| c.Set("action", constant.TaskActionTextGenerate)
|
| }
|
|
|
| c.Request.URL.Path = "/v1/video/generations"
|
|
|
| if action == "CVSync2AsyncGetResult" {
|
| taskId, ok := originalReq["task_id"].(string)
|
| if !ok || taskId == "" {
|
| abortWithOpenAiMessage(c, http.StatusBadRequest, "task_id is required for CVSync2AsyncGetResult")
|
| return
|
| }
|
| c.Request.URL.Path = "/v1/video/generations/" + taskId
|
| c.Request.Method = http.MethodGet
|
| c.Set("task_id", taskId)
|
| c.Set("relay_mode", relayconstant.RelayModeVideoFetchByID)
|
| }
|
| c.Next()
|
| }
|
| }
|
|
|