File size: 4,335 Bytes
313d55c
3f15f9d
d352aeb
 
36ee5a6
ca10f92
 
 
d352aeb
 
 
ec60faf
 
8fdb91b
 
 
 
d352aeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3f15f9d
60a3adf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from smolagents import DuckDuckGoSearchTool, VisitWebpageTool, FinalAnswerTool, GoogleSearchTool
from smolagents import Tool, tool
import random
from huggingface_hub import list_models
from smolagents.memory import ActionStep
from PIL import Image
import requests
from io import BytesIO


# Initialize the DuckDuckGo search tool
web_search = GoogleSearchTool()
# web_search = DuckDuckGoSearchTool() # not working

visit_webpage = VisitWebpageTool()

final_answer = FinalAnswerTool()

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


# @tool
# def search_item_ctrl_f(text: str, nth_result: int = 1) -> str:
#     """
#     Searches for text on the current page via Ctrl + F and jumps to the nth occurrence.
#     Args:
#         text: The text to search for
#         nth_result: Which occurrence to jump to (default: 1)
#     """
#     elements = driver.find_elements(By.XPATH, f"//*[contains(text(), '{text}')]")
#     if nth_result > len(elements):
#         raise Exception(f"Match n°{nth_result} not found (only {len(elements)} matches found)")
#     result = f"Found {len(elements)} matches for '{text}'."
#     elem = elements[nth_result - 1]
#     driver.execute_script("arguments[0].scrollIntoView(true);", elem)
#     result += f"Focused on element {nth_result} of {len(elements)}"
#     return result


# @tool
# def go_back() -> None:
#     """Goes back to previous page."""
#     driver.back()


# @tool
# def close_popups() -> str:
#     """
#     Closes any visible modal or pop-up on the page. Use this to dismiss pop-up windows! This does not work on cookie consent banners.
#     """
#     webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()


# def save_screenshot(step_log: ActionStep, agent: CodeAgent) -> None:
#     sleep(1.0)  # Let JavaScript animations happen before taking the screenshot
#     driver = helium.get_driver()
#     current_step = step_log.step_number
#     if driver is not None:
#         for step_logs in agent.logs:  # Remove previous screenshots from logs for lean processing
#             if isinstance(step_log, ActionStep) and step_log.step_number <= current_step - 2:
#                 step_logs.observations_images = None
#         png_bytes = driver.get_screenshot_as_png()
#         image = Image.open(BytesIO(png_bytes))
#         print(f"Captured a browser screenshot: {image.size} pixels")
#         step_log.observations_images = [image.copy()]  # Create a copy to ensure it persists, important!

#     # Update observations with current URL
#     url_info = f"Current url: {driver.current_url}"
#     step_log.observations = url_info if step_logs.observations is None else step_log.observations + "\n" + url_info
#     return