Spaces:
Running
Running
File size: 2,570 Bytes
673b675 | 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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | from app.graph.nodes.router import router_node
from app.graph.nodes.rag_agent import rag_agent_node
from app.graph.nodes.synthesizer import synthesizer_stream
from app.graph.nodes.evaluator import evaluator_node
async def stream_graph(initial_state):
"""
Streaming execution.
Emits dictionaries with keys:
event
data
"""
# ---------------- Router ----------------
yield {
"event": "status",
"data": {
"step": "router",
"message": "Routing query..."
}
}
state = router_node(initial_state)
route = state["route"]
# ---------------- Retrieval ----------------
if route == "rag":
yield {
"event": "status",
"data": {
"step": "retrieval",
"message": "Searching document..."
}
}
state = rag_agent_node(state)
elif route == "hybrid":
yield {
"event": "status",
"data": {
"step": "retrieval",
"message": "Searching document..."
}
}
else:
yield {
"event": "status",
"data": {
"step": "llm",
"message": "Using general knowledge..."
}
}
# ---------------- Generation ----------------
yield {
"event": "status",
"data": {
"step": "generation",
"message": "Generating answer..."
}
}
answer = ""
async for token in synthesizer_stream(state):
answer += token
yield {
"event": "token",
"data": token
}
state["final_answer"] = answer
# ---------------- Evaluation ----------------
yield {
"event": "status",
"data": {
"step": "evaluation",
"message": "Evaluating response..."
}
}
state = evaluator_node(state)
# ---------------- Sources ----------------
yield {
"event": "sources",
"data": state.get("sources", [])
}
# ---------------- Evaluation ----------------
yield {
"event": "evaluation",
"data": state.get("evaluation", {})
}
# ---------------- Finished ----------------
yield {
"event": "done",
"data": {
"route": state["route"],
"answer": answer
}
}
|