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