File size: 1,528 Bytes
800af66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import MemorySaver
import logging

from schema import RecommendationState
from nodes import (
    intent_detector_node,
    inspect_schema_node,
    generate_query_node,
    validate_query_node,
    execute_query_node,
    format_response_node)

logger = logging.getLogger(__name__)

graph_checkpointer = MemorySaver()

def build_recommendation_graph():
    """
    Builds the LangGraph workflow for product recommendations
    Memory is managed by the checkpointer automatically
    """
    workflow = StateGraph(RecommendationState)

    workflow.add_node("intent_detector", intent_detector_node)
    workflow.add_node("schema_inspector", inspect_schema_node)
    workflow.add_node("query_generator", generate_query_node)
    workflow.add_node("query_validator", validate_query_node)
    workflow.add_node("query_executor", execute_query_node)
    workflow.add_node("response_formatter", format_response_node)

    workflow.set_entry_point("schema_inspector")
    workflow.add_edge("schema_inspector", "query_generator")
    workflow.add_edge("query_generator", "query_validator")
    workflow.add_edge("query_validator", "query_executor")
    workflow.add_edge("query_executor", "response_formatter")
    workflow.add_edge("response_formatter", END)

    return workflow.compile(checkpointer=graph_checkpointer)


recommendation_graph = build_recommendation_graph()

logger.info(" Recommendation graph compiled successfully with short-term memory")