User Management
User Management
Creating and managing user profiles in Julep
Overview
User management in Julep allows you to create and manage user profiles, enabling personalized experiences and user-specific context in your applications. This guide covers the essential aspects of user management.
Creating Users
Basic User Creation
Create a new user profile:
Python
# Create a user
user = client.users.create(
username="john_doe",
metadata={
"name": "John Doe",
"email": "john@example.com",
"preferences": {
"language": "en",
"timezone": "UTC"
}
}
)
print(f"Created user: {user.id}")
Batch User Creation
Create multiple users efficiently:
Python
# Create multiple users
users = client.users.create_batch([
{
"username": "user1",
"metadata": {
"name": "User One",
"email": "user1@example.com"
}
},
{
"username": "user2",
"metadata": {
"name": "User Two",
"email": "user2@example.com"
}
}
])
for user in users:
print(f"Created user: {user.id}")
Managing Users
Retrieving Users
Get user information:
Python
# Get user by ID
user = client.users.get(user_id)
# List all users
users = client.users.list()
# Search users
filtered_users = client.users.search(
query="john",
metadata_filter={
"preferences.language": "en"
}
)
Updating Users
Update user profiles:
Python
# Update user metadata
updated_user = client.users.update(
user_id,
metadata={
"preferences": {
"language": "es",
"notifications_enabled": True
}
}
)
# Patch specific fields
patched_user = client.users.patch(
user_id,
metadata={
"last_login": "2024-01-01T00:00:00Z"
}
)
Deleting Users
Remove user profiles:
Python
# Delete a user
client.users.delete(user_id)
# Batch delete users
client.users.delete_batch(user_ids)
User Data Management
User Metadata
Structure user metadata effectively:
Python
metadata = {
"profile": {
"name": "John Doe",
"email": "john@example.com",
"avatar_url": "https://example.com/avatar.jpg"
},
"preferences": {
"language": "en",
"timezone": "UTC",
"theme": "dark",
"notifications": {
"email": True,
"push": False
}
},
"settings": {
"default_model": "gpt-4",
"max_tokens": 1000,
"temperature": 0.7
}
}
user = client.users.create(
username="john_doe",
metadata=metadata
)
User Groups
Manage user groups:
Python
# Create a group
group = client.groups.create(
name="premium_users",
metadata={
"access_level": "premium",
"features": ["advanced_tools", "priority_support"]
}
)
# Add users to group
client.groups.add_users(
group_id=group.id,
user_ids=[user1_id, user2_id]
)
# Get group members
members = client.groups.list_users(group.id)
User Authentication
Token Management
Manage user authentication tokens:
Python
# Create user token
token = client.users.create_token(
user_id,
expires_in=3600, # 1 hour
metadata={
"device": "mobile",
"platform": "ios"
}
)
# Revoke token
client.users.revoke_token(token.id)
# List user tokens
tokens = client.users.list_tokens(user_id)
Session Management
Handle user sessions:
Python
# Create user session
session = client.sessions.create(
user_id=user.id,
metadata={
"device": "web",
"ip_address": "192.168.1.1"
}
)
# End session
client.sessions.end(session.id)
# List active sessions
active_sessions = client.sessions.list(
user_id=user.id,
status="active"
)
Best Practices
-
User Data Organization
- Structure metadata consistently
- Use meaningful field names
- Include essential user information
-
Security
- Implement proper authentication
- Manage tokens securely
- Regular security audits
-
Performance
- Use batch operations
- Implement caching
- Optimize queries
Example: Complete User Management
Here’s a comprehensive example of user management:
Python
class UserManager:
def __init__(self, client):
self.client = client
async def create_user_with_preferences(self, username, email, preferences):
# Create user
user = await self.client.users.create(
username=username,
metadata={
"email": email,
"preferences": preferences,
"created_at": datetime.now().isoformat()
}
)
# Create initial session
session = await self.client.sessions.create(
user_id=user.id,
metadata={
"type": "initial_setup",
"created_at": datetime.now().isoformat()
}
)
# Set up user workspace
workspace = await self.client.workspaces.create(
name=f"{username}'s Workspace",
metadata={
"owner_id": user.id,
"created_at": datetime.now().isoformat()
}
)
# Update user with workspace
updated_user = await self.client.users.update(
user.id,
metadata={
**user.metadata,
"workspace_id": workspace.id
}
)
return {
"user": updated_user,
"session": session,
"workspace": workspace
}
async def archive_user(self, user_id):
# Get user data
user = await self.client.users.get(user_id)
# End all sessions
sessions = await self.client.sessions.list(
user_id=user_id,
status="active"
)
for session in sessions:
await self.client.sessions.end(session.id)
# Archive workspace
if "workspace_id" in user.metadata:
await self.client.workspaces.update(
user.metadata["workspace_id"],
metadata={
"status": "archived",
"archived_at": datetime.now().isoformat()
}
)
# Archive user
archived_user = await self.client.users.update(
user_id,
metadata={
**user.metadata,
"status": "archived",
"archived_at": datetime.now().isoformat()
}
)
return archived_user
async def get_user_activity(self, user_id):
# Get user sessions
sessions = await self.client.sessions.list(
user_id=user_id,
limit=100
)
# Get user interactions
interactions = await self.client.interactions.list(
user_id=user_id,
limit=100
)
# Analyze activity
activity_summary = {
"total_sessions": len(sessions),
"active_sessions": sum(1 for s in sessions if s.status == "active"),
"total_interactions": len(interactions),
"last_active": max(s.created_at for s in sessions),
"interaction_types": Counter(i.type for i in interactions)
}
return activity_summary
# Use the manager
manager = UserManager(client)
# Create new user
result = await manager.create_user_with_preferences(
username="jane_doe",
email="jane@example.com",
preferences={
"language": "en",
"timezone": "UTC",
"theme": "light"
}
)
print("Created user:", result["user"].id)
print("Initial session:", result["session"].id)
print("Workspace:", result["workspace"].id)
# Get user activity
activity = await manager.get_user_activity(result["user"].id)
print("User activity:", activity)
# Archive user
archived = await manager.archive_user(result["user"].id)
print("Archived user:", archived.id)