Spaces:
Sleeping
Sleeping
| #Building and Integrating Tools for Your Agent | |
| #---------------------------------# | |
| # Give Your Agent Access to the Web | |
| #---------------------------------# | |
| from smolagents import DuckDuckGoSearchTool | |
| from typing import List | |
| #Initalize the DuckDuckgo search tool | |
| search_tool = DuckDuckGoSearchTool() | |
| #Exsample usage: | |
| results = search_tool("Who's the current president of France?") | |
| print(results) | |
| # Expected output: The current President of France in Emmanuel Macron. | |
| #-----------------------------------------------------------------------------------------# | |
| # Creating a Custom Tool that can be used to get the latest news about a specific topic. | |
| #-----------------------------------------------------------------------------------------# | |
| from newsapi import NewsApiClient | |
| class GetLatestNewsTool(Tool): | |
| name="Latest_news" | |
| description="""Fetch the latest breaking headline news worldwide. supports filtering by keyword, country, category, or specific sources. | |
| Supports filtering by keyword, country, category, or specific sources. | |
| **Note:** you cannot use 'sources' together with 'country' or 'category'; | |
| choose either sources OR country/category filters. | |
| """ | |
| inputs = { | |
| "Query": { | |
| "type": "string", | |
| "description": "keywords or phrase to search for in headlines." | |
| }, | |
| "Country": { | |
| "type": "string", | |
| "descripton": "2-letter country code (e.g., 'us', 'gb'). optional", | |
| "required": False | |
| }, | |
| "category": { | |
| "type": "string", | |
| "description": "News category (e.g, 'buisness', 'sports'). optional", | |
| "required": False | |
| }, | |
| "sources": { | |
| "type": "string", | |
| "description": "Comma-seperated list of news source ID'S to get headliens from. Optional", | |
| "required": False | |
| } | |
| } | |
| output = { | |
| "articles": { | |
| "type": "list", | |
| "description": "List of matching news articles. Each article contains: " | |
| "`source` (ID and name), `author`, `title`, `description`," | |
| "`url`, `urlToImage`, `PublishedAt`, and `content`." | |
| } | |
| } | |
| def __init__(self, api_key): | |
| self.newsapi = NewsApiClient(api_key=api_key) | |
| def run(self, Query=None, Country=None, Category=None, sources= None): | |
| """ | |
| Run the tool: Call NewsApi with the provided filters. | |
| """ | |
| if sources and (Country or Category): | |
| return "You cannot use `sources` together with 'country' or 'category'" | |
| response = self.newsapi.get_top_headlines( | |
| q=Query, | |
| country=Country, | |
| category=Category, | |
| sources=sources | |
| ) | |
| return response | |
| #------------------------------------------------------------------------------# | |
| # Creating a Custom Tool for Weather Information to Schedule the Fireworks | |
| #------------------------------------------------------------------------------# | |
| from smolagents import Tool | |
| import random | |
| 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} | |
| ] | |
| #Randomaly select a weather condition | |
| data = random.choice(weather_conditions) | |
| return f"Weather in {location}: {data['condition']}, {data['temp_c']}°C" | |
| #Initalize the tool | |
| weather_info_tool = weatherinfoTool() | |
| #--------------------------------------------------------# | |
| # Creating a Hub Stats Tool for Influential AI Builders | |
| #--------------------------------------------------------# | |
| from smolagents import Tool | |
| from huggingface_hub import list_models | |
| 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"The most downloaded model by {author} is {model.id} with {model.downloads:,} downloads" | |
| else: | |
| return f"No models found for author: {author}." | |
| except Exception as e: | |
| print(f"Error fetching model for {author}: {str(e)}") | |
| #Initalize the tool | |
| hub_stats_tool = HubStatsTool() | |
| #Exsample usage | |
| print(hub_stats_tool("facebook")) | |
| #Expected output: The most downloaded model by facebook is facebook/esmfold_v1 with 12,544,550 downloads. | |
| #--------------------------------------------------------# | |
| # Integrating Tools with Alfred | |
| #--------------------------------------------------------# | |
| from smolagents import CodeAgent, InferenceClientModel | |
| model = InferenceClientModel() | |
| alfred = CodeAgent( | |
| tools=[search_tool, weather_info_tool, hub_stats_tool,GetLatestNewsTool()], | |
| model=model | |
| ) | |
| #Exsample query Alfred might recieve during the gala | |
| response = alfred.run("what is facebook and what's their most popular model?") | |
| print("🎩 Alfred's Response:") | |
| print(response) | |
| #Expected output: 🎩 Alfred's Response: Facebook is a social networking website where users can connect, share information, and interact with others. The most downloaded model by Facebook on the Hugging Face Hub is ESMFold_v1. | |
| #--------------------------------------------------------# | |
| # Conclusion | |
| #--------------------------------------------------------# | |
| #By integrating these tools, Alfred is now equipped to handle a variety of tasks, from web searches to weather updates and model statistics. This ensures he remains the most informed and engaging host at the gala. | |