feat(orchestrator): Step 1 必选,多步骤并行执行,Step 8 延后
目标
- Step 1(数据字典)为强制步骤,前后端都防御性兜底
- 其余 Step 按依赖图分波并行执行(Wave 调度)
- Step 8 报告生成显式排在所有主步骤之后
调度器(orchestrator.py)
- STEP_REGISTRY 6 元组化,新增 required 字段
- 新增 STEP_DEPENDENCIES 依赖图:
Wave 1: Step 1(+Step 4 可并行,因为无前置依赖)
Wave 2: Step 2 / 4 / 5 / 6 / 7 并发(只需 Step 1)
Wave 3: Step 3(需 Step 1 + Step 2)
Wave 4: Step 8 报告,在主调度结束后单独跑
- while + asyncio.gather 实现 wave 调度
- 必选步骤缺失时自动追加并打 WARN 日志
- 关键 Step 失败:整流程终止;非关键:标记 failed,
其余步骤继续(基于依赖的 wave 仍正常推进)
- _run_step4 改为接收 step_outputs["1_data_dict"],
避免在 Wave 1 与 Step 1 重复连库拉元数据
step4_empty_fields.py
- run_step4 新增 dict_data 参数;复用 Step 1 数据,
缺省时回退到自取(支持独立跑 Step 4)
前后端契约
- models.StepInfo 加 required: bool
- routes.py /api/steps 给 Step 1 标 required=True
- index.html:el-checkbox :disabled="s.required"
+ 必选 step 标题旁红色 "必选" 标签
- startJob 启动前再兜底检查一次 form.steps 是否包含所有必选
perf
- 全部 8 步情形下,从串行 ~55s 降至 ~30s 级别
(Wave 2 同时跑 5 个, 加上 LLM 同时批分类 vs 串行等待)
Showing
Please register or sign in to comment