浏览代码

feat: add jimeng use openai sdk

feitianbubu 2 月之前
父节点
当前提交
8a7033e5a3
共有 3 个文件被更改,包括 50 次插入14 次删除
  1. 31 1
      relay/channel/task/jimeng/adaptor.go
  2. 1 13
      relay/channel/task/kling/adaptor.go
  3. 18 0
      relay/common/relay_info.go

+ 31 - 1
relay/channel/task/jimeng/adaptor.go

@@ -158,7 +158,13 @@ func (a *TaskAdaptor) DoResponse(c *gin.Context, resp *http.Response, info *rela
 		return
 	}
 
-	c.JSON(http.StatusOK, gin.H{"task_id": jResp.Data.TaskID})
+	ov := relaycommon.NewOpenAIVideo()
+	ov.ID = jResp.Data.TaskID
+	ov.TaskID = jResp.Data.TaskID
+	ov.CreatedAt = time.Now().Unix()
+	ov.Model = info.OriginModelName
+	ov.Metadata = map[string]any{}
+	c.JSON(http.StatusOK, ov)
 	return jResp.Data.TaskID, responseBody, nil
 }
 
@@ -400,6 +406,30 @@ func (a *TaskAdaptor) ParseTaskResult(respBody []byte) (*relaycommon.TaskInfo, e
 	return &taskResult, nil
 }
 
+func (a *TaskAdaptor) ConvertToOpenAIVideo(originTask *model.Task) (*relaycommon.OpenAIVideo, error) {
+	var jimengResp responseTask
+	if err := json.Unmarshal(originTask.Data, &jimengResp); err != nil {
+		return nil, errors.Wrap(err, "unmarshal jimeng task data failed")
+	}
+
+	openAIVideo := relaycommon.NewOpenAIVideo()
+	openAIVideo.ID = originTask.TaskID
+	openAIVideo.Status = string(originTask.Status)
+	openAIVideo.SetProgressStr(originTask.Progress)
+	openAIVideo.SetMetadata("url", jimengResp.Data.VideoUrl)
+	openAIVideo.CreatedAt = originTask.CreatedAt
+	openAIVideo.CompletedAt = originTask.UpdatedAt
+
+	if jimengResp.Code != 10000 {
+		openAIVideo.Error = &relaycommon.OpenAIVideoError{
+			Message: jimengResp.Message,
+			Code:    fmt.Sprintf("%d", jimengResp.Code),
+		}
+	}
+
+	return openAIVideo, nil
+}
+
 func isNewAPIRelay(apiKey string) bool {
 	return strings.HasPrefix(apiKey, "sk-")
 }

+ 1 - 13
relay/channel/task/kling/adaptor.go

@@ -370,16 +370,6 @@ func (a *TaskAdaptor) ConvertToOpenAIVideo(originTask *model.Task) (*relaycommon
 	if err := json.Unmarshal(originTask.Data, &klingResp); err != nil {
 		return nil, errors.Wrap(err, "unmarshal kling task data failed")
 	}
-
-	convertProgress := func(progress string) int {
-		progress = strings.TrimSuffix(progress, "%")
-		p, err := strconv.Atoi(progress)
-		if err != nil {
-			logger.Warnf("convert progress failed, progress: %s, err: %v", progress, err)
-		}
-		return p
-	}
-
 	openAIVideo := &relaycommon.OpenAIVideo{
 		ID:     klingResp.Data.TaskId,
 		Object: "video",
@@ -388,10 +378,8 @@ func (a *TaskAdaptor) ConvertToOpenAIVideo(originTask *model.Task) (*relaycommon
 		CreatedAt:   klingResp.Data.CreatedAt,
 		CompletedAt: klingResp.Data.UpdatedAt,
 		Metadata:    make(map[string]any),
-		Progress:    convertProgress(originTask.Progress),
 	}
-
-	// 处理视频 URL
+	openAIVideo.SetProgressStr(originTask.Progress)
 	if len(klingResp.Data.TaskResult.Videos) > 0 {
 		video := klingResp.Data.TaskResult.Videos[0]
 		if video.Url != "" {

+ 18 - 0
relay/common/relay_info.go

@@ -3,6 +3,7 @@ package common
 import (
 	"errors"
 	"fmt"
+	"strconv"
 	"strings"
 	"time"
 
@@ -568,6 +569,23 @@ type OpenAIVideo struct {
 	Error              *OpenAIVideoError `json:"error,omitempty"`
 	Metadata           map[string]any    `json:"metadata,omitempty"`
 }
+
+func (m *OpenAIVideo) SetProgressStr(progress string) {
+	progress = strings.TrimSuffix(progress, "%")
+	m.Progress, _ = strconv.Atoi(progress)
+}
+func (m *OpenAIVideo) SetMetadata(k string, v any) {
+	if m.Metadata == nil {
+		m.Metadata = make(map[string]any)
+	}
+	m.Metadata[k] = v
+}
+func NewOpenAIVideo() *OpenAIVideo {
+	return &OpenAIVideo{
+		Object: "video",
+	}
+}
+
 type OpenAIVideoError struct {
 	Message string `json:"message"`
 	Code    string `json:"code"`