66 agent_host ,
77 context_builder ,
88 fallback ,
9- guard ,
9+ guard_inicial ,
10+ guard_final ,
1011 parafraseo ,
1112 retriever ,
1213)
1314from app .agents .state import AgentState
14- from app .agents .routing import route_after_guard
15+ from app .agents .routing import route_after_guard , route_after_guard_final
1516
1617def create_agent_graph () -> StateGraph :
1718 """
1819 Create and configure the LangGraph agent graph.
1920
2021 The graph implements the following flow:
2122 1. START -> agent_host (Nodo 1)
22- 2. agent_host -> guard (Nodo 2)
23- 3. guard -> [conditional] -> fallback (Nodo 3) or END
24- 4. fallback -> parafraseo (Nodo 4)
25- 5. parafraseo -> retriever (Nodo 5)
26- 6. retriever -> context_builder (Nodo 6)
27- 7. context_builder -> generator (Nodo 7)
28- 8. generator -> fallback (Nodo 8)
29- 9. fallback -> [conditional] -> END (with final_response) or END (with error)
23+ 2. agent_host -> guard_inicial (Nodo 2)
24+ 3. guard_inicial -> [conditional] -> fallback (if malicious) or parafraseo (if valid)
25+ 4. parafraseo -> retriever (Nodo 5)
26+ 5. retriever -> context_builder (Nodo 6)
27+ 6. context_builder -> guard_final (Nodo 7)
28+ 7. guard_final -> [conditional] -> fallback (if risky/PII detected) or END (if valid)
29+ 8. fallback -> END
3030
3131 Returns:
3232 Configured StateGraph instance ready for execution
@@ -36,7 +36,8 @@ def create_agent_graph() -> StateGraph:
3636
3737 # Add nodes
3838 workflow .add_node ("agent_host" , agent_host )
39- workflow .add_node ("guard" , guard )
39+ workflow .add_node ("guard_inicial" , guard_inicial )
40+ workflow .add_node ("guard_final" , guard_final )
4041 workflow .add_node ("fallback" , fallback )
4142 workflow .add_node ("parafraseo" , parafraseo )
4243 workflow .add_node ("retriever" , retriever )
@@ -46,12 +47,12 @@ def create_agent_graph() -> StateGraph:
4647 # Start -> agent_host
4748 workflow .add_edge (START , "agent_host" )
4849
49- # agent_host -> guard
50- workflow .add_edge ("agent_host" , "guard " )
50+ # agent_host -> guard_inicial
51+ workflow .add_edge ("agent_host" , "guard_inicial " )
5152
52- # guard -> conditional routing
53+ # guard_inicial -> conditional routing (first guard check)
5354 workflow .add_conditional_edges (
54- "guard " ,
55+ "guard_inicial " ,
5556 route_after_guard ,
5657 {
5758 "malicious" : "fallback" , # go to fallback if malicious
@@ -65,18 +66,20 @@ def create_agent_graph() -> StateGraph:
6566 # retriever -> context_builder
6667 workflow .add_edge ("retriever" , "context_builder" )
6768
68- # context_builder -> guard
69- workflow .add_edge ("context_builder" , "guard " )
69+ # context_builder -> guard_final
70+ workflow .add_edge ("context_builder" , "guard_final " )
7071
71- # guard -> conditional routing
72+ # guard_final -> conditional routing (second guard check for PII)
7273 workflow .add_conditional_edges (
73- "guard " ,
74- route_after_guard ,
74+ "guard_final " ,
75+ route_after_guard_final ,
7576 {
76- "malicious " : "fallback" , # go to fallback if malicious
77+ "risky " : "fallback" , # go to fallback if risky (PII detected)
7778 "continue" : END , # if there's no error ends
7879 },
7980 )
81+
82+ # fallback -> END
8083 workflow .add_edge ("fallback" , END )
8184 # Compile the graph
8285 return workflow .compile ()
0 commit comments