File size: 1,647 Bytes
335e0a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2c6f0a7
335e0a3
 
 
 
 
 
2c6f0a7
 
335e0a3
96a22b4
 
335e0a3
 
 
 
 
 
 
 
 
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
from langgraph.graph import StateGraph, END
from .state import PRReviewState
from .nodes import (
    code_retriever_node,
    code_reviewer_node,
    feedback_formatter_node,
    post_code_review_node,
    update_review_body_based_on_human_input_node,
)

def create_graph():
    """Creates and compiles the LangGraph for the PR review process."""
    workflow = StateGraph(PRReviewState)

    # --- Node Definitions ---
    workflow.add_node("code_retriever", code_retriever_node)
    workflow.add_node("code_reviewer", code_reviewer_node)
    workflow.add_node("feedback_formatter", feedback_formatter_node)
    workflow.add_node("post_code_review", post_code_review_node)
    workflow.add_node("update_review_body_based_on_human_input_node", update_review_body_based_on_human_input_node)

    # --- Edge Definitions ---
    workflow.set_entry_point("code_retriever")
    workflow.add_edge("code_retriever", "code_reviewer")
    workflow.add_edge("code_reviewer", "feedback_formatter")
    workflow.add_edge("feedback_formatter", "post_code_review")
    workflow.add_edge("post_code_review", "update_review_body_based_on_human_input_node")
    workflow.add_edge("update_review_body_based_on_human_input_node", END)

    # The compilation with the checkpointer is now handled in app.py
    return workflow

# To make it runnable for debugging or direct invocation
if __name__ == "__main__":
    app = create_graph()
    # You can add debug invocation here, e.g.:
    # from .state import PRReviewState
    # initial_state = PRReviewState(repo_name="your/repo", pr_id=123, ...)
    # for event in app.stream(initial_state):
    #     print(event)