File size: 1,213 Bytes
3194955
 
 
 
 
 
 
 
1651eb7
3194955
 
 
 
 
 
 
 
 
 
1651eb7
3194955
 
 
 
1651eb7
3194955
 
 
1651eb7
 
 
3194955
 
 
 
 
1651eb7
3194955
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
"""
LangGraph Workflow Setup for ChaBo RAG Orchestrator
"""
import logging
from functools import partial
from langgraph.graph import StateGraph, START, END

from .state import GraphState
from .nodes import retrieve_node, generate_node_streaming, ingest_node

logger = logging.getLogger(__name__)


def build_workflow(retriever_instance, generator_instance):
    """
    Build and compile the LangGraph workflow for RAG orchestration
    """
    workflow = StateGraph(GraphState)

    # Inject services into nodes (ingest_node doesn't need dependency injection)
    r_node = partial(retrieve_node, retriever=retriever_instance)
    g_node = partial(generate_node_streaming, generator=generator_instance)

    # Add nodes
    workflow.add_node("ingest", ingest_node)
    workflow.add_node("retrieve", r_node)
    workflow.add_node("generate", g_node)

    # Define edges: ingest -> retrieve -> generate
    workflow.add_edge(START, "ingest")
    workflow.add_edge("ingest", "retrieve")
    workflow.add_edge("retrieve", "generate")
    workflow.add_edge("generate", END)

    compiled_graph = workflow.compile()

    logger.info("LangGraph workflow compiled successfully with ingest node")
    return compiled_graph