Add src/graph.py

This commit is contained in:
2026-06-05 12:37:47 +00:00
parent 48da8c1c4a
commit 0565788a39
+46
View File
@@ -0,0 +1,46 @@
"""
LangGraph implementation for the research brief generator.
The graph orchestrates the following nodes (defined in ``brief.py``):
* ``outline`` generates a 45 point outline.
* ``research_step`` performs a web search for the current outline point and creates a short note.
* ``synthesize`` combines all notes into a coherent brief.
The graph loops over ``research_step`` until all outline points are processed.
"""
from langgraph import StateGraph, END
from .brief import BriefState, outline_node, research_step_node, synthesize_node
def build_graph() -> StateGraph:
"""Build and return the LangGraph graph.
The graph starts at ``outline``. After generating the outline it
proceeds to ``research_step``. ``research_step`` is repeated until
``step_index`` reaches the length of the outline, then the graph
moves to ``synthesize`` and ends.
"""
graph = StateGraph(BriefState)
# Add nodes
graph.add_node("outline", outline_node)
graph.add_node("research_step", research_step_node)
graph.add_node("synthesize", synthesize_node)
# Entry point
graph.set_entry_point("outline")
# After outline, always go to research_step
graph.add_edge("outline", "research_step")
# Conditional loop: if more steps remain, stay in research_step
def research_cond(state: BriefState):
return "research_step" if state["step_index"] < len(state["outline"]) else "synthesize"
graph.add_conditional_edges("research_step", research_cond)
# End after synthesis
graph.add_edge("synthesize", END)
return graph