fix: MediaKit 视频理解轮询限时至30s,修复 nginx 504 超时
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m22s
AI Code Review / AI Code Review (pull_request) Successful in 1m40s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m38s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 28s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 35s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m51s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m52s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m44s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m15s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 6m54s
CI/CD Pipeline / CI Gate (pull_request) Failing after 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 41s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 47s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1058h24m21s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1058h24m23s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 1058h24m22s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1058h24m22s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 1058h31m18s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1058h31m18s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1058h31m38s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1058h31m40s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1058h31m42s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1058h31m42s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1058h57m38s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1059h4m32s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1059h4m53s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1059h4m56s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1058h57m37s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1059h4m52s

- analyze_videos() 轮询参数从默认(3s*60=180s)改为(2s*15=30s)
- 预留30s给 LLM 调用,总耗时控制在 nginx 60s 限制内
- 超时自动降级到无分析模式,不影响主流程
- 修复 URL→asset_id 映射改用并行列表,消除重复 URL 覆盖风险
This commit is contained in:
xiaoxia
2026-08-03 12:40:03 +08:00
parent 598e2b6fb7
commit 8ea16aae74
@@ -48,9 +48,9 @@ def _build_asset_analyses(
asset_repo = SQLAlchemyAssetRepository(db)
storage_svc = get_shared_storage_service()
# 查找素材并获取下载 URL
# 查找素材并获取下载 URL(使用并行列表保持索引对应,避免 URL 重复导致映射覆盖)
video_urls: list[str] = []
url_to_asset_id: dict[str, str] = {}
valid_asset_ids: list[str] = []
for aid in asset_ids[:10]: # MediaKit 单次最多 10 个视频
asset = asset_repo.get(aid)
@@ -64,7 +64,7 @@ def _build_asset_analyses(
url = storage_svc.get_download_url(asset.storage_key)
if url:
video_urls.append(url)
url_to_asset_id[url] = aid
valid_asset_ids.append(aid)
except Exception as e:
logger.warning("获取素材URL失败: asset_id=%s error=%s", aid, str(e))
@@ -79,23 +79,26 @@ def _build_asset_analyses(
"控制在100字以内。"
)
# 限制轮询参数以适配 API 网关超时(nginx 60s)
# 视频理解最多 30s(poll_interval=2s * max_poll_attempts=15)
# 剩余 30s 留给 LLM 调用
contents = client.analyze_videos(
video_urls=video_urls,
prompt=prompt,
level="Economy",
poll_interval=2.0,
max_poll_attempts=15,
)
if not contents:
logger.warning("MediaKit 视频理解未返回结果")
return {}
# 将结果映射回 asset_id
# 将结果映射回 asset_id(通过索引对应)
analyses: dict[str, str] = {}
for i, content in enumerate(contents):
if i < len(video_urls) and content:
asset_id = url_to_asset_id.get(video_urls[i])
if asset_id:
analyses[asset_id] = content
if i < len(valid_asset_ids) and content:
analyses[valid_asset_ids[i]] = content
logger.info(
"MediaKit 视频理解完成: total=%d analyzed=%d",