fix(dedup): check_duplicate支持exclude_video_id,修复recompute自匹配duplicate_of指向自己 (Issue #1702连带修复)
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m3s
AI Code Review / AI Code Review (pull_request) Successful in 3m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m17s
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 2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m16s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m19s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m8s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 4m19s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 270h1m6s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 270h1m11s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 269h56m40s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 269h56m40s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 269h56m45s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 269h56m45s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 270h0m53s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 270h0m56s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 270h1m1s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 270h1m5s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 270h0m53s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 270h35m23s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 270h35m31s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 270h35m35s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 270h35m36s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 270h31m15s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 270h35m31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m3s
AI Code Review / AI Code Review (pull_request) Successful in 3m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m17s
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 2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m16s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m19s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m8s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 4m19s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 270h1m6s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 270h1m11s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 269h56m40s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 269h56m40s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 269h56m45s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 269h56m45s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 270h0m53s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 270h0m56s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 270h1m1s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 270h1m5s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 270h0m53s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 270h1m6s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 270h35m23s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 270h35m31s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 270h35m35s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 270h35m36s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 270h31m15s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 270h35m31s
recompute-dedup重算时视频记录已在库中(正常生成流程新视频未落库所以没暴露), check_duplicate候选列表包含自身,自匹配汉明距离0融合分最高,导致 is_duplicate=true但duplicate_of指向视频自己。 check_batch_duplicate/compute_duplicate_rate本就有排除自身逻辑, 给check_duplicate补exclude_video_id参数,recompute任务与helpers均传入。 补回归单测。
This commit is contained in:
committed by
xiaoxia
parent
7a4aa27f71
commit
05f832a2eb
@@ -782,6 +782,7 @@ class VideoDeduplicator:
|
||||
scope: str = "project",
|
||||
user_id: str = "",
|
||||
duration_sec: float = 0,
|
||||
exclude_video_id: str | None = None,
|
||||
) -> Optional[dict]:
|
||||
"""检查视频是否与已有视频重复。
|
||||
|
||||
@@ -798,6 +799,9 @@ class VideoDeduplicator:
|
||||
scope: "project" 项目内查重(默认),"user" 跨项目全局查重
|
||||
user_id: 用户 ID(scope="user" 时使用)
|
||||
duration_sec: 视频时长(秒),用于时长预过滤 ±15%
|
||||
exclude_video_id: 排除的视频 ID(查重自身时用)。recompute-dedup
|
||||
重算时视频记录已存在,不排除会自匹配(距离 0 分最高)导致
|
||||
duplicate_of 指向自己(Issue #1702 连带修复)。
|
||||
|
||||
Returns:
|
||||
重复信息字典(含 duplicate, duplicate_of, reason, similarity, duplicate_segments),
|
||||
@@ -815,6 +819,9 @@ class VideoDeduplicator:
|
||||
best_result: Optional[dict] = None
|
||||
|
||||
for existing in existing_videos:
|
||||
# 排除自身(recompute 时当前视频已在候选列表里,否则自匹配距离 0 必最高分)
|
||||
if exclude_video_id and existing.id == exclude_video_id:
|
||||
continue
|
||||
if not existing.video_fingerprint:
|
||||
continue
|
||||
|
||||
@@ -1240,6 +1247,7 @@ def check_duplicate_task(self: Task, generated_video_id: str) -> dict:
|
||||
# Issue #1702: fingerprint.duration 单位已经是秒,旧代码 /1000 导致
|
||||
# ±15% 时长预过滤窗口缩到 ~0.013s,scope=user 的跨项目查重永远返回 None。
|
||||
duration_sec=fingerprint.duration if fingerprint.duration else 0,
|
||||
exclude_video_id=generated_video_id,
|
||||
)
|
||||
|
||||
video.video_fingerprint = fingerprint.to_dict()
|
||||
|
||||
Reference in New Issue
Block a user