File size: 3,847 Bytes
4974ecd
9b5b26a
 
 
c19d193
4974ecd
9b5b26a
 
4974ecd
9b5b26a
4974ecd
 
 
9b5b26a
4974ecd
 
9b5b26a
4974ecd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
 
 
 
4974ecd
9b5b26a
 
 
 
 
 
4974ecd
9b5b26a
 
4974ecd
9b5b26a
 
 
8c01ffb
6aae614
ae7a494
 
4974ecd
e121372
4974ecd
 
 
 
13d500a
8c01ffb
9b5b26a
 
8c01ffb
861422e
 
4974ecd
8c01ffb
8fe992b
4974ecd
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
8c01ffb
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
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool 
from Gradio_UI import GradioUI

# Updated with a useful function that provides information about a location
@tool
def my_custom_tool(location: str, details_required: str = "general") -> str:
    """A tool that fetches information about a specified location.
    
    Args:
        location: The name of the location to get information about
        details_required: The type of information required (general, weather, population)
    """
    try:
        # This is a simple implementation - in a real scenario you might use an API
        if details_required.lower() == "weather":
            # Simulate a weather API call
            weather_conditions = ["sunny", "cloudy", "rainy", "snowy", "windy"]
            import random
            condition = random.choice(weather_conditions)
            temp = random.randint(0, 35)  # Celsius
            return f"Current weather in {location}: {condition}, {temp}°C"
        
        elif details_required.lower() == "population":
            # Simulate population data lookup
            # In real implementation, you would fetch from a database or API
            populations = {
                "new york": "8.4 million",
                "tokyo": "14 million",
                "london": "9 million",
                "paris": "2.1 million",
                "sydney": "5.3 million"
            }
            
            location_lower = location.lower()
            if location_lower in populations:
                return f"The population of {location} is approximately {populations[location_lower]}."
            else:
                return f"Population data for {location} not found in the database."
        
        else:  # general information
            return f"Here is general information about {location}. This is a placeholder - in a real implementation, this would fetch actual data about the location."
            
    except Exception as e:
        return f"Error fetching information for '{location}': {str(e)}"

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that fetches the current local time in a specified timezone.
    
    Args:
        timezone: A string representing a valid timezone (e.g., 'America/New_York').
    """
    try:
        # Create timezone object
        tz = pytz.timezone(timezone)
        
        # Get current time in that timezone
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        
        return f"The current local time in {timezone} is: {local_time}"
    except Exception as e:
        return f"Error fetching time for timezone '{timezone}': {str(e)}"

final_answer = FinalAnswerTool()

# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud'
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',  # it is possible that this model may be overloaded
    custom_role_conversions=None,
)

# Import tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

agent = CodeAgent(
    model=model,
    tools=[final_answer, my_custom_tool, get_current_time_in_timezone, image_generation_tool],  # add your tools here (don't remove final answer)
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

GradioUI(agent).launch()