From 293da6674b959050965d2a416aabb74a4f8d5a30 Mon Sep 17 00:00:00 2001 From: jr Date: Wed, 5 Nov 2025 10:48:55 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:sora=20api=E8=B0=83=E7=94=A8=E8=AE=A1?= =?UTF-8?q?=E8=B4=B9=E8=AE=A1=E7=AE=97seconds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/relay_task.go | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/relay/relay_task.go b/relay/relay_task.go index 61e2af5230a1..3d0f38d9b3e1 100644 --- a/relay/relay_task.go +++ b/relay/relay_task.go @@ -74,14 +74,19 @@ func RelayTaskSubmit(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto. } // FIXME: 临时修补,支持任务仅按次计费 if !common.StringsContains(constant.TaskPricePatches, modelName) { + // seconds 参数不作为倍率相乘,只有 size 等参数才作为倍率 if len(info.PriceData.OtherRatios) > 0 { - for _, ra := range info.PriceData.OtherRatios { + for key, ra := range info.PriceData.OtherRatios { + if key == "seconds" { + continue + } if 1.0 != ra { ratio *= ra } } } } + println(fmt.Sprintf("model: %s, model_price: %.4f, group: %s, group_ratio: %.4f, final_ratio: %.4f", modelName, modelPrice, info.UsingGroup, groupRatio, ratio)) userQuota, err := model.GetUserQuota(info.UserId, false) if err != nil { @@ -163,6 +168,10 @@ func RelayTaskSubmit(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto. if len(info.PriceData.OtherRatios) > 0 { var contents []string for key, ra := range info.PriceData.OtherRatios { + // seconds 参数不参与计费倍率计算,不在日志中显示 + if key == "seconds" { + continue + } if 1.0 != ra { contents = append(contents, fmt.Sprintf("%s: %.2f", key, ra)) } @@ -319,7 +328,7 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d if err2 != nil { return } - if channelModel.Type != constant.ChannelTypeVertexAi && channelModel.Type != constant.ChannelTypeGemini { + if channelModel.Type != constant.ChannelTypeVertexAi { return } baseURL := constant.ChannelBaseURLs[channelModel.Type] @@ -351,10 +360,7 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d originTask.Progress = ti.Progress } if ti.Url != "" { - if strings.HasPrefix(ti.Url, "data:") { - } else { - originTask.FailReason = ti.Url - } + originTask.FailReason = ti.Url } _ = originTask.Update() var raw map[string]any @@ -382,20 +388,18 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d case model.TaskStatusQueued, model.TaskStatusSubmitted: status = "queued" } - 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, - }) + 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, + }) } }() From 955c7f38b4f086b977ed4c64e59512eff1bca5ea Mon Sep 17 00:00:00 2001 From: jr Date: Wed, 5 Nov 2025 11:06:36 +0800 Subject: [PATCH 2/2] fix --- relay/relay_task.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/relay/relay_task.go b/relay/relay_task.go index 3d0f38d9b3e1..417d9aac2287 100644 --- a/relay/relay_task.go +++ b/relay/relay_task.go @@ -328,7 +328,7 @@ func videoFetchByIDRespBodyBuilder(c *gin.Context) (respBody []byte, taskResp *d if err2 != nil { return } - if channelModel.Type != constant.ChannelTypeVertexAi { + if channelModel.Type != constant.ChannelTypeVertexAi && channelModel.Type != constant.ChannelTypeGemini { return } baseURL := constant.ChannelBaseURLs[channelModel.Type] @@ -360,7 +360,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 @@ -388,18 +391,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, - }) } }()