First_agent_template / tools /get_monthly_stats_tool.py
TomMoeras's picture
Add nullable option for month, year, user_name, and user_info inputs in tools
38d3eed
from typing import Any, Dict, Optional
from smolagents.tools import Tool
from tools.car_sharing_db import CarSharingDB
class GetMonthlyStatsTool(Tool):
name = "get_monthly_stats"
description = "Retrieves monthly car sharing statistics for a specific user."
inputs = {
'user_name': {'type': 'string', 'description': 'Name of the user to get statistics for'},
'month': {'type': 'integer', 'description': 'Month number (1-12). If not provided, current month is used.', 'nullable': True},
'year': {'type': 'integer', 'description': 'Year (e.g., 2023). If not provided, current year is used.', 'nullable': True}
}
output_type = "any"
def __init__(self, db_path="car_sharing.db"):
self.db = CarSharingDB(db_path)
self.is_initialized = True
def forward(self, user_name: str, month: Optional[int] = None, year: Optional[int] = None) -> Dict[str, Any]:
"""
Get monthly car sharing statistics for a user.
Args:
user_name: Name of the user to get statistics for
month: Month number (1-12). If not provided, current month is used.
year: Year (e.g., 2023). If not provided, current year is used.
Returns:
A dictionary with monthly statistics
"""
try:
# Convert month and year to integers if provided
if month is not None:
month = int(month)
if month < 1 or month > 12:
return {
"success": False,
"error": "Month must be between 1 and 12",
"total_km": 0
}
if year is not None:
year = int(year)
# Get monthly statistics
stats = self.db.get_monthly_stats(user_name, month, year)
# Add success flag
stats["success"] = True
return stats
except ValueError:
return {
"success": False,
"error": "Month and year must be integers",
"total_km": 0
}
except Exception as e:
return {
"success": False,
"error": str(e),
"total_km": 0
}