File size: 1,229 Bytes
659e80b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langgraph.graph import StateGraph
from typing import TypedDict
from app.agents.analyzer import analyzer_node
from app.agents.generator import generator_node
from app.agents.reviewer import reviewer_node
from app.agents.refactor import refactor_node
from app.config import MAX_ITERATIONS


class CodeState(TypedDict):
    prompt: str
    structured_prompt: str
    code: str
    review: str
    iteration: int


def should_continue(state):
    if state["iteration"] >= MAX_ITERATIONS:
        return "end"

    if "critical" in state["review"].lower():
        return "refactor"

    return "end"


def build_graph():
    builder = StateGraph(CodeState)

    builder.add_node("analyzer", analyzer_node)
    builder.add_node("generator", generator_node)
    builder.add_node("reviewer", reviewer_node)
    builder.add_node("refactor", refactor_node)

    builder.set_entry_point("analyzer")

    builder.add_edge("analyzer", "generator")
    builder.add_edge("generator", "reviewer")

    builder.add_conditional_edges(
        "reviewer",
        should_continue,
        {
            "refactor": "refactor",
            "end": None
        }
    )

    builder.add_edge("refactor", "reviewer")

    return builder.compile()