File size: 3,100 Bytes
8d02cf2
9b5b26a
 
 
c19d193
6aae614
9b5b26a
bf496b6
9b5b26a
a59de76
bf496b6
a59de76
 
9b5b26a
ca49b1d
 
a59de76
9b5b26a
ca49b1d
 
9b5b26a
ca49b1d
a59de76
 
 
 
ca49b1d
 
 
 
b5c715e
ca49b1d
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
a59de76
9b5b26a
 
 
a59de76
9b5b26a
 
 
 
 
 
a59de76
9b5b26a
 
8c01ffb
a59de76
6aae614
ae7a494
a59de76
e121372
a59de76
 
 
 
13d500a
8c01ffb
a59de76
9b5b26a
8c01ffb
a59de76
861422e
 
a59de76
 
8c01ffb
8fe992b
a59de76
 
 
 
 
 
 
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
a59de76
 
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
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
import os

# 🔑 Define your API key here
OPENWEATHER_API_KEY = os.environ.get("Weatherapi") # Replace with your real OpenWeatherMap API key

# 🌤️ Weather Tool
@tool
def get_weather(city: str, country_code: str = "US") -> str:
    """Fetches current weather information for a given city and country.

    Args:
        city: The name of the city (e.g., 'New York').
        country_code: The 2-letter country code (default is 'US').
    """
    try:
        url = (
            f"http://api.openweathermap.org/data/2.5/weather?"
            f"q={city},{country_code}&appid={OPENWEATHER_API_KEY}&units=metric"
        )
        response = requests.get(url)
        data = response.json()

        if response.status_code != 200:
            return f"Failed to fetch weather: {data.get('message', 'Unknown error')}"

        weather_description = data["weather"][0]["description"]
        temperature = data["main"]["temp"]
        feels_like = data["main"]["feels_like"]
        humidity = data["main"]["humidity"]

        return (
            f"Current weather in {city}, {country_code}:\n"
            f"- Description: {weather_description}\n"
            f"- Temperature: {temperature}°C (feels like {feels_like}°C)\n"
            f"- Humidity: {humidity}%"
        )
    except Exception as e:
        return f"An error occurred: {str(e)}"

# 🕒 Timezone Tool
@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:
        tz = pytz.timezone(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 tool (required)
final_answer = FinalAnswerTool()

# 🤖 Hugging Face model
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

# 🎨 Image generation tool
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

# 📑 Load prompt templates
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

# 🧩 Build agent with all tools
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        get_weather,
        get_current_time_in_timezone,
        image_generation_tool,
        DuckDuckGoSearchTool(),  # <== Included as you requested
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

# 🖼️ Launch Gradio UI
GradioUI(agent).launch()