feat: vertex veo sora-compatible video output

This commit is contained in:
Sh1n3zZ
2025-10-25 02:00:35 +08:00
parent 032f159509
commit 810641a264
2 changed files with 41 additions and 12 deletions

View File

@@ -10,6 +10,7 @@ import (
"regexp" "regexp"
"strings" "strings"
"github.com/QuantumNous/new-api/common"
"github.com/QuantumNous/new-api/model" "github.com/QuantumNous/new-api/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -302,6 +303,29 @@ func (a *TaskAdaptor) ParseTaskResult(respBody []byte) (*relaycommon.TaskInfo, e
return ti, nil return ti, nil
} }
func (a *TaskAdaptor) ConvertToOpenAIVideo(task *model.Task) ([]byte, error) {
upstreamName, err := decodeLocalTaskID(task.TaskID)
if err != nil {
upstreamName = ""
}
modelName := extractModelFromOperationName(upstreamName)
if strings.TrimSpace(modelName) == "" {
modelName = "veo-3.0-generate-001"
}
v := dto.NewOpenAIVideo()
v.ID = task.TaskID
v.Model = modelName
v.Status = task.Status.ToVideoStatus()
v.SetProgressStr(task.Progress)
v.CreatedAt = task.CreatedAt
v.CompletedAt = task.UpdatedAt
if strings.HasPrefix(task.FailReason, "data:") && len(task.FailReason) > 0 {
v.SetMetadata("url", task.FailReason)
}
return common.Marshal(v)
}
// ============================ // ============================
// helpers // helpers
// ============================ // ============================

View File

@@ -351,8 +351,11 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
originTask.Progress = ti.Progress originTask.Progress = ti.Progress
} }
if ti.Url != "" { if ti.Url != "" {
if strings.HasPrefix(ti.Url, "data:") {
} else {
originTask.FailReason = ti.Url originTask.FailReason = ti.Url
} }
}
_ = originTask.Update() _ = originTask.Update()
var raw map[string]any var raw map[string]any
_ = json.Unmarshal(body, &raw) _ = json.Unmarshal(body, &raw)
@@ -379,6 +382,7 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
case model.TaskStatusQueued, model.TaskStatusSubmitted: case model.TaskStatusQueued, model.TaskStatusSubmitted:
status = "queued" status = "queued"
} }
if !strings.HasPrefix(c.Request.RequestURI, "/v1/videos/") {
out := map[string]any{ out := map[string]any{
"error": nil, "error": nil,
"format": format, "format": format,
@@ -392,6 +396,7 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
Data: out, Data: out,
}) })
} }
}
}() }()
if len(respBody) != 0 { if len(respBody) != 0 {