test: 添加并发分流与合并逻辑测试
This commit is contained in:
1 parent
1c0296fa80
commit
2bbd2b7b04
3 files changed
+156
-6
No files matched your search
@@ -10,12 +10,23 @@ type NodeFn[S any] func(ctx context.Context, state S) (S, error)
|
||||
// 它根据当前状态 S,动态决定下一个要执行的节点名称(例如返回 "translator" 或 "reviewer"
|
||||
type RouterFn[S any] func(ctx context.Context, state S) (string, error)
|
||||
|
||||
// ParallelMergeFn 接收分流前的原始状态 parent,以及各个并发分支运行结束后的状态列表 branches,返回合并后的状态。
|
||||
type ParallelMergeFn[S any] func(ctx context.Context, parent S, branches []S) (S, error)
|
||||
|
||||
// parallelStep 内部结构,用于记录并发分支的配置
|
||||
type parallelStep[S any] struct {
|
||||
targets []string // 需要并发执行的目标节点列表
|
||||
next string // 合并后下一步要去的节点名称
|
||||
merger ParallelMergeFn[S] // 状态合并函数
|
||||
}
|
||||
|
||||
// Graph 是图的构建器,S 代表用户自定义的状态结构体。
|
||||
type Graph[S any] struct {
|
||||
nodes map[string]NodeFn[S] // 节点名称 -> 节点执行函数
|
||||
edges map[string]string // 普通单向边:源节点 -> 目标节点
|
||||
conditional map[string]RouterFn[S] // 条件路由边:源节点 -> 路由函数
|
||||
interrupts map[string]bool // 标记需要中断的节点:执行完该节点后挂起
|
||||
nodes map[string]NodeFn[S] // 节点名称 -> 节点执行函数
|
||||
edges map[string]string // 普通单向边:源节点 -> 目标节点
|
||||
conditional map[string]RouterFn[S] // 条件路由边:源节点 -> 路由函数
|
||||
interrupts map[string]bool // 标记需要中断的节点:执行完该节点后挂起
|
||||
parallels map[string]parallelStep[S] // 并发分支:源节点 -> 并发步骤配置
|
||||
}
|
||||
|
||||
// NewGraph 创建并初始化一个全新强类型的图构建器
|
||||
@@ -25,6 +36,7 @@ func NewGraph[S any]() *Graph[S] {
|
||||
edges: make(map[string]string),
|
||||
conditional: make(map[string]RouterFn[S]),
|
||||
interrupts: make(map[string]bool),
|
||||
parallels: make(map[string]parallelStep[S]), // 初始化 parallels
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,3 +60,16 @@ func (g *Graph[S]) AddConditionalEdges(from string, router RouterFn[S]) {
|
||||
func (g *Graph[S]) AddInterrupt(nodeName string) {
|
||||
g.interrupts[nodeName] = true
|
||||
}
|
||||
|
||||
// AddParallelEdges 建立并发分支。
|
||||
// from: 起始节点
|
||||
// targets: 需要并发执行的多个目标节点名称(如 "translate_en", "translate_fr")
|
||||
// next: 所有并发节点运行完并合并后,下一步要去的节点(如 "publisher")
|
||||
// merger: 用于合并各个并发分支状态的函数
|
||||
func (g *Graph[S]) AddParallelEdges(from string, targets []string, next string, merger ParallelMergeFn[S]) {
|
||||
g.parallels[from] = parallelStep[S]{
|
||||
targets: targets,
|
||||
next: next,
|
||||
merger: merger,
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user