lvvignesh2122 commited on
Commit
8756da7
·
1 Parent(s): a32922f

Remove legacy RAG v1 file

Browse files
Files changed (1) hide show
  1. agentic_rag_graph.py +0 -160
agentic_rag_graph.py DELETED
@@ -1,160 +0,0 @@
1
- from typing import TypedDict, List, Optional
2
- import google.generativeai as genai
3
- from langgraph.graph import StateGraph, END
4
-
5
- from rag_store import search_knowledge
6
- from eval_logger import log_eval
7
-
8
- MODEL_NAME = "gemini-2.5-flash"
9
-
10
-
11
- # ===============================
12
- # STATE
13
- # ===============================
14
- class AgentState(TypedDict):
15
- query: str
16
- decision: str
17
- retrieved_chunks: List[dict]
18
- answer: Optional[str]
19
- confidence: float
20
- answer_known: bool
21
-
22
-
23
- # ===============================
24
- # DECISION NODE
25
- # ===============================
26
- def agent_decision_node(state: AgentState) -> AgentState:
27
- q = state["query"].lower()
28
-
29
- rag_keywords = [
30
- "summarize", "summary", "fee", "fees", "refund",
31
- "tuition", "document", "policy", "offer", "scholarship"
32
- ]
33
-
34
- decision = "use_rag" if any(k in q for k in rag_keywords) else "no_rag"
35
-
36
- return {**state, "decision": decision}
37
-
38
-
39
- # ===============================
40
- # RETRIEVAL NODE (TOOL)
41
- # ===============================
42
- def retrieve_node(state: AgentState) -> AgentState:
43
- chunks = search_knowledge(state["query"])
44
- return {**state, "retrieved_chunks": chunks}
45
-
46
-
47
- # ===============================
48
- # ANSWER WITH RAG
49
- # ===============================
50
- def answer_with_rag_node(state: AgentState) -> AgentState:
51
- if not state["retrieved_chunks"]:
52
- return no_answer_node(state)
53
-
54
- context = "\n\n".join(c["text"] for c in state["retrieved_chunks"])
55
-
56
- prompt = f"""
57
- Answer using ONLY the context below.
58
- If the answer is not present, say "I don't know".
59
-
60
- Context:
61
- {context}
62
-
63
- Question:
64
- {state["query"]}
65
- """
66
-
67
- model = genai.GenerativeModel(MODEL_NAME)
68
- resp = model.generate_content(prompt)
69
- answer_text = resp.text
70
-
71
- confidence = min(1.0, len(state["retrieved_chunks"]) / 5)
72
- answer_known = "i don't know" not in answer_text.lower()
73
-
74
- log_eval(
75
- query=state["query"],
76
- retrieved_count=len(state["retrieved_chunks"]),
77
- confidence=confidence,
78
- answer_known=answer_known
79
- )
80
-
81
- return {
82
- **state,
83
- "answer": answer_text,
84
- "confidence": confidence,
85
- "answer_known": answer_known
86
- }
87
-
88
-
89
- # ===============================
90
- # ANSWER WITHOUT RAG
91
- # ===============================
92
- def answer_direct_node(state: AgentState) -> AgentState:
93
- prompt = f"Answer the following question concisely:\n\n{state['query']}"
94
-
95
- model = genai.GenerativeModel(MODEL_NAME)
96
- resp = model.generate_content(prompt)
97
-
98
- log_eval(
99
- query=state["query"],
100
- retrieved_count=0,
101
- confidence=0.3,
102
- answer_known=True
103
- )
104
-
105
- return {
106
- **state,
107
- "answer": resp.text,
108
- "confidence": 0.3,
109
- "answer_known": True
110
- }
111
-
112
-
113
- # ===============================
114
- # NO ANSWER
115
- # ===============================
116
- def no_answer_node(state: AgentState) -> AgentState:
117
- log_eval(
118
- query=state["query"],
119
- retrieved_count=0,
120
- confidence=0.0,
121
- answer_known=False
122
- )
123
-
124
- return {
125
- **state,
126
- "answer": "I don't know based on the provided documents.",
127
- "confidence": 0.0,
128
- "answer_known": False
129
- }
130
-
131
-
132
- # ===============================
133
- # GRAPH BUILDER
134
- # ===============================
135
- def build_agentic_rag_graph():
136
- graph = StateGraph(AgentState)
137
-
138
- graph.add_node("decide", agent_decision_node)
139
- graph.add_node("retrieve", retrieve_node)
140
- graph.add_node("answer_rag", answer_with_rag_node)
141
- graph.add_node("answer_direct", answer_direct_node)
142
- graph.add_node("no_answer", no_answer_node)
143
-
144
- graph.set_entry_point("decide")
145
-
146
- graph.add_conditional_edges(
147
- "decide",
148
- lambda s: s["decision"],
149
- {
150
- "use_rag": "retrieve",
151
- "no_rag": "answer_direct"
152
- }
153
- )
154
-
155
- graph.add_edge("retrieve", "answer_rag")
156
- graph.add_edge("answer_rag", END)
157
- graph.add_edge("answer_direct", END)
158
- graph.add_edge("no_answer", END)
159
-
160
- return graph.compile()