fix: 修复 AI Code Review 阻塞问题
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
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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 27s
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 / Validate - Migration (alembic) (pull_request) Successful in 57s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m5s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m25s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m58s
AI Code Review / AI Code Review (pull_request) Successful in 2m37s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m9s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m8s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m45s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m50s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (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

1. can_generate 自动修复中 assign_asset 加 try-except,避免单个失败导致整体崩溃
2. 移除 generation.py 冗余 DB 查询,诊断日志移入 can_generate 内部
3. 增加详细诊断日志:clips_with_asset 数量、config_asset_ids 数量
This commit is contained in:
SaaS Frontend Agent
2026-08-07 22:27:48 +08:00
parent aa49c5fd86
commit afc46a97cf
2 changed files with 26 additions and 18 deletions
@@ -74,22 +74,7 @@ def generate_editor_draft(
plan_svc, plan_id, plan_check, clips_without_asset, asset_library_repo, asset_repo
)
# ── 防御性诊断日志:fallback 链路结束后、can_generate 前 ──
_post_fallback_plan = plan_svc.get_plan_or_raise(plan_id)
_post_fallback_clips = plan_svc.list_clips(plan_id)
_post_fallback_asset_ids = (_post_fallback_plan.config or {}).get("asset_ids", [])
_post_fallback_clips_with_asset = sum(1 for c in _post_fallback_clips if c.asset_id)
logger.info(
"模板编辑器 fallback 链路完成: plan=%s status=%s "
"total_clips=%d clips_with_asset=%d config_asset_ids_count=%d",
plan_id,
_post_fallback_plan.status,
len(_post_fallback_clips),
_post_fallback_clips_with_asset,
len(_post_fallback_asset_ids),
)
# 检查是否可生成(含最后防线自动修复)
# 检查是否可生成(含最后防线自动修复 + 诊断日志)
try:
can_gen, reason = plan_svc.can_generate(plan_id)
except ValueError as exc:
+25 -2
View File
@@ -591,6 +591,17 @@ class EditPlanService:
# 检查是否至少有一个片段分配了素材
has_asset = any(c.asset_id for c in clips)
config_asset_ids_count = len((plan.config or {}).get("asset_ids", []))
clips_with_asset_count = sum(1 for c in clips if c.asset_id)
logger.info(
"can_generate 诊断: plan=%s status=%s total_clips=%d "
"clips_with_asset=%d config_asset_ids_count=%d",
plan_id,
plan.status,
len(clips),
clips_with_asset_count,
config_asset_ids_count,
)
if not has_asset:
# ── 最后防线:自动从 config.asset_ids 分配素材 ──
config_asset_ids = (plan.config or {}).get("asset_ids", [])
@@ -602,12 +613,24 @@ class EditPlanService:
len(config_asset_ids),
)
clips_without_asset = [c for c in clips if not c.asset_id]
assigned_count = 0
for i, clip in enumerate(clips_without_asset):
asset_idx = i % len(config_asset_ids)
self.assign_asset(clip.id, config_asset_ids[asset_idx])
try:
self.assign_asset(clip.id, config_asset_ids[asset_idx])
assigned_count += 1
except Exception as exc:
logger.warning(
"can_generate 最后防线: plan=%s clip=%s 分配素材 %s 失败: %s",
plan_id,
clip.id,
config_asset_ids[asset_idx],
exc,
)
logger.info(
"can_generate 最后防线: plan=%s 已为 %d 个片段分配素材",
"can_generate 最后防线: plan=%s 已为 %d/%d 个片段分配素材",
plan_id,
assigned_count,
len(clips_without_asset),
)
# 重新加载 clips 验证分配结果