File size: 2,906 Bytes
2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 2dcccd3 c392583 | 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | """Orchestrated V2 workflow with tool-calling retrieval autonomy."""
from datetime import datetime
from langgraph.graph import StateGraph, END
from langchain_core.language_models.chat_models import BaseChatModel
from graphs.state import AgentState
from graphs.agents.classifier_agent import classifier_node
from graphs.agents.chat_tools_agent import chat_with_tools_node
from graphs.agents.summarizer_agent import summarizer_llm_node, summarizer_export_node
from graphs.prompts_v2 import load_v2_prompt
from typing import Callable
def _build_v2_workflow(
classify_runner: Callable[[AgentState], AgentState],
tools_agent_runner: Callable[[AgentState], AgentState],
summarizer_llm_runner: Callable[[AgentState], AgentState],
summarizer_export_runner: Callable[[AgentState], AgentState],
):
workflow = StateGraph(AgentState)
workflow.add_node("classify", classify_runner)
workflow.add_node("tools_agent", tools_agent_runner)
workflow.add_node("summarizer_llm", summarizer_llm_runner)
workflow.add_node("summarizer_export", summarizer_export_runner)
workflow.set_entry_point("classify")
workflow.add_conditional_edges(
"classify",
lambda s: getattr(s.get("classification"), "classification", "CLASSIC"),
{
"CLASSIC": "tools_agent",
"SUMMARIZE": "summarizer_llm",
"UNKNOWN": "tools_agent",
},
)
workflow.add_edge("tools_agent", END)
workflow.add_edge("summarizer_llm", "summarizer_export")
workflow.add_edge("summarizer_export", END)
return workflow
def create_orchestrated_graph_v2(llm: BaseChatModel, checkpointer=None):
# Lazy imports keep module importable in notebook contexts that do not
# need runtime PDF generation dependencies.
from tools.pdf import markdown_to_pdf
from tools.storage import upload_pdf_to_supabase
chat_prompt_v2_template = load_v2_prompt("chat_system.md")
today_date = datetime.now().strftime("%d/%m/%Y")
chat_prompt_v2 = chat_prompt_v2_template.replace("{{TODAY_DATE}}", today_date)
tools_policy_v2 = load_v2_prompt("tools_policy.md")
classifier_prompt_v2 = load_v2_prompt("classifier_system.md")
summarizer_prompt_v2 = load_v2_prompt("summarizer_system.md")
workflow = _build_v2_workflow(
classify_runner=classifier_node(llm, system_prompt=classifier_prompt_v2),
tools_agent_runner=chat_with_tools_node(
llm,
base_system_prompt=chat_prompt_v2,
tools_policy_prompt=tools_policy_v2,
),
summarizer_llm_runner=summarizer_llm_node(
llm,
system_prompt=summarizer_prompt_v2,
),
summarizer_export_runner=summarizer_export_node(
markdown_to_pdf=markdown_to_pdf,
upload_pdf=upload_pdf_to_supabase,
),
)
return workflow.compile(checkpointer=checkpointer)
|