Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -29,9 +29,11 @@ class BasicAgent:
|
|
29 |
def __call__(self, question: str) -> str:
|
30 |
print(f"Agent received question (first 50 chars): {question[:50]}...")
|
31 |
fixed_answer = self.process_request(question)
|
32 |
-
print(f"Agent returning answer: {fixed_answer}")
|
33 |
return fixed_answer
|
34 |
|
|
|
|
|
35 |
|
36 |
class SearchAgent(BasicAgent):
|
37 |
def __init__(self):
|
@@ -39,18 +41,23 @@ class SearchAgent(BasicAgent):
|
|
39 |
print("SearchAgent specialized initialization.")
|
40 |
|
41 |
def process_request(self, query: str) -> str:
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
{
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
54 |
class BrowserAgent(BasicAgent):
|
55 |
def __init__(self):
|
56 |
super().__init__()
|
@@ -70,9 +77,17 @@ class BrowserAgent(BasicAgent):
|
|
70 |
'timestamp': datetime.now()
|
71 |
}
|
72 |
self.history.append(self.current_page)
|
73 |
-
return
|
|
|
|
|
|
|
|
|
74 |
except Exception as e:
|
75 |
-
return
|
|
|
|
|
|
|
|
|
76 |
|
77 |
class ContentExtractorAgent(BasicAgent):
|
78 |
def __init__(self):
|
@@ -94,7 +109,7 @@ class ContentExtractorAgent(BasicAgent):
|
|
94 |
'text': main_content.get_text(separator='\n', strip=True),
|
95 |
'links': [a['href'] for a in main_content.find_all('a', href=True)]
|
96 |
}
|
97 |
-
return
|
98 |
|
99 |
class WebNavigator(BasicAgent):
|
100 |
def __init__(self):
|
@@ -114,40 +129,58 @@ class WebNavigator(BasicAgent):
|
|
114 |
return self.search_and_extract(question)
|
115 |
|
116 |
def search_and_extract(self, query: str) -> str:
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
|
139 |
def get_page_summary(self, url: str) -> str:
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
})
|
149 |
-
return visit_result # Return the error message
|
150 |
-
|
151 |
|
152 |
|
153 |
|
|
|
29 |
def __call__(self, question: str) -> str:
|
30 |
print(f"Agent received question (first 50 chars): {question[:50]}...")
|
31 |
fixed_answer = self.process_request(question)
|
32 |
+
print(f"Agent returning answer: {fixed_answer[:100]}...") # Truncate long output
|
33 |
return fixed_answer
|
34 |
|
35 |
+
def process_request(self, question: str) -> str:
|
36 |
+
return "This is a default answer."
|
37 |
|
38 |
class SearchAgent(BasicAgent):
|
39 |
def __init__(self):
|
|
|
41 |
print("SearchAgent specialized initialization.")
|
42 |
|
43 |
def process_request(self, query: str) -> str:
|
44 |
+
"""Returns mock search results in JSON format"""
|
45 |
+
mock_results = [
|
46 |
+
{
|
47 |
+
"url": f"https://www.google.com/search?q={query.replace(' ', '+')}&result={i}",
|
48 |
+
"title": f"Example Result {i} for '{query[:15]}...'",
|
49 |
+
"snippet": f"This is a mock search result snippet about {query[:15]}... showing result number {i}.",
|
50 |
+
"relevance": i/3 # Score from 0.33 to 1.0
|
51 |
+
}
|
52 |
+
for i in range(1, 4)
|
53 |
+
]
|
54 |
+
return json.dumps({
|
55 |
+
"query": query,
|
56 |
+
"results": mock_results,
|
57 |
+
"count": len(mock_results),
|
58 |
+
"status": "success"
|
59 |
+
})
|
60 |
+
|
61 |
class BrowserAgent(BasicAgent):
|
62 |
def __init__(self):
|
63 |
super().__init__()
|
|
|
77 |
'timestamp': datetime.now()
|
78 |
}
|
79 |
self.history.append(self.current_page)
|
80 |
+
return json.dumps({
|
81 |
+
"status": "success",
|
82 |
+
"url": url,
|
83 |
+
"message": f"Successfully retrieved page: {url}"
|
84 |
+
})
|
85 |
except Exception as e:
|
86 |
+
return json.dumps({
|
87 |
+
"status": "error",
|
88 |
+
"url": url,
|
89 |
+
"message": f"Error visiting {url}: {str(e)}"
|
90 |
+
})
|
91 |
|
92 |
class ContentExtractorAgent(BasicAgent):
|
93 |
def __init__(self):
|
|
|
109 |
'text': main_content.get_text(separator='\n', strip=True),
|
110 |
'links': [a['href'] for a in main_content.find_all('a', href=True)]
|
111 |
}
|
112 |
+
return json.dumps(extracted)
|
113 |
|
114 |
class WebNavigator(BasicAgent):
|
115 |
def __init__(self):
|
|
|
129 |
return self.search_and_extract(question)
|
130 |
|
131 |
def search_and_extract(self, query: str) -> str:
|
132 |
+
try:
|
133 |
+
search_results = json.loads(self.search_agent(query))
|
134 |
+
if search_results['status'] != 'success':
|
135 |
+
return json.dumps({"error": "Search failed", "details": search_results})
|
136 |
+
|
137 |
+
extracted_data = []
|
138 |
+
for result in search_results['results']:
|
139 |
+
visit_result = json.loads(self.browser_agent(result['url']))
|
140 |
+
|
141 |
+
if visit_result['status'] == 'success':
|
142 |
+
content = json.loads(self.extractor_agent(self.browser_agent.current_page['content']))
|
143 |
+
extracted_data.append({
|
144 |
+
'query': query,
|
145 |
+
'url': result['url'],
|
146 |
+
'content': content
|
147 |
+
})
|
148 |
+
|
149 |
+
self.search_history.append({
|
150 |
+
'query': query,
|
151 |
+
'timestamp': datetime.now().isoformat(),
|
152 |
+
'results': extracted_data
|
153 |
+
})
|
154 |
+
|
155 |
+
return json.dumps({
|
156 |
+
"status": "success",
|
157 |
+
"query": query,
|
158 |
+
"results": extracted_data
|
159 |
+
})
|
160 |
+
except Exception as e:
|
161 |
+
return json.dumps({
|
162 |
+
"status": "error",
|
163 |
+
"message": str(e)
|
164 |
+
})
|
165 |
|
166 |
def get_page_summary(self, url: str) -> str:
|
167 |
+
try:
|
168 |
+
visit_result = json.loads(self.browser_agent(url))
|
169 |
+
if visit_result['status'] != 'success':
|
170 |
+
return json.dumps(visit_result)
|
171 |
+
|
172 |
+
content = json.loads(self.extractor_agent(self.browser_agent.current_page['content']))
|
173 |
+
return json.dumps({
|
174 |
+
"status": "success",
|
175 |
+
"url": url,
|
176 |
+
"title": content['title'],
|
177 |
+
"summary": ' '.join(content['text'].split()[:100]) + '...'
|
178 |
+
})
|
179 |
+
except Exception as e:
|
180 |
+
return json.dumps({
|
181 |
+
"status": "error",
|
182 |
+
"message": str(e)
|
183 |
})
|
|
|
|
|
184 |
|
185 |
|
186 |
|