ZapataRoman's picture
Update app.py
313d833 verified
Raw History Blame Contribute Delete
4.61 kB
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
# Below is an example of a tool that does nothing. Amaze us with your creativity !
@tool
def convert_time_to_pacific(source_datetime: str, source_timezone: str) -> str:
"""Converts a date/time from any timezone to Pacific Time.
Args:
source_datetime: The date and time to convert. Use formats like '2026-07-06 15:00', '2026-07-06 3:00 PM', or '2026-07-06 3pm'.
source_timezone: The source timezone. Use an IANA timezone like 'America/New_York', 'Europe/London', or aliases like 'ET', 'CT', 'UTC'.
"""
try:
timezone_aliases = {
"pt": "America/Los_Angeles",
"pacific": "America/Los_Angeles",
"pst": "America/Los_Angeles",
"pdt": "America/Los_Angeles",
"mt": "America/Denver",
"mountain": "America/Denver",
"ct": "America/Chicago",
"central": "America/Chicago",
"et": "America/New_York",
"eastern": "America/New_York",
"est": "America/New_York",
"edt": "America/New_York",
"utc": "UTC",
"gmt": "GMT",
"london": "Europe/London",
"uk": "Europe/London",
"paris": "Europe/Paris",
"berlin": "Europe/Berlin",
"tokyo": "Asia/Tokyo",
"india": "Asia/Kolkata",
}
source_tz_name = timezone_aliases.get(
source_timezone.strip().lower(),
source_timezone.strip()
)
source_tz = pytz.timezone(source_tz_name)
pacific_tz = pytz.timezone("America/Los_Angeles")
cleaned_datetime = (
source_datetime
.strip()
.replace("T", " ")
.replace("pm", " PM")
.replace("am", " AM")
)
formats = [
"%Y-%m-%d %H:%M",
"%Y-%m-%d %H:%M:%S",
"%Y-%m-%d %I:%M %p",
"%Y-%m-%d %I %p",
]
parsed_datetime = None
for fmt in formats:
try:
parsed_datetime = datetime.datetime.strptime(cleaned_datetime, fmt)
break
except ValueError:
continue
if parsed_datetime is None:
return (
"Could not parse the datetime. "
"Use something like '2026-07-06 15:00' or '2026-07-06 3:00 PM'."
)
localized_datetime = source_tz.localize(parsed_datetime)
pacific_datetime = localized_datetime.astimezone(pacific_tz)
return (
f"{source_datetime} in {source_tz_name} is "
f"{pacific_datetime.strftime('%Y-%m-%d %I:%M %p %Z')}."
)
except Exception as e:
return f"Error converting time to Pacific Time: {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=[get_current_time_in_timezone, final_answer, convert_time_to_pacific], ## 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()