Spaces:
Sleeping
Sleeping
import requests | |
from bs4 import BeautifulSoup | |
def duckduckgo_search(query: str, num_results: int = 3) -> list: | |
""" | |
Perform a search using DuckDuckGo and return the results. | |
Args: | |
query: The search query string | |
num_results: Maximum number of results to return (default: 3) | |
Returns: | |
List of dictionaries containing search results with title, url, and snippet | |
""" | |
print(f"Performing DuckDuckGo search for: {query}") | |
try: | |
headers = { | |
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" | |
} | |
# Format the query for the URL | |
formatted_query = query.replace(' ', '+') | |
url = f"https://html.duckduckgo.com/html/?q={formatted_query}" | |
# Send the request | |
response = requests.get(url, headers=headers, timeout=10) | |
response.raise_for_status() | |
# Parse the HTML response | |
soup = BeautifulSoup(response.text, 'html.parser') | |
# Extract search results | |
results = [] | |
for result in soup.select('.result'): | |
title_elem = result.select_one('.result__title') | |
link_elem = result.select_one('.result__url') | |
snippet_elem = result.select_one('.result__snippet') | |
if title_elem and link_elem: | |
title = title_elem.get_text(strip=True) | |
url = link_elem.get('href') if link_elem.get('href') else link_elem.get_text(strip=True) | |
snippet = snippet_elem.get_text(strip=True) if snippet_elem else "" | |
results.append({ | |
"title": title, | |
"url": url, | |
"snippet": snippet | |
}) | |
if len(results) >= num_results: | |
break | |
print(f"Found {len(results)} results for query: {query}") | |
return results | |
except Exception as e: | |
print(f"Error during DuckDuckGo search: {e}") | |
return [] | |
# Dictionary mapping tool names to their functions | |
TOOLS_MAPPING = { | |
"duckduckgo_search": duckduckgo_search | |
} | |
# Tool definitions for LLM API | |
TOOLS_DEFINITION = [ | |
{ | |
"type": "function", | |
"function": { | |
"name": "duckduckgo_search", | |
"description": "Search the web using DuckDuckGo and return relevant results", | |
"parameters": { | |
"type": "object", | |
"properties": { | |
"query": { | |
"type": "string", | |
"description": "The search query string" | |
}, | |
"num_results": { | |
"type": "integer", | |
"description": "Maximum number of results to return", | |
"default": 5 | |
} | |
}, | |
"required": ["query"] | |
} | |
} | |
} | |
] |