File size: 4,019 Bytes
f61a1f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c5cfc74
 
 
 
 
 
 
93b3369
c5cfc74
 
050a23d
 
c5cfc74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93b3369
c5cfc74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93b3369
c5cfc74
fa76d9b
75c6826
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29640e3
93b3369
75c6826
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
# Step 2: Create the Retriever Tool
# Now, let’s create a custom tool that Alfred can use to search through our guest information.

# We will use the BM25Retriever from the langchain_community.retrievers module to create a retriever tool.


from smolagents import Tool
from langchain_community.retrievers import BM25Retriever

class GuestInfoRetrieverTool(Tool):
    name = "guest_info_retriever"
    description = "Retrieves detailed information about gala guests based on their name or relation."
    inputs = {
        "query": {
            "type": "string",
            "description": "The name or relation of the guest you want information about."
        }
    }
    output_type = "string"

    def __init__(self, docs):
        self.is_initialized = False
        self.retriever = BM25Retriever.from_documents(docs)

    def forward(self, query: str):
        results = self.retriever.get_relevant_documents(query)
        if results:
            return "\n\n".join([doc.page_content for doc in results[:3]])
        else:
            return "No matching guest information found."




# Give Your Agent Access to the Web
from smolagents import DuckDuckGoSearchTool

# Initialize the DuckDuckGo search tool
# search_tool = DuckDuckGoSearchTool()

# Example usage
# results = search_tool("Who's the current President of France?")
# print(results)


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

# Initialize 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:
            # 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)}"

# Initialize the tool
# hub_stats_tool = HubStatsTool()





class LatestNewsTool(Tool):
    name = "latest_news_tool"
    description = "Fetches the latest news related to a specific topic using DuckDuckGoSearchTool"
    inputs = {
        "topic":{
            "type":"string",
            "description":"The topic for which the latest news is needed"
        }
    }
    output_type = "string"

    def __init__(self):
        self.search_tool = DuckDuckGoSearchTool()

    def forward(self, topic: str):
        results = self.search_tool.forward(f"{topic} latest news")
        return results

# Intializing the tool
# latest_news_tool = LatestNewsTool()