| package middleware | |
| import ( | |
| "bytes" | |
| "encoding/json" | |
| "io" | |
| "github.com/QuantumNous/new-api/common" | |
| "github.com/QuantumNous/new-api/constant" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| func KlingRequestConvert() func(c *gin.Context) { | |
| return func(c *gin.Context) { | |
| var originalReq map[string]interface{} | |
| if err := common.UnmarshalBodyReusable(c, &originalReq); err != nil { | |
| c.Next() | |
| return | |
| } | |
| // Support both model_name and model fields | |
| model, _ := originalReq["model_name"].(string) | |
| if model == "" { | |
| model, _ = originalReq["model"].(string) | |
| } | |
| prompt, _ := originalReq["prompt"].(string) | |
| unifiedReq := map[string]interface{}{ | |
| "model": model, | |
| "prompt": prompt, | |
| "metadata": originalReq, | |
| } | |
| jsonData, err := json.Marshal(unifiedReq) | |
| if err != nil { | |
| c.Next() | |
| return | |
| } | |
| // Rewrite request body and path | |
| c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonData)) | |
| c.Request.URL.Path = "/v1/video/generations" | |
| if image, ok := originalReq["image"]; !ok || image == "" { | |
| c.Set("action", constant.TaskActionTextGenerate) | |
| } | |
| // We have to reset the request body for the next handlers | |
| c.Set(common.KeyRequestBody, jsonData) | |
| c.Next() | |
| } | |
| } | |