First_agent_template / tools /get_current_time
ff112's picture
created new tool get_current_time
f8fca49 verified
from typing import Any, Optional
from smolagents.tools import Tool
import datetime
import re # 're' is in your allowed libraries
class GetCurrentTimeTool(Tool):
name = "get_current_time"
description = "Gets the current time for a given timezone. Provide timezone as a UTC offset (e.g., '+05:00', '-03:30', 'Z' for UTC) or 'UTC'."
inputs = {'timezone': {'type': 'string', 'description': 'The timezone for which to get the current time (e.g., "+05:00", "-03:30", "UTC").'}}
output_type = "string"
def forward(self, timezone: str) -> str:
try:
# Handle UTC explicitly
if timezone.upper() == "UTC" or timezone.upper() == "Z":
# Get current UTC time and set its timezone info
now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
return now.strftime("%Y-%m-%d %H:%M:%S %Z%z")
# Try to parse as a fixed offset (e.g., +HH:MM or -HH:MM)
# Using regex to extract sign, hours, and minutes from the offset string
match = re.match(r"([+-])(\d{2}):(\d{2})$", timezone)
if match:
sign = 1 if match.group(1) == '+' else -1
hours = int(match.group(2))
minutes = int(match.group(3))
# Create a timedelta object for the offset
offset_delta = datetime.timedelta(hours=sign * hours, minutes=sign * minutes)
# Create a timezone object with the calculated offset
tz_info = datetime.timezone(offset_delta)
# Get the current time in that specific timezone
now = datetime.datetime.now(tz_info)
return now.strftime("%Y-%m-%d %H:%M:%S %Z%z")
else:
# If the format doesn't match, return an error
return f"Error: Invalid timezone format '{timezone}'. Please provide a UTC offset (e.g., '+05:00', '-03:30', 'Z' for UTC) or 'UTC'."
except Exception as e:
# Catch any other unexpected errors
return f"An unexpected error occurred: {str(e)}"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.is_initialized = False # This can be used to track if the tool has been initialized