plaita.core.flow¶
流程模型定义与解析入口。包含 Flow、parse()、parse_and_run()。
flow
¶
plaita.core.flow — Flow model definition and entry-point helpers.
Contains the canonical Flow class, parse(), and parse_and_run().
Flow
¶
Bases: BaseModel
流程定义
flow_id is the canonical identifier. The legacy id accessor
still works but emits a DeprecationWarning.
start_node
property
¶
流程入口节点。
2026-07 行为变更: 入度 0 "启发式推断" 已删除——历史上无显式 Start 时
本属性会扫描 nodes 数组找"未被任何 next/branch 引用的节点"作为入口,
但当存在多个孤儿节点时返回结果依赖数组顺序, 让可视化编排工具导出
顺序的细微差异就能改变流程行为。现在统一要求显式 Start 节点:
没有 Start 就抛 FlowStartMissingError, 让问题在解析期暴露。
input_property
property
¶
历史别名(第 3/4 个名字):等价 input_type。勿在新代码使用——
同一概念现有 inputType(JSON)/ input_type(Python 字段)两个规范名。
parse_flow
classmethod
¶
Parse flow definition and handle field name compatibility.
源代码位于: plaita/core/flow.py
model_validate
classmethod
¶
Parse + validate a Flow, then resolve node dicts into Node 子类。
默认用 get_default_registry() 解析节点,保持常规用法开箱即用;传
registry= 可注入自定义注册表,避免隐式依赖进程级单例。
源代码位于: plaita/core/flow.py
model_validate_json
classmethod
¶
JSON 解析 + 校验 + 节点解析(见 model_validate 说明)。
源代码位于: plaita/core/flow.py
resolve_nodes
¶
把 self.nodes 里 dict 形态的节点解析成对应 Node 子类实例。
幂等:已经是 Node 实例的节点原样保留,重复调用安全。这是节点解析
的显式入口——不再藏在 Pydantic validator 里,调用方可随时用自定义
registry 重新解析。model_validate / model_validate_json /
from_string / from_file / parse 默认会用
get_default_registry() 自动调一次。
源代码位于: plaita/core/flow.py
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | |
validate_nodes
¶
对已解析的节点跑构建期 node.validate()(warning 降级,不阻断)。
128:resolve_nodes() 是唯一执行该校验的地方,而**直接构造 Flow(...)¶
从不调用它(只有 model_validate / model_validate_json 会显式调一次)。
于是"传 Node 实例"这条主路径(builder / @flow 前端 / 大量既有测试)
坏配置连 warning 都没有**,比传 dict 那条路更哑——与 resolve_nodes
注释里声称要修的"一条路响一条路哑"恰好同构。
抽出本方法,使两条构造路径可以共用同一实现(见 _validate_node_instances)。
源代码位于: plaita/core/flow.py
from_string
classmethod
¶
从 JSON 或 YAML 字符串解析 Flow。
JSON 走 model_validate_json;YAML(及无法按 JSON 解析的内容)
走 plaita.io_format.loads 再 model_validate。
JSON 解析失败时把原始异常作为 cause 保留,避免真正的报错被
YAML fallback 的次级报错淹没。
registry= 可注入自定义 NodeRegistry 解析节点(与
model_validate/resolve_nodes 对齐);不传时用
get_default_registry()。
源代码位于: plaita/core/flow.py
from_file
classmethod
¶
从文件加载 Flow,按后缀(.json/.yaml/.yml)选择解析器。
registry= 语义同 :meth:from_string。
源代码位于: plaita/core/flow.py
rebuild_node_index
¶
is_end_node
¶
True if node is an End node. Lives on Flow so callers (strategies,
helpers) need not import plaita.node.End and re-trigger the
core → node circular import.
源代码位于: plaita/core/flow.py
run
¶
同步执行。输入走 run({...})(单个 dict/scalar)或 run(key=value, ...)。
契约:每个关键字都成为 $INPUT 的一个字段(README 的
flow.run(name="kongjie")),包括在兄弟入口里是执行控制的
mode/params/timeout 等名字——它们在这里不被拒绝。
只有 :data:_RESERVED_RUN_KEYWORDS(历史输入包装别名
inputs_data/input_data,以及 run_compatible 的形参
lazy)按名拒绝:它们到不了调用方以为的位置,静默接受只会
变成"看起来正常"的错误结果(plaita#137)。要传同名输入字段,
用 dict 形式:flow.run({"inputs_data": ...})。
源代码位于: plaita/core/flow.py
arun
async
¶
异步 :meth:run;输入与保留关键字契约同 :meth:run。
debug
¶
generator 模式的 :meth:run;输入与保留关键字契约同 :meth:run。
parse
¶
parse(content: Union[str, dict]) -> Optional[Flow]
Parse flow definition from JSON/YAML string or dict.
字符串内容自动识别 JSON 或 YAML(YAML 需安装 plaita[yaml]);
dict 直接走模型校验。所有解析最终都经过 Flow.parse_flow 这个
model_validator,行为与历史完全一致。
与 Flow.from_string 的空输入约定不同:本函数对空内容返回 None
(历史契约,签名即 Optional[Flow]),而 from_string("") 抛
ValueError。
源代码位于: plaita/core/flow.py
parse_and_run
¶
Parse and execute a flow definition.
支持 JSON 与 YAML 两种文本格式。