mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-03-30 04:40:59 +00:00
Merge pull request #2102 from Sh1n3zZ/feat-sora-vertex-adaptor
feat: vertex veo sora-compatible video output
This commit is contained in:
@@ -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
|
||||||
// ============================
|
// ============================
|
||||||
|
|||||||
@@ -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,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user