Merge pull request #2102 from Sh1n3zZ/feat-sora-vertex-adaptor

feat: vertex veo sora-compatible video output
This commit is contained in:
Seefs
2025-10-28 18:36:43 +09:00
committed by GitHub
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,7 +351,10 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
originTask.Progress = ti.Progress originTask.Progress = ti.Progress
} }
if ti.Url != "" { if ti.Url != "" {
originTask.FailReason = ti.Url if strings.HasPrefix(ti.Url, "data:") {
} else {
originTask.FailReason = ti.Url
}
} }
_ = originTask.Update() _ = originTask.Update()
var raw map[string]any var raw map[string]any
@@ -379,18 +382,20 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
case model.TaskStatusQueued, model.TaskStatusSubmitted: case model.TaskStatusQueued, model.TaskStatusSubmitted:
status = "queued" status = "queued"
} }
out := map[string]any{ if !strings.HasPrefix(c.Request.RequestURI, "/v1/videos/") {
"error": nil, out := map[string]any{
"format": format, "error": nil,
"metadata": nil, "format": format,
"status": status, "metadata": nil,
"task_id": originTask.TaskID, "status": status,
"url": originTask.FailReason, "task_id": originTask.TaskID,
"url": originTask.FailReason,
}
respBody, _ = json.Marshal(dto.TaskResponse[any]{
Code: "success",
Data: out,
})
} }
respBody, _ = json.Marshal(dto.TaskResponse[any]{
Code: "success",
Data: out,
})
} }
}() }()