File size: 2,520 Bytes
e62c239
 
 
 
 
 
 
 
 
 
 
 
a8853dd
e62c239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
            }