File size: 4,343 Bytes
ae87082
4b13f38
 
 
e33a27b
 
 
aaa8467
8c05954
4b13f38
4e8d51c
 
 
 
71c08fb
4e8d51c
 
 
 
 
 
71c08fb
 
 
4e8d51c
e33a27b
 
 
 
 
 
 
 
 
 
 
aaa8467
71c08fb
 
 
 
 
 
 
e33a27b
 
 
 
 
 
 
 
 
 
 
 
71c08fb
 
 
 
 
 
 
e33a27b
 
 
 
 
 
 
 
 
 
 
 
aaa8467
71c08fb
 
 
 
 
 
 
 
 
 
 
4b13f38
 
ae87082
 
 
 
 
 
 
 
 
 
 
 
71c08fb
 
 
 
 
 
 
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
122
123
124
125
126
127
128
129
130
131
132
133
134
from smolagents import DuckDuckGoSearchTool
from smolagents import Tool
import random
from huggingface_hub import list_models
import requests
from bs4 import BeautifulSoup
import openpyxl
import wikipedia
import pandas as pd

class MediaTool(Tool):
    name = "media_tool"
    description = "Used for deciphering video and audio files."
    inputs = {
        "filename": {
            "type": "string",
            "description": "The name of the media file to transcribe."
        }
    }
    output_type = "string"

    def forward(self, filename: str):
        print(f"called MediaTool with {filename}")
        return "This tool hasn't been implemented yet. Please return 0 if the task cannot be solved without knowing the contents of this file."

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, title: str):
        print(f"called WikipediaTool with {title}")
        try:
            page = wikipedia.page(title)
            content = page.content[:3000]
            return content
        except Exception as e:
            return f"ERROR: {e}"

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, filename: str):
        print(f"called ExcelTool with {filename}")
        try:
            df = pd.read_excel(filename, engine = "openpyxl")
            return df
        except Exception as e:
            return f"ERROR: {e}"

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, url: str):
        print(f"called WebscraperTool with {url}")
        try:
            response = requests.get(url, stream=True)
            if response.status_code == 200:
                soup = BeautifulSoup(response.content, 'html.parser')
                html_text = soup.get_text()
                return html_text
            else:
                return "Website cannot be reached."
        except Exception as e:
            return f"ERROR: {e}"

# 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):
        print(f"called InternetSearchTool with {question}")
        try:
            search_tool = DuckDuckGoSearchTool()
            result = search_tool(question)
            return result
        except Exception as e:
            return f"ERROR: {e}"

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)}"