Spaces:
Running
Running
File size: 1,684 Bytes
bcaa321 4eb7b2b bcaa321 4eb7b2b bcaa321 4eb7b2b bcaa321 4eb7b2b bcaa321 4eb7b2b bcaa321 4eb7b2b bcaa321 a73bf97 bcaa321 a73bf97 bcaa321 a73bf97 bcaa321 | 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 | from langgraph.graph import END, START, StateGraph
from src.nodes import (
direct_response_node,
final_response_node,
orchestrator_node,
should_call_tool,
tool_node,
)
from src.state import AgentState
def build_graph():
builder = StateGraph(AgentState)
builder.add_node("orchestrator", orchestrator_node)
builder.add_node("tool_node", tool_node)
builder.add_node("final_response", final_response_node)
builder.add_node("direct_response", direct_response_node)
builder.add_edge(START, "orchestrator")
builder.add_conditional_edges(
"orchestrator", should_call_tool,
{"tool_node": "tool_node", "direct_response": "direct_response"},
)
builder.add_edge("tool_node", "final_response")
builder.add_edge("final_response", END)
builder.add_edge("direct_response", END)
return builder.compile()
graph = build_graph()
def run(initial_state: AgentState) -> AgentState:
"""
Chạy graph với AgentState đã được khởi tạo sẵn.
Args:
initial_state: AgentState với conversation_id, sender_id, raw_query đã điền đủ.
Returns:
AgentState cuối cùng (có final_answer).
"""
return graph.invoke(initial_state)
def print_result(result: AgentState, label: str = "") -> None:
SEP = "═" * 60
if label:
print(f"\n{SEP}\n {label}\n{SEP}")
print(f" 📌 iters : {result.get('iters')} / {result.get('max_iters')}")
print(f" 📌 # messages : {len(result.get('messages', []))}")
print(f"{'─' * 60}")
print(f"\n✅ final_answer:\n")
print(result.get("final_answer") or "(trống)")
|