| 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() |
| } |
| } |
|
|