| """Graph builder for LangGraph workflow"""
|
|
|
| from langgraph.graph import StateGraph, END
|
| from src.state.rag_state import RAGState
|
| from src.node.reactnode 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) |