mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-07-06 20:47:57 +02:00
49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package workflow
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cloudwego/eino/compose"
|
|
)
|
|
|
|
// compileAgentSubgraph wraps an Agent canvas node as an Eino subgraph (AddGraphNode best practice).
|
|
func compileAgentSubgraph(_ context.Context, node graphNode) (compose.AnyGraph, error) {
|
|
n := node
|
|
prepareID := n.ID + "__agent_prepare"
|
|
executeID := n.ID + "__agent_execute"
|
|
finalizeID := n.ID + "__agent_finalize"
|
|
g := compose.NewGraph[WorkflowNodeOutput, WorkflowNodeOutput]()
|
|
_ = g.AddLambdaNode(prepareID, compose.InvokableLambda(func(_ context.Context, input WorkflowNodeOutput) (WorkflowNodeOutput, error) {
|
|
if input == nil {
|
|
input = WorkflowNodeOutput{}
|
|
}
|
|
input["agent_subgraph_stage"] = "prepare"
|
|
input["agent_node_id"] = n.ID
|
|
return input, nil
|
|
}))
|
|
_ = g.AddLambdaNode(executeID, compose.InvokableLambda(func(runCtx context.Context, _ WorkflowNodeOutput) (WorkflowNodeOutput, error) {
|
|
return runWorkflowNodeLambda(runCtx, n)
|
|
}))
|
|
_ = g.AddLambdaNode(finalizeID, compose.InvokableLambda(func(_ context.Context, output WorkflowNodeOutput) (WorkflowNodeOutput, error) {
|
|
if output == nil {
|
|
output = WorkflowNodeOutput{}
|
|
}
|
|
output["agent_subgraph_stage"] = "finalize"
|
|
output["agent_node_id"] = n.ID
|
|
return output, nil
|
|
}))
|
|
if err := g.AddEdge(compose.START, prepareID); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := g.AddEdge(prepareID, executeID); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := g.AddEdge(executeID, finalizeID); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := g.AddEdge(finalizeID, compose.END); err != nil {
|
|
return nil, err
|
|
}
|
|
return g, nil
|
|
}
|