diff --git a/langgraph-go/advancedgraph/rust_engine.go b/langgraph-go/advancedgraph/rust_engine.go index 13cf73560..01607235e 100644 --- a/langgraph-go/advancedgraph/rust_engine.go +++ b/langgraph-go/advancedgraph/rust_engine.go @@ -57,7 +57,7 @@ func goNodeCallback(userData C.ulong, node *C.char, argJSON *C.char, stateJSON * sends := make([]map[string]any, 0, len(cmd.Goto)) for _, send := range cmd.Goto { sends = append(sends, map[string]any{ - "node": send.Node, + "node": NodeName(send.Node), "arg": send.NodeInput, }) } diff --git a/langgraph-go/advancedgraph/types.go b/langgraph-go/advancedgraph/types.go index bcfc694bd..4ef8fba3d 100644 --- a/langgraph-go/advancedgraph/types.go +++ b/langgraph-go/advancedgraph/types.go @@ -54,7 +54,7 @@ type WaitEvent struct { } type Send struct { - Node string + Node NodeFunc NodeInput any } diff --git a/langgraph-go/tests/sub_agents_test.go b/langgraph-go/tests/sub_agents_test.go index 6696a6622..90635fc45 100644 --- a/langgraph-go/tests/sub_agents_test.go +++ b/langgraph-go/tests/sub_agents_test.go @@ -31,7 +31,7 @@ func (m *mockLLM) invoke() []decision { type lunchWorkflow struct { planner *mockLLM - names map[string]string + names map[string]ag.NodeFunc } func outputSlice(state map[string]any) []string { @@ -151,7 +151,7 @@ func TestSubAgentsEquivalentFlow(t *testing.T) { } workflow := &lunchWorkflow{ planner: planner, - names: make(map[string]string), + names: make(map[string]ag.NodeFunc), } graph := ag.NewAdvancedStateGraph() @@ -159,11 +159,16 @@ func TestSubAgentsEquivalentFlow(t *testing.T) { graph.AddAsyncChannel("subagent_completion_channel") graph.AddAsyncChannel("user_input_channel") - workflow.names["llm"] = graph.AddNode(workflow.llmNode) - workflow.names["wait"] = graph.AddNode(workflow.waitNode) - workflow.names["tool"] = graph.AddNode(workflow.toolNode) - workflow.names["sub"] = graph.AddNode(workflow.subAgentNode) - workflow.names["order"] = graph.AddNode(workflow.orderFoodNode) + graph.AddNode(workflow.llmNode) + graph.AddNode(workflow.waitNode) + graph.AddNode(workflow.toolNode) + graph.AddNode(workflow.subAgentNode) + graph.AddNode(workflow.orderFoodNode) + workflow.names["llm"] = workflow.llmNode + workflow.names["wait"] = workflow.waitNode + workflow.names["tool"] = workflow.toolNode + workflow.names["sub"] = workflow.subAgentNode + workflow.names["order"] = workflow.orderFoodNode graph.SetEntryNode(workflow.llmNode) graph.SetFinishNode(workflow.orderFoodNode) diff --git a/langgraph-go/tests/test_primitives_test.go b/langgraph-go/tests/test_primitives_test.go index 967e168a1..3f8c0e3f3 100644 --- a/langgraph-go/tests/test_primitives_test.go +++ b/langgraph-go/tests/test_primitives_test.go @@ -7,7 +7,6 @@ import ( ) type primitiveWorkflow struct { - names map[string]string } func logsSlice(state map[string]any) []string { @@ -38,7 +37,7 @@ func (w *primitiveWorkflow) startNode(ctx *ag.Context, _ any, state map[string]a return ag.Command{ Update: state, Goto: []ag.Send{ - {Node: w.names["middle"], NodeInput: "from_start"}, + {Node: w.middleNode, NodeInput: "from_start"}, }, }, nil } @@ -50,7 +49,7 @@ func (w *primitiveWorkflow) middleNode(ctx *ag.Context, input any, state map[str return ag.Command{ Update: state, Goto: []ag.Send{ - {Node: w.names["finish"], NodeInput: "from_middle"}, + {Node: w.finishNode, NodeInput: "from_middle"}, }, }, nil } @@ -64,12 +63,12 @@ func (w *primitiveWorkflow) finishNode(ctx *ag.Context, input any, state map[str } func TestInputAndStatePrimitivesCompatible(t *testing.T) { - workflow := &primitiveWorkflow{names: make(map[string]string)} + workflow := &primitiveWorkflow{} graph := ag.NewAdvancedStateGraph() - workflow.names["start"] = graph.AddNode(workflow.startNode) - workflow.names["middle"] = graph.AddNode(workflow.middleNode) - workflow.names["finish"] = graph.AddNode(workflow.finishNode) + graph.AddNode(workflow.startNode) + graph.AddNode(workflow.middleNode) + graph.AddNode(workflow.finishNode) graph.SetEntryNode(workflow.startNode) graph.SetFinishNode(workflow.finishNode)