Previously, the KlingRequestConvert middleware only extracted model name from the 'model_name' field, which caused 503 errors when requests used the 'model' field instead. This enhancement improves API compatibility by supporting both field names. Changes: - Modified KlingRequestConvert() to check for 'model' field if 'model_name' is empty - Maintains backward compatibility with existing 'model_name' usage - Fixes "no available channels for model" error when model field was not recognized This resolves issues where valid Kling API requests were failing due to field name mismatches, improving the overall user experience for video generation APIs.
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
|
|
}
|
|
|
|
// 支持 model_name 和 model 两个字段
|
|
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()
|
|
}
|
|
}
|