| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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
- }
- // Handle Jimeng official API request
- 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
- }
- // Update request body
- 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()
- }
- }
|