selim-ba commited on
Commit
b815539
·
verified ·
1 Parent(s): 369944b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -28
app.py CHANGED
@@ -9,7 +9,8 @@ import string
9
 
10
  ###
11
 
12
- import wikipedia
 
13
 
14
  # (Keep Constants as is)
15
  # --- Constants ---
@@ -124,29 +125,38 @@ class SuperSmartAgent:
124
  return state
125
 
126
  ###################
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  def check_wikipedia_suitability(state):
128
  q = state["question"].lower()
129
- keywords = ["who is", "what is", "where is", "tell me about", "wikipedia", "when was"]
130
- state["is_wiki"] = any(kw in q for kw in keywords)
 
 
131
  return state
132
-
133
  def search_wikipedia(state):
134
- query = state["question"]
135
- try:
136
- # Strip prompt like "Who is" to get better titles
137
- cleaned_query = query.replace("who is", "").replace("what is", "").replace("tell me about", "").strip()
138
- result = wikipedia.summary(cleaned_query, sentences=2)
139
- state["response"] = result
140
- except wikipedia.exceptions.DisambiguationError as e:
141
- state["response"] = f"Too many results for '{query}', be more specific. Example options: {e.options[:3]}"
142
- except wikipedia.exceptions.PageError:
143
- state["response"] = f"Sorry, I couldn't find any info on '{query}'."
144
- except Exception as e:
145
- state["response"] = f"Wikipedia lookup failed: {str(e)}"
146
  return state
147
 
148
-
149
-
150
  ##################
151
 
152
  class AgentState(TypedDict, total=False):
@@ -159,43 +169,43 @@ class SuperSmartAgent:
159
 
160
  builder = StateGraph(AgentState)
161
 
162
- # --- Nodes ---
163
  builder.add_node("check_reversed", check_reversed)
164
  builder.add_node("fix_question", fix_question)
165
  builder.add_node("check_riddle_or_trick", check_riddle_or_trick)
166
  builder.add_node("solve_riddle", solve_riddle)
167
- builder.add_node("check_wikipedia_suitability", check_wikipedia_suitability) # NEW
168
- builder.add_node("search_wikipedia", search_wikipedia) # NEW
169
  builder.add_node("check_python_suitability", check_python_suitability)
170
  builder.add_node("generate_code", generate_code)
171
  builder.add_node("fallback", fallback)
172
 
173
  # --- Entry point ---
174
  builder.set_entry_point("check_reversed")
175
-
176
  # --- Reasoning pipeline ---
177
  builder.add_edge("check_reversed", "fix_question")
178
  builder.add_edge("fix_question", "check_riddle_or_trick")
179
-
180
  builder.add_conditional_edges(
181
  "check_riddle_or_trick",
182
  lambda s: "solve_riddle" if s.get("is_riddle") else "check_wikipedia_suitability"
183
  )
184
-
185
  builder.add_edge("solve_riddle", END)
186
-
187
  builder.add_conditional_edges(
188
  "check_wikipedia_suitability",
189
  lambda s: "search_wikipedia" if s.get("is_wiki") else "check_python_suitability"
190
  )
191
-
192
  builder.add_edge("search_wikipedia", END)
193
-
194
  builder.add_conditional_edges(
195
  "check_python_suitability",
196
  lambda s: "generate_code" if s.get("is_python") else "fallback"
197
  )
198
-
199
  builder.add_edge("generate_code", END)
200
  builder.add_edge("fallback", END)
201
 
 
9
 
10
  ###
11
 
12
+ import requests
13
+ from bs4 import BeautifulSoup
14
 
15
  # (Keep Constants as is)
16
  # --- Constants ---
 
125
  return state
126
 
127
  ###################
128
+ def query_wikipedia(question):
129
+ try:
130
+ # Try to extract keywords (naively here)
131
+ search_term = question.strip().replace(" ", "_")
132
+ url = f"https://en.wikipedia.org/wiki/{search_term}"
133
+ print(f"Fetching Wikipedia page: {url}")
134
+ resp = requests.get(url, timeout=10)
135
+ if resp.status_code != 200:
136
+ return f"No Wikipedia page found for '{question}'."
137
+
138
+ soup = BeautifulSoup(resp.text, "html.parser")
139
+ paragraphs = soup.select("p")
140
+ for p in paragraphs:
141
+ if p.text.strip():
142
+ return p.text.strip()
143
+ return "Wikipedia page found, but no readable content available."
144
+ except Exception as e:
145
+ return f"Error querying Wikipedia: {e}"
146
+
147
  def check_wikipedia_suitability(state):
148
  q = state["question"].lower()
149
+ # Simple heuristic: if it's a "who is", "what is", or named entity
150
+ triggers = ["who is", "what is", "when did", "where is", "tell me about"]
151
+ state["is_wiki"] = any(trigger in q for trigger in triggers)
152
+ print(f"is_wiki: {state['is_wiki']}")
153
  return state
154
+
155
  def search_wikipedia(state):
156
+ question = state["question"]
157
+ state["response"] = query_wikipedia(question)
 
 
 
 
 
 
 
 
 
 
158
  return state
159
 
 
 
160
  ##################
161
 
162
  class AgentState(TypedDict, total=False):
 
169
 
170
  builder = StateGraph(AgentState)
171
 
172
+ # --- Nodes ---
173
  builder.add_node("check_reversed", check_reversed)
174
  builder.add_node("fix_question", fix_question)
175
  builder.add_node("check_riddle_or_trick", check_riddle_or_trick)
176
  builder.add_node("solve_riddle", solve_riddle)
177
+ builder.add_node("check_wikipedia_suitability", check_wikipedia_suitability)
178
+ builder.add_node("search_wikipedia", search_wikipedia)
179
  builder.add_node("check_python_suitability", check_python_suitability)
180
  builder.add_node("generate_code", generate_code)
181
  builder.add_node("fallback", fallback)
182
 
183
  # --- Entry point ---
184
  builder.set_entry_point("check_reversed")
185
+
186
  # --- Reasoning pipeline ---
187
  builder.add_edge("check_reversed", "fix_question")
188
  builder.add_edge("fix_question", "check_riddle_or_trick")
189
+
190
  builder.add_conditional_edges(
191
  "check_riddle_or_trick",
192
  lambda s: "solve_riddle" if s.get("is_riddle") else "check_wikipedia_suitability"
193
  )
194
+
195
  builder.add_edge("solve_riddle", END)
196
+
197
  builder.add_conditional_edges(
198
  "check_wikipedia_suitability",
199
  lambda s: "search_wikipedia" if s.get("is_wiki") else "check_python_suitability"
200
  )
201
+
202
  builder.add_edge("search_wikipedia", END)
203
+
204
  builder.add_conditional_edges(
205
  "check_python_suitability",
206
  lambda s: "generate_code" if s.get("is_python") else "fallback"
207
  )
208
+
209
  builder.add_edge("generate_code", END)
210
  builder.add_edge("fallback", END)
211