File size: 3,038 Bytes
5a92f27
9b5b26a
 
 
c19d193
5a92f27
 
6aae614
65dd1a7
9b5b26a
5a92f27
 
d76d886
9b5b26a
 
5a92f27
 
9b5b26a
 
 
 
 
 
 
 
65dd1a7
8c01ffb
5a92f27
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
5a92f27
 
 
 
 
 
65dd1a7
5a92f27
 
 
 
65dd1a7
5a92f27
 
 
 
 
d76d886
5a92f27
 
 
 
 
 
 
 
 
 
 
 
 
d76d886
5a92f27
65dd1a7
d76d886
5a92f27
 
65dd1a7
5a92f27
 
 
 
 
 
 
 
 
65dd1a7
 
5a92f27
 
 
 
 
 
65dd1a7
 
 
 
 
 
 
 
d76d886
5a92f27
 
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
import os
import datetime
import requests
import pytz
import yaml
from dotenv import load_dotenv
from smolagents import CodeAgent, HfApiModel, load_tool, tool
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

# Load environment variables from .env
load_dotenv()

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """
    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)}"

@tool
def get_realtime_weather(location: str) -> str:
    """
    Fetches current weather for a given location.
    Args:
        location: City name (and optional country code), e.g. "Montreal,CA" or "Paris,FR".
    Returns:
        A human-readable summary of temperature, conditions, humidity, etc.
    """
    api_key = os.getenv("OPENWEATHER_API_KEY")
    if not api_key:
        return "Error: OPENWEATHER_API_KEY not set in environment."

    params = {
        "q": location,
        "appid": api_key,
        "units": "metric",  # use "imperial" for °F
        "lang": "en"
    }

    try:
        resp = requests.get("https://api.openweathermap.org/data/2.5/weather", params=params)
        resp.raise_for_status()
        data = resp.json()

        weather = data["weather"][0]["description"].capitalize()
        temp = data["main"]["temp"]
        feels = data["main"]["feels_like"]
        humidity = data["main"]["humidity"]
        wind = data["wind"]["speed"]

        return (
            f"Weather in {data['name']}: {weather}. "
            f"🌡️ Temp: {temp}°C (feels like {feels}°C), "
            f"💧 Humidity: {humidity}%, "
            f"💨 Wind: {wind} m/s."
        )
    except requests.HTTPError as e:
        return f"HTTP error fetching weather for '{location}': {e}"
    except Exception as e:
        return f"Error fetching weather for '{location}': {e}"

# Final answer tool
final_answer = FinalAnswerTool()

# Load other tools
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)

# Model setup
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
)

# Agent configuration
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        get_current_time_in_timezone,
        get_realtime_weather,
        image_generation_tool,
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

# Launch the Gradio UI
GradioUI(agent).launch()