Krishp1's picture
Update edges.py
9480eea verified
Raw
History Blame Contribute Delete
1.76 kB
# edges.py — Conditional edge routing for Autonomous Python Coding Agent
from langgraph.graph import END
from state import State
def route_after_ast(state: State) -> str:
if state["ast_valid"]:
return "test_generator"
if state["retries"] >= 3:
return "__end__"
return "debugger"
def route_after_test(state: State) -> str:
if state["passed"]:
return "hypothesis"
if state["retries"] >= 3:
return "hypothesis" # move forward after 3 tries
return "debugger"
def route_after_hypothesis(state: State) -> str:
return "benchmark" # never blocks pipeline
def route_after_benchmark(state: State) -> str:
error = state.get("error", "")
if "too slow" in error.lower() or "optimize" in error.lower():
if state["retries"] >= 3:
return "security"
return "debugger"
return "security"
def route_after_security(state: State) -> str:
if state["is_secure"]:
return "complexity"
if state["security_retries"] >= 2:
return "complexity" # give up, move forward
return "coder"
def route_after_complexity(state: State) -> str:
if state["is_simple"]:
return "reflection"
if state["complexity_retries"] >= 2:
return "reflection" # give up, move forward
return "coder"
def route_after_reflection(state: State) -> str:
if state["reflection_ok"]:
return "reviewer"
# Own counter — "retries" is only incremented by the debugger node,
# which this loop never visits, so it would never advance and could
# bounce coder<->reflection until LangGraph's recursion_limit crashes.
if state.get("reflection_retries", 0) >= 3:
return "reviewer" # ship after 3 tries
return "coder"