Spaces:
Sleeping
Sleeping
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()
|