diff --git a/relay/channel/task/vidu/adaptor.go b/relay/channel/task/vidu/adaptor.go index 019352c61..6a961c7d5 100644 --- a/relay/channel/task/vidu/adaptor.go +++ b/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 +}