File size: 3,814 Bytes
ae87082
4b13f38
 
 
e33a27b
 
 
4b13f38
e33a27b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4b13f38
 
ae87082
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4b13f38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from smolagents import DuckDuckGoSearchTool
from smolagents import Tool
import random
from huggingface_hub import list_models
import requests
from bs4 import BeautifulSoup
import openpyxl

class WikipediaTool(Tool):
    name = "wikipedia_api"
    description = "Returns the contents of a wikipedia article through a direct API call."
    inputs = {
        "title": {
            "type": "string",
            "description": "The title of the wikipedia article to retrieve."
        }
    }
    output_type = "string"

    def forward(self, question: str):
        search_tool = DuckDuckGoSearchTool()
        result = search_tool(question)
        return result

class ExcelTool(Tool):
    name = "read_excel"
    description = "Returns the contents of an Excel file as a Pandas dataframe."
    inputs = {
        "filename": {
            "type": "string",
            "description": "The name of the Excel file to read."
        }
    }
    output_type = "string"

    def forward(self, question: str):
        search_tool = DuckDuckGoSearchTool()
        result = search_tool(question)
        return result

class WebscraperTool(Tool):
    name = "webscraper"
    description = "Returns the page's html content from the input url."
    inputs = {
        "url": {
            "type": "string",
            "description": "The link of the web page to scrape."
        }
    }
    output_type = "string"

    def forward(self, question: str):
        search_tool = DuckDuckGoSearchTool()
        result = search_tool(question)
        return result

# Initialize the DuckDuckGo search tool
class InternetSearchTool(Tool):
    name = "internet_search"
    description = "Searches the internet for the answer to any question input. Returns a long batch of textual information related to the query."
    inputs = {
        "question": {
            "type": "string",
            "description": "The question to retrieve an answer for."
        }
    }
    output_type = "string"

    def forward(self, question: str):
        search_tool = DuckDuckGoSearchTool()
        result = search_tool(question)
        return result


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}
        ]
        # Randomly select a weather condition
        data = random.choice(weather_conditions)
        return f"Weather in {location}: {data['condition']}, {data['temp_c']}°C"

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:
            # List models from the specified author, sorted by downloads
            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:
            return f"Error fetching models for {author}: {str(e)}"