1use crate::node::NodeType;
2use crate::types::GraphState;
3
4pub trait Router: Send + Sync {
6 fn next(&self, state: &GraphState, current: NodeType) -> NextNode;
7}
8
9#[derive(Debug, Clone, PartialEq)]
10pub enum NextNode {
11 LLM,
12 Tool,
13 End,
14}
15
16pub struct SimpleRouter;
19
20impl Router for SimpleRouter {
21 fn next(&self, state: &GraphState, current: NodeType) -> NextNode {
22 match current {
23 NodeType::LLM => {
24 if state.has_pending_tool_calls() {
26 NextNode::Tool
27 } else {
28 NextNode::End
29 }
30 }
31 NodeType::Tool => {
32 NextNode::LLM
34 }
35 }
36 }
37}
38