feat: 支持视频模型首帧参数及顺序执行逻辑

添加 FirstFrame 字段到模型信息结构体,重构视频节点数据转换处理,支持从上游节点获取视频配置并区分输出字段。实现视频结果重新上传至 OSS,修正字段匹配逻辑为精确匹配,并基于 return_last_frame 参数优化顺序执行中的首帧与内容传递。
This commit is contained in:
2026-06-30 15:15:02 +08:00
parent b83b18a5c8
commit f5be9d8a40
4 changed files with 71 additions and 16 deletions
+18 -4
View File
@@ -299,7 +299,22 @@ func GetModelResult(ctx context.Context, sessionId string, nodeInput *flowDto.No
if !nodeInput.Global.IsDialogue {
sessionId = ""
}
needSequential := false
for _, item := range userForm {
if g.NewVar(item).IsMap() {
valMap := gconv.Map(item)
for _, v := range valMap {
if g.NewVar(v).IsMap() {
vv := gconv.Map(v)
for kk, vvv := range vv {
if kk == "return_last_frame" {
needSequential = vvv.(bool)
}
}
}
}
}
}
composeResult, err := GetComposeResult(ctx, buildType, nodeInput.Config.ModelConfig.ModelName, nodeInput.Config.PromptContent, skillName, form, userForm, nodeInput.Global.FileUrl, sessionId, nodeInput.Config.Id, nodeInput.Config.Name)
if err != nil {
return nil, err
@@ -316,13 +331,12 @@ func GetModelResult(ctx context.Context, sessionId string, nodeInput *flowDto.No
mapTaskResult = make([]map[string]any, len(composeResult.Messages.Rounds))
var taskResultMap map[string]any
needSequential := false
if buildType == 1 {
if needSequential {
for idx, item := range composeResult.Messages.Rounds {
if !g.IsEmpty(taskResultMap) {
var set string
set, err = sjson.Set(gconv.String(item), modelInfo.Model.LastFrame, gconv.String(taskResultMap[modelInfo.Model.ResponseBody]))
set, err = sjson.Set(gconv.String(item), modelInfo.Model.FirstFrame, gconv.String(taskResultMap["content"]))
if err != nil {
return nil, err
}
@@ -339,7 +353,7 @@ func GetModelResult(ctx context.Context, sessionId string, nodeInput *flowDto.No
}
if nodeInput.Config.NodeCode == node.NodeTypeVideoModel {
ext := GetFileTypeByPath(gconv.String(taskResult[modelInfo.Model.ResponseBody]))
ext := GetFileTypeByPath(gconv.String(taskResult["content"]))
if ext == "image" {
taskResultMap = taskResult
} else {