Просмотр исходного кода

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

feat: vertex veo sora-compatible video output
Seefs 2 месяцев назад
Родитель
Сommit
1c582cde31
2 измененных файлов с 41 добавлено и 12 удалено
  1. 24 0
      relay/channel/task/vertex/adaptor.go
  2. 17 12
      relay/relay_task.go

+ 24 - 0
relay/channel/task/vertex/adaptor.go

@@ -10,6 +10,7 @@ import (
 	"regexp"
 	"strings"
 
+	"github.com/QuantumNous/new-api/common"
 	"github.com/QuantumNous/new-api/model"
 
 	"github.com/gin-gonic/gin"
@@ -302,6 +303,29 @@ func (a *TaskAdaptor) ParseTaskResult(respBody []byte) (*relaycommon.TaskInfo, e
 	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
 // ============================

+ 17 - 12
relay/relay_task.go

@@ -351,7 +351,10 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
 				originTask.Progress = ti.Progress
 			}
 			if ti.Url != "" {
-				originTask.FailReason = ti.Url
+				if strings.HasPrefix(ti.Url, "data:") {
+				} else {
+					originTask.FailReason = ti.Url
+				}
 			}
 			_ = originTask.Update()
 			var raw map[string]any
@@ -379,18 +382,20 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d
 			case model.TaskStatusQueued, model.TaskStatusSubmitted:
 				status = "queued"
 			}
-			out := map[string]any{
-				"error":    nil,
-				"format":   format,
-				"metadata": nil,
-				"status":   status,
-				"task_id":  originTask.TaskID,
-				"url":      originTask.FailReason,
+			if !strings.HasPrefix(c.Request.RequestURI, "/v1/videos/") {
+				out := map[string]any{
+					"error":    nil,
+					"format":   format,
+					"metadata": nil,
+					"status":   status,
+					"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,
-			})
 		}
 	}()