First_agent_template / tools /record_trip_tool.py
TomMoeras's picture
Change output_type from "dict" to "any" in multiple tools for improved flexibility
a8853dd
from typing import Any, Dict
from smolagents.tools import Tool
from tools.car_sharing_db import CarSharingDB
class RecordTripTool(Tool):
name = "record_trip"
description = "Records a car sharing trip with starting and ending kilometer readings."
inputs = {
'user_name': {'type': 'string', 'description': 'Name of the user who made the trip'},
'start_km': {'type': 'integer', 'description': 'Starting kilometer reading of the vehicle'},
'end_km': {'type': 'integer', 'description': 'Ending kilometer reading of the vehicle'}
}
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, start_km: int, end_km: int) -> Dict[str, Any]:
"""
Record a car sharing trip in the database.
Args:
user_name: Name of the user who made the trip
start_km: Starting kilometer reading
end_km: Ending kilometer reading
Returns:
A dictionary with the result of the operation
"""
try:
# Ensure kilometers are integers
start_km = int(start_km)
end_km = int(end_km)
# Validate input
if end_km <= start_km:
return {
"success": False,
"error": "End kilometer reading must be greater than start kilometer reading",
"km_traveled": 0
}
# Record the trip
success = self.db.record_trip(user_name, start_km, end_km)
if success:
return {
"success": True,
"user_name": user_name,
"start_km": start_km,
"end_km": end_km,
"km_traveled": end_km - start_km
}
else:
return {
"success": False,
"error": "Failed to record trip",
"km_traveled": 0
}
except ValueError:
return {
"success": False,
"error": "Kilometer readings must be integers",
"km_traveled": 0
}
except Exception as e:
return {
"success": False,
"error": str(e),
"km_traveled": 0
}