Files
my-v0-server/app/processor/nodes/scope_node.py
T
2026-10-01 09:52:43 -07:00

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