File size: 5,171 Bytes
e62c239
 
 
 
 
 
 
 
 
 
38d3eed
 
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
from typing import Any, Dict, Optional
from smolagents.tools import Tool
import json
import os

class UserManagementTool(Tool):
    name = "user_management"
    description = "Manages user information for the car sharing system."
    inputs = {
        'action': {'type': 'string', 'description': 'The action to perform (get, set, list)'},
        'user_name': {'type': 'string', 'description': 'Name of the user', 'nullable': True},
        'user_info': {'type': 'any', 'description': 'User information to store (for set action)', 'nullable': True}
    }
    output_type = "any"

    def __init__(self, users_file="car_sharing_users.json"):
        self.is_initialized = True
        self.users_file = users_file
        self.users = self._load_users()
        self.current_user = None
    
    def _load_users(self) -> Dict[str, Dict[str, Any]]:
        """Load users from file or create an empty dict if file doesn't exist."""
        if os.path.exists(self.users_file):
            try:
                with open(self.users_file, 'r') as f:
                    return json.load(f)
            except Exception:
                return {}
        return {}
    
    def _save_users(self) -> bool:
        """Save users to file."""
        try:
            with open(self.users_file, 'w') as f:
                json.dump(self.users, f, indent=2)
            return True
        except Exception:
            return False
    
    def forward(self, action: str, user_name: Optional[str] = None, user_info: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
        """
        Manage user information.
        
        Args:
            action: The action to perform (get, set, list, set_current)
            user_name: Name of the user
            user_info: User information to store (for set action)
            
        Returns:
            A dictionary with the result of the operation
        """
        try:
            action = action.lower()
            
            if action == "list":
                # List all users
                return {
                    "success": True,
                    "action": "list",
                    "users": list(self.users.keys()),
                    "current_user": self.current_user
                }
            
            elif action == "get":
                # Get user info
                if not user_name:
                    return {
                        "success": False,
                        "action": "get",
                        "error": "User name is required for 'get' action"
                    }
                
                if user_name not in self.users:
                    return {
                        "success": False,
                        "action": "get",
                        "error": f"User '{user_name}' not found"
                    }
                
                return {
                    "success": True,
                    "action": "get",
                    "user_name": user_name,
                    "user_info": self.users[user_name]
                }
            
            elif action == "set":
                # Set user info
                if not user_name:
                    return {
                        "success": False,
                        "action": "set",
                        "error": "User name is required for 'set' action"
                    }
                
                if user_info is None:
                    user_info = {}
                
                # Create or update user
                if user_name in self.users:
                    self.users[user_name].update(user_info)
                else:
                    self.users[user_name] = user_info
                
                self._save_users()
                
                return {
                    "success": True,
                    "action": "set",
                    "user_name": user_name,
                    "user_info": self.users[user_name]
                }
            
            elif action == "set_current":
                # Set current user
                if not user_name:
                    return {
                        "success": False,
                        "action": "set_current",
                        "error": "User name is required for 'set_current' action"
                    }
                
                # Create user if it doesn't exist
                if user_name not in self.users:
                    self.users[user_name] = {}
                    self._save_users()
                
                self.current_user = user_name
                
                return {
                    "success": True,
                    "action": "set_current",
                    "user_name": user_name,
                    "current_user": self.current_user
                }
            
            else:
                return {
                    "success": False,
                    "error": f"Unknown action: {action}"
                }
        
        except Exception as e:
            return {
                "success": False,
                "error": str(e)
            }