Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
4b61c54c
authored
Mar 02, 2026
by
CaIon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: handle rate limits and improve error response parsing in video task updates
parent
8ae96be3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
23 additions
and
3 deletions
+23
-3
service/task_polling.go
+23
-3
No files found.
service/task_polling.go
View file @
4b61c54c
...
...
@@ -335,6 +335,8 @@ func updateVideoTasks(ctx context.Context, platform constant.TaskPlatform, chann
if
err
:=
updateVideoSingleTask
(
ctx
,
adaptor
,
cacheGetChannel
,
taskId
,
taskM
);
err
!=
nil
{
logger
.
LogError
(
ctx
,
fmt
.
Sprintf
(
"Failed to update video task %s: %s"
,
taskId
,
err
.
Error
()))
}
// sleep 1 second between each task to avoid hitting rate limits of upstream platforms
time
.
Sleep
(
1
*
time
.
Second
)
}
return
nil
}
...
...
@@ -388,15 +390,33 @@ func updateVideoSingleTask(ctx context.Context, adaptor TaskPollingAdaptor, ch *
task
.
Data
=
t
.
Data
}
else
if
taskResult
,
err
=
adaptor
.
ParseTaskResult
(
responseBody
);
err
!=
nil
{
return
fmt
.
Errorf
(
"parseTaskResult failed for task %s: %w"
,
taskId
,
err
)
}
else
{
task
.
Data
=
redactVideoResponseBody
(
responseBody
)
}
task
.
Data
=
redactVideoResponseBody
(
responseBody
)
logger
.
LogDebug
(
ctx
,
fmt
.
Sprintf
(
"updateVideoSingleTask taskResult: %+v"
,
taskResult
))
now
:=
time
.
Now
()
.
Unix
()
if
taskResult
.
Status
==
""
{
taskResult
=
relaycommon
.
FailTaskInfo
(
"upstream returned empty status"
)
//taskResult = relaycommon.FailTaskInfo("upstream returned empty status")
errorResult
:=
&
dto
.
GeneralErrorResponse
{}
if
err
=
common
.
Unmarshal
(
responseBody
,
&
errorResult
);
err
==
nil
{
openaiError
:=
errorResult
.
TryToOpenAIError
()
if
openaiError
!=
nil
{
// 返回规范的 OpenAI 错误格式,提取错误信息,判断错误是否为任务失败
if
openaiError
.
Code
==
"429"
{
// 429 错误通常表示请求过多或速率限制,暂时不认为是任务失败,保持原状态等待下一轮轮询
return
nil
}
// 其他错误认为是任务失败,记录错误信息并更新任务状态
taskResult
=
relaycommon
.
FailTaskInfo
(
"upstream returned error"
)
}
else
{
// unknown error format, log original response
logger
.
LogError
(
ctx
,
fmt
.
Sprintf
(
"Task %s returned empty status with unrecognized error format, response: %s"
,
taskId
,
string
(
responseBody
)))
taskResult
=
relaycommon
.
FailTaskInfo
(
"upstream returned unrecognized message"
)
}
}
}
shouldRefund
:=
false
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment