Jelajahi Sumber

feat: add vidu use openai sdk

feitianbubu 4 bulan lalu
induk
melakukan
e08f799994
1 mengubah file dengan 35 tambahan dan 2 penghapusan
  1. 35 2
      relay/channel/task/vidu/adaptor.go

+ 35 - 2
relay/channel/task/vidu/adaptor.go

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"io"
 	"net/http"
+	"time"
 
 	"github.com/gin-gonic/gin"
 
@@ -135,7 +136,7 @@ func (a *TaskAdaptor) DoRequest(c *gin.Context, info *relaycommon.RelayInfo, req
 	return channel.DoTaskApiRequest(a, c, info, requestBody)
 }
 
-func (a *TaskAdaptor) DoResponse(c *gin.Context, resp *http.Response, _ *relaycommon.RelayInfo) (taskID string, taskData []byte, taskErr *dto.TaskError) {
+func (a *TaskAdaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycommon.RelayInfo) (taskID string, taskData []byte, taskErr *dto.TaskError) {
 	responseBody, err := io.ReadAll(resp.Body)
 	if err != nil {
 		taskErr = service.TaskErrorWrapper(err, "read_response_body_failed", http.StatusInternalServerError)
@@ -154,7 +155,12 @@ func (a *TaskAdaptor) DoResponse(c *gin.Context, resp *http.Response, _ *relayco
 		return
 	}
 
-	c.JSON(http.StatusOK, vResp)
+	ov := relaycommon.NewOpenAIVideo()
+	ov.ID = vResp.TaskId
+	ov.TaskID = vResp.TaskId
+	ov.CreatedAt = time.Now().Unix()
+	ov.Model = info.OriginModelName
+	c.JSON(http.StatusOK, ov)
 	return vResp.TaskId, responseBody, nil
 }
 
@@ -256,3 +262,30 @@ func (a *TaskAdaptor) ParseTaskResult(respBody []byte) (*relaycommon.TaskInfo, e
 
 	return taskInfo, nil
 }
+
+func (a *TaskAdaptor) ConvertToOpenAIVideo(originTask *model.Task) (*relaycommon.OpenAIVideo, error) {
+	var viduResp taskResultResponse
+	if err := json.Unmarshal(originTask.Data, &viduResp); err != nil {
+		return nil, errors.Wrap(err, "unmarshal vidu task data failed")
+	}
+
+	openAIVideo := relaycommon.NewOpenAIVideo()
+	openAIVideo.ID = originTask.TaskID
+	openAIVideo.Status = originTask.Status.ToVideoStatus()
+	openAIVideo.SetProgressStr(originTask.Progress)
+	openAIVideo.CreatedAt = originTask.CreatedAt
+	openAIVideo.CompletedAt = originTask.UpdatedAt
+
+	if len(viduResp.Creations) > 0 && viduResp.Creations[0].URL != "" {
+		openAIVideo.SetMetadata("url", viduResp.Creations[0].URL)
+	}
+
+	if viduResp.State == "failed" && viduResp.ErrCode != "" {
+		openAIVideo.Error = &relaycommon.OpenAIVideoError{
+			Message: viduResp.ErrCode,
+			Code:    viduResp.ErrCode,
+		}
+	}
+
+	return openAIVideo, nil
+}