35 lines
1.6 KiB
Python
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
|