fix: 片段去重从已有片段构建used_segments,实现跨任务去重
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m4s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m44s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m1s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m28s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m46s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m32s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m42s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m58s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m41s
AI Code Review / AI Code Review (pull_request) Successful in 7m37s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 6m54s
CI/CD Pipeline / CI Gate (pull_request) Successful in 28s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 2m32s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m18s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 480h6m56s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 480h6m58s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 480h7m0s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 480h7m23s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 480h7m25s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 480h11m15s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 480h11m17s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 480h11m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 480h18m41s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 480h19m30s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 480h18m57s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 480h21m55s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 480h21m59s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 480h41m24s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 480h53m27s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 480h55m56s

问题:create_clips_from_assets_editor 中 used_segments 每次调用初始化为空字典,
只跟踪当前API调用内创建的时间段,不避开之前任务已使用的时间段。

修复:在初始化 used_segments 后,遍历 existing_clips_list(已通过 list_clips 获取),
将已有片段的 asset_id/start_time/duration 填充到 used_segments,
使 _calc_random_start_time 能避开所有已使用的时间区间。

新增测试:TestCrossTaskSegmentDedup(4个用例),验证:
- 已有片段的时间段被正确纳入去重
- 多个已有片段都被收集
- 没有 asset_id 的片段被忽略
- 没有已有片段时行为不变
This commit is contained in:
xiaoxia
2026-08-27 14:58:03 +08:00
parent 24c862c741
commit 9d646e3de7
2 changed files with 125 additions and 0 deletions
@@ -386,7 +386,14 @@ def create_clips_from_assets_editor(
existing_clips_list = plan_svc.list_clips(plan_id)
next_order = max((c.order for c in existing_clips_list), default=-1) + 1
# 从已有片段中构建已使用时间段,避免跨任务重复使用同一段素材区域
used_segments: dict[str, list[tuple[float, float]]] = {}
for _clip in existing_clips_list:
if _clip.asset_id and _clip.start_time is not None and _clip.duration is not None:
used_segments.setdefault(_clip.asset_id, []).append(
(float(_clip.start_time), float(_clip.start_time) + float(_clip.duration))
)
clips = []
for i in range(required_count):