dlaima's picture
Update tools.py
a781809 verified
from smolagents import DuckDuckGoSearchTool
from smolagents import Tool
import random
from huggingface_hub import list_models
import requests
# --------- Weather Info Tool ---------
class WeatherInfoTool(Tool):
name = "weather_info"
description = "Fetches dummy weather information for a given location."
inputs = {
"location": {
"type": "string",
"description": "The location to get weather information for."
}
}
output_type = "string"
def forward(self, location: str):
# Dummy weather data
weather_conditions = [
{"condition": "Rainy", "temp_c": 15},
{"condition": "Clear", "temp_c": 25},
{"condition": "Windy", "temp_c": 20}
]
data = random.choice(weather_conditions)
return f"🌦️ Weather in **{location}**: {data['condition']}, {data['temp_c']}°C"
# --------- Hugging Face Hub Stats Tool ---------
class HubStatsTool(Tool):
name = "hub_stats"
description = "Fetches the most downloaded model from a specific author on the Hugging Face Hub."
inputs = {
"author": {
"type": "string",
"description": "The username of the model author/organization to find models from."
}
}
output_type = "string"
def forward(self, author: str):
try:
models = list(list_models(author=author, sort="downloads", direction=-1, limit=1))
if models:
model = models[0]
return (
f"📊 Most downloaded model by **{author}**:\n"
f"**Model ID**: {model.id}\n"
f"**Downloads**: {model.downloads:,}\n"
f"[View on Hugging Face](https://huggingface.co/{model.id})"
)
else:
return f"No models found for author **{author}**."
except Exception as e:
return f"⚠️ Error fetching models for **{author}**: {str(e)}"
# --------- News Search Tool using ContextualWeb API ---------
class NewsSearchTool(Tool):
name = "news_search"
description = "Fetches the latest news headlines about a specific topic using the ContextualWeb API."
inputs = {
"topic": {
"type": "string",
"description": "The topic to search for in recent news."
}
}
output_type = "string"
def __init__(self, api_key: str):
self.api_key = api_key
def forward(self, topic: str):
url = "https://contextualwebsearch-websearch-v1.p.rapidapi.com/api/Search/NewsSearchAPI"
params = {
"q": topic,
"pageNumber": "1",
"pageSize": "3",
"autoCorrect": "true"
}
headers = {
"X-RapidAPI-Key": self.api_key,
"X-RapidAPI-Host": "contextualwebsearch-websearch-v1.p.rapidapi.com"
}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
articles = response.json().get("value", [])
if not articles:
return f"No news articles found for topic **{topic}**."
return "\n\n".join(
f"📰 **{a['title']}**\n{a['description'] or '_No description provided_'}\n"
f"Source: {a['provider']['name']}\n[Read more]({a['url']})"
for a in articles
)
except Exception as e:
return f"⚠️ Error retrieving news for **{topic}**: {str(e)}"