Skip to content

Commit 685589f

Browse files
committed
chore: video generate sleep with max_wait_seconds
1 parent e0d560c commit 685589f

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed

veadk/tools/builtin_tools/video_generate.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
import json
16-
import time
16+
import asyncio
1717
import traceback
1818
from typing import Dict, cast
1919

@@ -125,7 +125,10 @@ async def generate(
125125

126126

127127
async def video_generate(
128-
params: list, tool_context: ToolContext, batch_size: int = 10
128+
params: list,
129+
tool_context: ToolContext,
130+
batch_size: int = 10,
131+
max_wait_seconds: int = 1200,
129132
) -> Dict:
130133
"""
131134
Generate videos in **batch** from text prompts, optionally guided by a first/last frame,
@@ -139,6 +142,10 @@ async def video_generate(
139142
A list of video generation requests. Each item supports the fields below.
140143
batch_size (int):
141144
The number of videos to generate in a batch. Defaults to 10.
145+
max_wait_seconds (int):
146+
Maximum time in seconds to wait for all video tasks in each batch.
147+
Default is 20 minutes (1200 seconds). When the timeout is reached,
148+
unfinished tasks will be marked as timeout errors.
142149
143150
Required per item:
144151
- video_name (str):
@@ -241,6 +248,7 @@ async def video_generate(
241248
"""
242249
success_list = []
243250
error_list = []
251+
timeout_tasks = []
244252
logger.debug(f"Using model: {getenv('MODEL_VIDEO_NAME', DEFAULT_VIDEO_MODEL_NAME)}")
245253
logger.debug(f"video_generate params: {params}")
246254

@@ -299,6 +307,10 @@ async def video_generate(
299307

300308
logger.debug("begin query video_generate task status...")
301309

310+
sleep_interval = 10
311+
max_sleep_times = max_wait_seconds // sleep_interval
312+
sleep_times = 0
313+
302314
while True:
303315
task_list = list(task_dict.keys())
304316
if len(task_list) == 0:
@@ -332,7 +344,23 @@ async def video_generate(
332344
logger.debug(
333345
f"{task_dict[task_id]} video_generate current status: {status}, Retrying after 10 seconds..."
334346
)
335-
time.sleep(10)
347+
if sleep_times >= max_sleep_times:
348+
logger.error(
349+
f"video_generate polling timed out after {max_wait_seconds} seconds; remaining tasks: {task_dict}"
350+
)
351+
for task_id, video_name in task_dict.items():
352+
timeout_tasks.append(
353+
{
354+
"task_id": task_id,
355+
"video_name": video_name,
356+
}
357+
)
358+
error_list.append(video_name)
359+
task_dict.clear()
360+
break
361+
362+
await asyncio.sleep(sleep_interval)
363+
sleep_times += 1
336364

337365
add_span_attributes(
338366
span,
@@ -353,6 +381,7 @@ async def video_generate(
353381
"status": "error",
354382
"success_list": success_list,
355383
"error_list": error_list,
384+
"timeout_tasks": timeout_tasks,
356385
}
357386
else:
358387
logger.debug(
@@ -362,6 +391,7 @@ async def video_generate(
362391
"status": "success",
363392
"success_list": success_list,
364393
"error_list": error_list,
394+
"timeout_tasks": timeout_tasks,
365395
}
366396

367397

0 commit comments

Comments
 (0)