Spaces:
Sleeping
Sleeping
File size: 1,730 Bytes
233c5c8 d42c6d7 75576be 233c5c8 d42c6d7 75576be d42c6d7 75576be d42c6d7 75576be d42c6d7 75576be | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | from langgraph.graph import StateGraph, END
from src.schema import AgentState, HybridState
# Import Agents
from src.agents.planner import planner_node
from src.agents.researcher import researcher_node
from src.agents.writer import writer_node
from src.agents.designer import designer_node
from src.agents.critic import critic_node
# --- CONDITIONAL LOGIC ---
def should_continue(state: AgentState):
"""
Decides: Go back to Writer? Or move to Designer?
"""
wrapper = HybridState(state)
score = wrapper.get("score", 0)
revisions = wrapper.get("revision_count", 0)
# Rule: If score < 8 AND we haven't tried too many times...
if score < 8 and revisions < 2:
print(f"🔄 Quality Check Failed (Score: {score}/10). Revising...")
return "writer"
if score >= 8:
print(f"✅ Quality Check Passed (Score: {score}/10).")
else:
print("⚠️ Max revisions reached. Moving to publishing.")
return "designer"
# --- BUILD GRAPH ---
workflow = StateGraph(AgentState)
workflow.add_node("planner", planner_node)
workflow.add_node("researcher", researcher_node)
workflow.add_node("writer", writer_node)
workflow.add_node("critic", critic_node)
workflow.add_node("designer", designer_node)
# Linear flow start
workflow.set_entry_point("planner")
workflow.add_edge("planner", "researcher")
workflow.add_edge("researcher", "writer")
# The Loop: Writer -> Critic -> (Router)
workflow.add_edge("writer", "critic")
workflow.add_conditional_edges(
"critic",
should_continue,
{
"writer": "writer", # Loop back
"designer": "designer" # Move forward
}
)
workflow.add_edge("designer", END)
graph = workflow.compile()
|