Spaces:
Runtime error
Runtime error
Fix
Browse files
app.py
CHANGED
@@ -19,10 +19,10 @@ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
|
|
19 |
@tool
|
20 |
def smart_web_search(query: str) -> str:
|
21 |
"""Smart web search with Serper API and Wikipedia fallback.
|
22 |
-
|
23 |
Args:
|
24 |
query (str): The search query to execute
|
25 |
-
|
26 |
Returns:
|
27 |
str: Search results from Serper API or Wikipedia
|
28 |
"""
|
@@ -30,12 +30,32 @@ def smart_web_search(query: str) -> str:
|
|
30 |
time.sleep(random.uniform(1, 3))
|
31 |
serper_key = os.getenv("SERPER_API_KEY")
|
32 |
if serper_key:
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
return get_detailed_wikipedia(query)
|
35 |
except Exception as e:
|
36 |
return f"Search error: {str(e)}"
|
37 |
|
38 |
|
|
|
39 |
@tool
|
40 |
def extract_youtube_details(url: str) -> str:
|
41 |
"""Extract details from YouTube videos."""
|
|
|
19 |
@tool
|
20 |
def smart_web_search(query: str) -> str:
|
21 |
"""Smart web search with Serper API and Wikipedia fallback.
|
22 |
+
|
23 |
Args:
|
24 |
query (str): The search query to execute
|
25 |
+
|
26 |
Returns:
|
27 |
str: Search results from Serper API or Wikipedia
|
28 |
"""
|
|
|
30 |
time.sleep(random.uniform(1, 3))
|
31 |
serper_key = os.getenv("SERPER_API_KEY")
|
32 |
if serper_key:
|
33 |
+
url = "https://google.serper.dev/search"
|
34 |
+
payload = json.dumps({"q": query, "num": 5})
|
35 |
+
headers = {
|
36 |
+
'X-API-KEY': serper_key,
|
37 |
+
'Content-Type': 'application/json'
|
38 |
+
}
|
39 |
+
response = requests.post(url, headers=headers, data=payload, timeout=15)
|
40 |
+
if response.status_code == 200:
|
41 |
+
data = response.json()
|
42 |
+
results = []
|
43 |
+
if 'answerBox' in data:
|
44 |
+
results.append(f"ANSWER: {data['answerBox'].get('answer', '')}")
|
45 |
+
if 'knowledgeGraph' in data:
|
46 |
+
kg = data['knowledgeGraph']
|
47 |
+
results.append(f"INFO: {kg.get('title', '')} - {kg.get('description', '')}")
|
48 |
+
if 'organic' in data:
|
49 |
+
for item in data['organic'][:3]:
|
50 |
+
results.append(f"RESULT: {item.get('title', '')} - {item.get('snippet', '')}")
|
51 |
+
return "\n".join(results) if results else "No Serper results"
|
52 |
+
# If serper_key is not set or no results, fallback to Wikipedia
|
53 |
return get_detailed_wikipedia(query)
|
54 |
except Exception as e:
|
55 |
return f"Search error: {str(e)}"
|
56 |
|
57 |
|
58 |
+
|
59 |
@tool
|
60 |
def extract_youtube_details(url: str) -> str:
|
61 |
"""Extract details from YouTube videos."""
|