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