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