28 lines
1.3 KiB
Python
28 lines
1.3 KiB
Python
"""按需求变更推导修改范围和是否需要规划,不调用模型"""
|
|
|
|
from app.processor.base import BaseNode
|
|
from app.processor.nodes.action_node import action_block_reason
|
|
from app.processor.state import QueryState
|
|
from app.schemas.change_scope import ChangeScope
|
|
|
|
|
|
class ScopeNode(BaseNode):
|
|
name = "scope_node"
|
|
|
|
def process(self, state: QueryState) -> QueryState:
|
|
# 浅拷贝状态
|
|
updated_state: QueryState = state.copy()
|
|
# 需求节点已校验目标 ID 并落地唯一候选,范围直接由变更推导
|
|
scope = ChangeScope.from_requirement(state["requirement"])
|
|
|
|
# 保存范围,下面的动作能力检查也需要读取该结果
|
|
updated_state["change_scope"] = scope
|
|
# 需要规划时先交给后续规划流程,不在此处判断能否直接生成动作
|
|
# 无需规划时检查操作能力,无法执行则记录阻塞原因,通过则返回 None
|
|
reason = None if scope.needs_planning else action_block_reason(updated_state)
|
|
# 写入本次检查结果,没有阻塞原因时同时清空旧的失败说明
|
|
updated_state["failure_reason"] = reason
|
|
# 有阻塞原因时标记失败,否则保持运行状态,继续后续处理
|
|
updated_state["status"] = "failed" if reason else "running"
|
|
return updated_state
|