From 8a7033e5a3e4cc8cbf1861a3ef201524dab4c781 Mon Sep 17 00:00:00 2001 From: feitianbubu Date: Sat, 11 Oct 2025 13:52:37 +0800 Subject: [PATCH] feat: add jimeng use openai sdk --- relay/channel/task/jimeng/adaptor.go | 32 +++++++++++++++++++++++++++- relay/channel/task/kling/adaptor.go | 14 +----------- relay/common/relay_info.go | 18 ++++++++++++++++ 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/relay/channel/task/jimeng/adaptor.go b/relay/channel/task/jimeng/adaptor.go index 6c94a4d29..101c3ba51 100644 --- a/relay/channel/task/jimeng/adaptor.go +++ b/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-") } diff --git a/relay/channel/task/kling/adaptor.go b/relay/channel/task/kling/adaptor.go index c89f8f2e4..d61333b9b 100644 --- a/relay/channel/task/kling/adaptor.go +++ b/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 != "" { diff --git a/relay/common/relay_info.go b/relay/common/relay_info.go index 35df62f80..949b45535 100644 --- a/relay/common/relay_info.go +++ b/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"`