NewsAgent-Pro / src /main.py
Owadokun Tosin Tobi
Update main.py for Critic agent
d42c6d7 unverified
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()