Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -22,6 +22,9 @@ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
|
|
22 |
|
23 |
# --- Basic Agent Definition ---
|
24 |
|
|
|
|
|
|
|
25 |
class BasicAgent:
|
26 |
def __init__(self):
|
27 |
print("BasicAgent initialized.")
|
@@ -29,30 +32,85 @@ class BasicAgent:
|
|
29 |
def __call__(self, question: str) -> str:
|
30 |
print(f"Agent received question: {question[:50]}...")
|
31 |
answer = self.basic_search(question)
|
32 |
-
print(f"Answer: {answer}")
|
33 |
return answer
|
34 |
|
35 |
def basic_search(self, query):
|
36 |
try:
|
37 |
-
#
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
-
# Format the results
|
41 |
if not results:
|
42 |
-
return "No results found"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
-
|
45 |
-
for i, result in enumerate(results, 1):
|
46 |
-
formatted_results.append(
|
47 |
-
f"{i}. {result['title']}\n"
|
48 |
-
f" {result['link']}\n"
|
49 |
-
f" {result['body']}"
|
50 |
-
)
|
51 |
|
52 |
-
return
|
53 |
|
|
|
|
|
54 |
except Exception as e:
|
55 |
-
return f"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
|
57 |
|
58 |
|
|
|
22 |
|
23 |
# --- Basic Agent Definition ---
|
24 |
|
25 |
+
import requests
|
26 |
+
from bs4 import BeautifulSoup
|
27 |
+
|
28 |
class BasicAgent:
|
29 |
def __init__(self):
|
30 |
print("BasicAgent initialized.")
|
|
|
32 |
def __call__(self, question: str) -> str:
|
33 |
print(f"Agent received question: {question[:50]}...")
|
34 |
answer = self.basic_search(question)
|
35 |
+
print(f"Answer: {answer[:200]}...") # Truncate long answers
|
36 |
return answer
|
37 |
|
38 |
def basic_search(self, query):
|
39 |
try:
|
40 |
+
# DuckDuckGo search URL
|
41 |
+
url = "https://html.duckduckgo.com/html/"
|
42 |
+
|
43 |
+
# Headers to mimic a browser request
|
44 |
+
headers = {
|
45 |
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0',
|
46 |
+
'Accept': 'text/html,application/xhtml+xml',
|
47 |
+
'Accept-Language': 'en-US,en;q=0.5',
|
48 |
+
}
|
49 |
+
|
50 |
+
# Search parameters
|
51 |
+
params = {
|
52 |
+
'q': query,
|
53 |
+
'kl': 'us-en'
|
54 |
+
}
|
55 |
+
|
56 |
+
# Make the POST request
|
57 |
+
response = requests.post(url, headers=headers, data=params)
|
58 |
+
response.raise_for_status() # Raise exception for bad status codes
|
59 |
+
|
60 |
+
# Parse the HTML response
|
61 |
+
soup = BeautifulSoup(response.text, 'html.parser')
|
62 |
+
|
63 |
+
# Find all search results
|
64 |
+
results = soup.find_all('div', class_='result')
|
65 |
|
|
|
66 |
if not results:
|
67 |
+
return "No results found for your query."
|
68 |
+
|
69 |
+
# Prepare the answer with top 3 results
|
70 |
+
answer = "Here are the top search results:\n\n"
|
71 |
+
for i, result in enumerate(results[:3], 1): # Limit to 3 results
|
72 |
+
title = result.find('a', class_='result__a').get_text(strip=True)
|
73 |
+
link = result.find('a', class_='result__a')['href']
|
74 |
+
snippet = result.find('a', class_='result__snippet').get_text(strip=True) if result.find('a', class_='result__snippet') else "No description available"
|
75 |
|
76 |
+
answer += f"{i}. {title}\n URL: {link}\n Description: {snippet}\n\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
|
78 |
+
return answer
|
79 |
|
80 |
+
except requests.exceptions.RequestException as e:
|
81 |
+
return f"Failed to complete the search request: {str(e)}"
|
82 |
except Exception as e:
|
83 |
+
return f"An unexpected error occurred: {str(e)}"
|
84 |
+
|
85 |
+
# Example usage
|
86 |
+
if __name__ == "__main__":
|
87 |
+
agent = BasicAgent()
|
88 |
+
|
89 |
+
# Test queries
|
90 |
+
test_queries = [
|
91 |
+
"What is Python programming?",
|
92 |
+
"Latest Python version",
|
93 |
+
"How to learn machine learning"
|
94 |
+
]
|
95 |
+
|
96 |
+
for query in test_queries:
|
97 |
+
print("\n" + "="*50)
|
98 |
+
print(f"Testing query: {query}")
|
99 |
+
result = agent(query)
|
100 |
+
print("\nSearch Result:")
|
101 |
+
print(result)
|
102 |
+
|
103 |
+
# Interactive mode
|
104 |
+
print("\n" + "="*50)
|
105 |
+
print("Interactive mode (type 'quit' to exit)")
|
106 |
+
while True:
|
107 |
+
user_query = input("\nEnter your search query: ")
|
108 |
+
if user_query.lower() == 'quit':
|
109 |
+
break
|
110 |
+
print("\n" + "="*50)
|
111 |
+
result = agent(user_query)
|
112 |
+
print("\nSearch Result:")
|
113 |
+
print(result)
|
114 |
|
115 |
|
116 |
|