Some upstream Kling deployments still expect the legacy `model` key instead of `model_name`. This change adds the `model` field to `requestPayload` and populates it with the same value as `model_name`, ensuring the generated JSON works with both old and new versions. Changes: • Added `Model string "json:\"model,omitempty\""` to `requestPayload` • Set `Model` alongside `ModelName` in `convertToRequestPayload` • Updated comments to clarify compatibility purpose Result: Kling task requests now contain both `model_name` and `model`, removing integration issues with upstreams that only recognize one of the keys.
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io"
|
|
"one-api/common"
|
|
"one-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()
|
|
}
|
|
}
|