vn6295337's picture
Refactor: Analyzer handles revisions directly, remove Editor node
53fe655
"""
LangGraph workflow definition for self-correcting SWOT analysis.
Defines the cyclic workflow: Researcher -> Analyzer -> Critic -> Analyzer (revision loop)
"""
from langgraph.graph import StateGraph
from langchain_core.runnables import RunnableLambda
from src.state import AgentState
from src.nodes.researcher import researcher_node
from src.nodes.analyzer import analyzer_node
from src.nodes.critic import critic_node
from src.utils.conditions import should_continue
# Create the cyclic workflow
workflow = StateGraph(AgentState)
# Add nodes to the workflow (Analyzer handles both initial generation and revisions)
workflow.add_node("Researcher", RunnableLambda(researcher_node))
workflow.add_node("Analyzer", RunnableLambda(analyzer_node))
workflow.add_node("Critic", RunnableLambda(critic_node))
# Define the workflow edges
workflow.set_entry_point("Researcher")
workflow.add_edge("Researcher", "Analyzer")
workflow.add_edge("Analyzer", "Critic")
# Add conditional edges for the self-correcting loop
# Analyzer now handles revisions directly (no separate Editor node)
workflow.add_conditional_edges(
"Critic",
should_continue,
{
"exit": "__end__",
"retry": "Analyzer" # Route back to Analyzer for revisions
}
)
# Set the finish point
workflow.set_finish_point("Critic")
# Enhanced configuration for better tracing
workflow.config = {
"project_name": "AI-strategy-agent-cyclic",
"tags": ["self-correcting", "quality-loop", "swot-analysis"],
"metadata": {
"version": "2.0",
"environment": "development",
"workflow_type": "researcher-analyzer-critic"
}
}
# Compile the workflow
app = workflow.compile()