fix(#1743): smart-match排序注入随机噪声 + 素材使用次数按成片实际片段计数回写
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 34s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 34s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1m25s
AI Code Review / AI Code Review (pull_request) Successful in 1m32s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m38s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 1m59s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m17s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m48s
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 235h35m40s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 235h35m43s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 235h35m44s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 235h35m40s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 235h35m44s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 235h35m40s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 235h35m45s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 235h35m45s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 235h35m46s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 235h35m46s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 235h35m50s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 236h10m20s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 236h10m21s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 236h10m22s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 34s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 34s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1m25s
AI Code Review / AI Code Review (pull_request) Successful in 1m32s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m38s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 1m59s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m17s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m48s
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 235h35m40s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 235h35m43s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 235h35m44s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 235h35m40s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 235h35m44s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 235h35m40s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 235h35m45s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 235h35m45s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 235h35m46s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 235h35m46s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 235h35m50s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 236h10m20s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 236h10m21s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 236h10m22s
1. smart-match 排序零随机修复(主因):
- smart_select_assets 排序/多样性分桶注入 0~SCORE_RANDOM_NOISE_MAX 随机噪声,
同分/近分素材每次选出不同组合与顺序;分差>20的高质量素材保持稳定优先级
- 噪声以 asset.id 为 key 同次调用内一致;r.score 始终为无噪声原始分
- 支持 rng 注入(测试可复现);smart-match API/正式生成/模板编辑器三调用点全受益
2. 素材使用次数口径修复:
- mark_asset_used_for_generation 新增 times 参数,按成片实际渲染片段引用次数累加
- worker 回写从 task.asset_ids(请求列表,含未被plan选用的素材)改为
统计最终成片 plan 的 edit_plan_clips(同素材多片段复用按片段数累加)
- 抽 _count_plan_clip_asset_usage/_record_rendered_asset_usage 纯函数(可单测)
- plan 无有效片段时兜底 task.asset_ids 单次计数;单素材失败不阻断其他
3. 测试:22 新测试(噪声 10 + 回写计数 12);旧确定性排序断言注入零噪声 rng;
修复 test_distribute_assets 预存在 flaky(shuffle 未被零噪声 patch 覆盖)
This commit is contained in:
@@ -123,6 +123,7 @@ def _select_assets_from_library(
|
||||
assets: list,
|
||||
mode: str,
|
||||
count: int,
|
||||
rng=None,
|
||||
) -> list[str]:
|
||||
"""根据选取模式从素材库中选取 ready 状态的视频素材 ID。
|
||||
|
||||
@@ -130,6 +131,8 @@ def _select_assets_from_library(
|
||||
assets: 素材库中所有素材(Asset 实体列表)
|
||||
mode: 选取模式 — all=全部, smart=智能匹配(多维度评分+多样性)
|
||||
count: 选取数量,0 表示全部(仅 smart 模式有效)
|
||||
rng: 可选随机源(smart 模式排序噪声用),生产环境不传则内部随机;
|
||||
测试可注入固定种子或零噪声随机源获得确定性结果。
|
||||
|
||||
Returns:
|
||||
选中的素材 ID 列表
|
||||
@@ -142,8 +145,9 @@ def _select_assets_from_library(
|
||||
if mode == "smart":
|
||||
# 智能匹配:统一使用 packages/domain/smart_match.py 的多维评分+多样性选取
|
||||
# 评分维度:质量分(40%) + 时长适配(30%) + 新鲜度(20%) + 未使用加分(10%)
|
||||
# 排序注入随机噪声(#1743):同分素材每次选出不同组合,从素材组合层面降重
|
||||
limit = count if count > 0 else None
|
||||
results = smart_select_assets(ready_video_assets, limit=limit, kind="video")
|
||||
results = smart_select_assets(ready_video_assets, limit=limit, kind="video", rng=rng)
|
||||
return [r.asset.id for r in results]
|
||||
|
||||
# 默认 all 模式:返回全部 ready 视频素材
|
||||
|
||||
Reference in New Issue
Block a user