Spaces:
Sleeping
Sleeping
| from langgraph.graph import StateGraph, START, END | |
| from state import StartupState | |
| from agents.ceo import ceo_node | |
| from agents.product import product_node | |
| from agents.engineer import engineer_node | |
| from agents.marketing import marketing_node | |
| from agents.qa import qa_node | |
| def should_end(state: StartupState) -> str: | |
| if state.get("review_approved"): | |
| return END | |
| return "product_node" | |
| def build_graph(): | |
| workflow = StateGraph(StartupState) | |
| # Add Nodes | |
| workflow.add_node("ceo_node", ceo_node) | |
| workflow.add_node("product_node", product_node) | |
| workflow.add_node("engineer_node", engineer_node) | |
| workflow.add_node("marketing_node", marketing_node) | |
| workflow.add_node("qa_node", qa_node) | |
| # Define Edges | |
| workflow.add_edge(START, "ceo_node") | |
| # Parallel Execution: Product goes to Engineer & Marketing | |
| workflow.add_edge("product_node", "engineer_node") | |
| workflow.add_edge("product_node", "marketing_node") | |
| # Fan-in to QA | |
| workflow.add_edge("engineer_node", "qa_node") | |
| workflow.add_edge("marketing_node", "qa_node") | |
| workflow.add_edge("qa_node", "ceo_node") | |
| # Conditional logic from CEO | |
| workflow.add_conditional_edges( | |
| "ceo_node", | |
| should_end, | |
| { | |
| END: END, | |
| "product_node": "product_node" | |
| } | |
| ) | |
| return workflow.compile() | |