style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m24s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m21s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 58s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m10s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m40s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m44s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 4m9s
AI Code Review / AI Code Review (pull_request) Successful in 6m44s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m32s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m33s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 7m27s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 31s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 45s

This commit is contained in:
CI Bot
2026-10-02 04:19:42 +00:00
parent 2810b2cf0e
commit a170f2bc7f
+15 -4
View File
@@ -281,7 +281,10 @@ def _analyze_single_image(
logger.warning(
"[爆款视频] 图片 #%d VLM(%s) 结果不可用 name=%r summary_len=%d,尝试 pro 降级",
idx, vision_model, first_result.get("name"), len(first_result.get("summary") or ""),
idx,
vision_model,
first_result.get("name"),
len(first_result.get("summary") or ""),
)
# 第二次:pro 降级重试
@@ -293,7 +296,9 @@ def _analyze_single_image(
return pro_result
logger.warning(
"[爆款视频] 图片 #%d pro 降级仍不可用 name=%r summary_len=%d",
idx, pro_result.get("name"), len(pro_result.get("summary") or ""),
idx,
pro_result.get("name"),
len(pro_result.get("summary") or ""),
)
return pro_result
@@ -332,11 +337,17 @@ def _step_image_analysis(job: ViralVideoJob) -> dict:
max_workers = min(4, max(1, len(job.images)))
logger.info(
"[爆款视频] 开始并行图片分析 n=%d model=%s pro_fallback=%s timeout=%d workers=%d",
len(job.images), vision_model, pro_model, vision_timeout, max_workers,
len(job.images),
vision_model,
pro_model,
vision_timeout,
max_workers,
)
with ThreadPoolExecutor(max_workers=max_workers) as pool:
future_to_idx = {
pool.submit(_analyze_single_image, idx, url, vision_model, vision_timeout, pro_fallback_model=pro_model): idx
pool.submit(
_analyze_single_image, idx, url, vision_model, vision_timeout, pro_fallback_model=pro_model
): idx
for idx, url in enumerate(job.images)
}
for fut in as_completed(future_to_idx):