| | """Graph builder for LangGraph workflow""" |
| |
|
| | from langgraph.graph import StateGraph, END |
| | from src.state.rag_state import RAGState |
| | from src.node.nodes import RAGNodes |
| |
|
| | class GraphBuilder: |
| | """Builds and manages the LangGraph workflow""" |
| | |
| | def __init__(self, retriever, llm): |
| | """ |
| | Initialize graph builder |
| | |
| | Args: |
| | retriever: Document retriever instance |
| | llm: Language model instance |
| | """ |
| | self.nodes = RAGNodes(retriever, llm) |
| | self.graph = None |
| | |
| | def build(self): |
| | """ |
| | Build the RAG workflow graph |
| | |
| | Returns: |
| | Compiled graph instance |
| | """ |
| | |
| | builder = StateGraph(RAGState) |
| | |
| | |
| | builder.add_node("retriever", self.nodes.retrieve_docs) |
| | builder.add_node("responder", self.nodes.generate_answer) |
| | |
| | |
| | builder.set_entry_point("retriever") |
| | |
| | |
| | builder.add_edge("retriever", "responder") |
| | builder.add_edge("responder", END) |
| | |
| | |
| | self.graph = builder.compile() |
| | return self.graph |
| | |
| | def run(self, question: str) -> dict: |
| | """ |
| | Run the RAG workflow |
| | |
| | Args: |
| | question: User question |
| | |
| | Returns: |
| | Final state with answer |
| | """ |
| | if self.graph is None: |
| | self.build() |
| | |
| | initial_state = RAGState(question=question) |
| | return self.graph.invoke(initial_state) |