ai / backend /agents /workflow.py
3v324v23's picture
agent
b4291bc
Raw
History Blame Contribute Delete
1.61 kB
from typing import TypedDict
from langgraph.graph import END, StateGraph
from backend.agents.planner_agent import plan_query
from backend.services.repo_service import repo_service
class AgentState(TypedDict):
repo_id: str
question: str
top_k: int
plan: list[str]
has_evidence: bool
response: object
def _plan(state: AgentState) -> AgentState:
state["plan"] = plan_query(state["question"])
return state
def _retrieve_and_answer(state: AgentState) -> AgentState:
from backend.services.query_service import query_service
response = query_service.answer(state["repo_id"], state["question"], state["top_k"])
state["has_evidence"] = bool(response.sources)
state["response"] = response
return state
def build_workflow():
graph = StateGraph(AgentState)
graph.add_node("planner", _plan)
graph.add_node("retriever_answerer", _retrieve_and_answer)
graph.set_entry_point("planner")
graph.add_edge("planner", "retriever_answerer")
graph.add_edge("retriever_answerer", END)
return graph.compile()
workflow = build_workflow()
def run_workflow(repo_id: str, question: str, top_k: int = 8):
from backend.services.query_service import query_service
if not repo_service.get_chunks(repo_id):
return query_service.answer(repo_id, question, top_k)
state = workflow.invoke(
{
"repo_id": repo_id,
"question": question,
"top_k": top_k,
"plan": [],
"has_evidence": False,
"response": None,
}
)
return state["response"]