mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-23 23:08:37 +00:00
feat: enhance Ali video request handling and validation
This commit is contained in:
@@ -108,6 +108,7 @@ type TaskAdaptor struct {
|
|||||||
ChannelType int
|
ChannelType int
|
||||||
apiKey string
|
apiKey string
|
||||||
baseURL string
|
baseURL string
|
||||||
|
aliReq *AliVideoRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *TaskAdaptor) Init(info *relaycommon.RelayInfo) {
|
func (a *TaskAdaptor) Init(info *relaycommon.RelayInfo) {
|
||||||
@@ -118,6 +119,11 @@ func (a *TaskAdaptor) Init(info *relaycommon.RelayInfo) {
|
|||||||
|
|
||||||
func (a *TaskAdaptor) ValidateRequestAndSetAction(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto.TaskError) {
|
func (a *TaskAdaptor) ValidateRequestAndSetAction(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto.TaskError) {
|
||||||
// 阿里通义万相支持 JSON 格式,不使用 multipart
|
// 阿里通义万相支持 JSON 格式,不使用 multipart
|
||||||
|
var taskReq relaycommon.TaskSubmitReq
|
||||||
|
if err := common.UnmarshalBodyReusable(c, &taskReq); err != nil {
|
||||||
|
return service.TaskErrorWrapper(err, "unmarshal_task_request_failed", http.StatusBadRequest)
|
||||||
|
}
|
||||||
|
a.aliReq = a.convertToAliRequest(info, taskReq)
|
||||||
return relaycommon.ValidateMultipartDirect(c, info)
|
return relaycommon.ValidateMultipartDirect(c, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,13 +140,7 @@ func (a *TaskAdaptor) BuildRequestHeader(c *gin.Context, req *http.Request, info
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *TaskAdaptor) BuildRequestBody(c *gin.Context, info *relaycommon.RelayInfo) (io.Reader, error) {
|
func (a *TaskAdaptor) BuildRequestBody(c *gin.Context, info *relaycommon.RelayInfo) (io.Reader, error) {
|
||||||
var taskReq relaycommon.TaskSubmitReq
|
bodyBytes, err := common.Marshal(a.aliReq)
|
||||||
if err := common.UnmarshalBodyReusable(c, &taskReq); err != nil {
|
|
||||||
return nil, errors.Wrap(err, "unmarshal_task_request_failed")
|
|
||||||
}
|
|
||||||
aliReq := a.convertToAliRequest(taskReq)
|
|
||||||
|
|
||||||
bodyBytes, err := common.Marshal(aliReq)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "marshal_ali_request_failed")
|
return nil, errors.Wrap(err, "marshal_ali_request_failed")
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,31 @@ func (a *TaskAdaptor) BuildRequestBody(c *gin.Context, info *relaycommon.RelayIn
|
|||||||
return bytes.NewReader(bodyBytes), nil
|
return bytes.NewReader(bodyBytes), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *TaskAdaptor) convertToAliRequest(req relaycommon.TaskSubmitReq) *AliVideoRequest {
|
func (a *TaskAdaptor) convertToAliRequest(info *relaycommon.RelayInfo, req relaycommon.TaskSubmitReq) *AliVideoRequest {
|
||||||
|
otherRatios := map[string]map[string]float64{
|
||||||
|
"wan2.5-i2v-preview": {
|
||||||
|
"480P": 1,
|
||||||
|
"720P": 2,
|
||||||
|
"1080P": 1 / 0.3,
|
||||||
|
},
|
||||||
|
"wan2.2-i2v-plus": {
|
||||||
|
"480P": 1,
|
||||||
|
"1080P": 0.7 / 0.14,
|
||||||
|
},
|
||||||
|
"wan2.2-kf2v-flash": {
|
||||||
|
"480P": 1,
|
||||||
|
"720P": 2,
|
||||||
|
"1080P": 4.8,
|
||||||
|
},
|
||||||
|
"wan2.2-i2v-flash": {
|
||||||
|
"480P": 1,
|
||||||
|
"720P": 2,
|
||||||
|
},
|
||||||
|
"wan2.2-s2v": {
|
||||||
|
"480P": 1,
|
||||||
|
"720P": 0.9 / 0.5,
|
||||||
|
},
|
||||||
|
}
|
||||||
aliReq := &AliVideoRequest{
|
aliReq := &AliVideoRequest{
|
||||||
Model: req.Model,
|
Model: req.Model,
|
||||||
Input: AliVideoInput{
|
Input: AliVideoInput{
|
||||||
@@ -196,6 +220,19 @@ func (a *TaskAdaptor) convertToAliRequest(req relaycommon.TaskSubmitReq) *AliVid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
info.PriceData.OtherRatios = map[string]float64{
|
||||||
|
"seconds": float64(aliReq.Parameters.Duration),
|
||||||
|
//"size": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
if otherRatio, ok := otherRatios[req.Model]; ok {
|
||||||
|
if ratio, ok := otherRatio[aliReq.Parameters.Resolution]; ok {
|
||||||
|
info.PriceData.OtherRatios[fmt.Sprintf("resolution-%s", aliReq.Parameters.Resolution)] = ratio
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// println(fmt.Sprintf("other ratios: %v", info.PriceData.OtherRatios))
|
||||||
|
|
||||||
return aliReq
|
return aliReq
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ func ValidateMultipartDirect(c *gin.Context, info *RelayInfo) *dto.TaskError {
|
|||||||
|
|
||||||
prompt = req.Prompt
|
prompt = req.Prompt
|
||||||
model = req.Model
|
model = req.Model
|
||||||
|
size = req.Size
|
||||||
seconds, _ = strconv.Atoi(req.Seconds)
|
seconds, _ = strconv.Atoi(req.Seconds)
|
||||||
if seconds == 0 {
|
if seconds == 0 {
|
||||||
seconds = req.Duration
|
seconds = req.Duration
|
||||||
|
|||||||
Reference in New Issue
Block a user