Files
my-v0-server/app/processor/nodes/component_resource_node.py
T
2026-10-01 07:32:02 -07:00

35 lines
1.6 KiB
Python

"""为规划提供前端实际支持的物料目录"""
from app.processor.base import BaseNode
from app.processor.state import QueryState
from app.resources.component import ComponentProvider
from app.schemas.component_resource import ComponentQuery
class ComponentResourceNode(BaseNode):
name = "component_resource_node"
def process(self, state: QueryState) -> QueryState:
# 浅拷贝状态
updated_state: QueryState = state.copy()
# 空查询不设置筛选条件,由提供器读取默认组件目录并返回查询结果
result = ComponentProvider().query(ComponentQuery())
# 保存组件定义、目录版本和查询状态,供后续规划和动作生成使用
updated_state["component_resources"] = result
# 清空旧规划,后续需要根据本次查询到的组件能力重新规划
updated_state["screen_plan"] = None
# 如果目录未配置或没有查到组件,标记失败,避免基于未知组件能力继续规划
if result.status != "resolved":
updated_state["status"] = "failed"
# 沿用查询结果中的说明,保留无法获取组件的具体原因
updated_state["failure_reason"] = result.message
else:
# 如果已获取组件定义,保持运行状态,让后续节点继续规划
updated_state["status"] = "running"
# 清空旧的失败原因,避免成功查询后仍携带上一轮错误
updated_state["failure_reason"] = None
# 返回资源查询结果和处理状态,由图决定继续规划还是进入失败处理
return updated_state