110 lines
2.9 KiB
Python
110 lines
2.9 KiB
Python
"""
|
|
User Preference Service
|
|
|
|
Handles user AI preferences and settings management.
|
|
|
|
Usage:
|
|
from apps.chatbot.services import UserPreferenceService
|
|
|
|
# Get or create preferences
|
|
prefs = UserPreferenceService.get_or_create_preferences(user)
|
|
|
|
# Update preferences
|
|
UserPreferenceService.update_preferences(
|
|
user=user,
|
|
default_model="gpt-4o",
|
|
enable_auto_summarization=True
|
|
)
|
|
"""
|
|
|
|
from typing import Dict, Any, Optional
|
|
|
|
from apps.chatbot.models import UserPreference
|
|
from apps.accounts.models import CustomUser
|
|
|
|
|
|
class UserPreferenceService:
|
|
"""Service for managing user preferences."""
|
|
|
|
@staticmethod
|
|
def get_or_create_preferences(user: CustomUser) -> UserPreference:
|
|
"""
|
|
Get or create user preferences.
|
|
|
|
Args:
|
|
user: The user
|
|
|
|
Returns:
|
|
UserPreference instance
|
|
"""
|
|
prefs, created = UserPreference.objects.get_or_create(user=user)
|
|
return prefs
|
|
|
|
@staticmethod
|
|
def update_preferences(
|
|
user: CustomUser,
|
|
**kwargs
|
|
) -> UserPreference:
|
|
"""
|
|
Update user preferences.
|
|
|
|
Args:
|
|
user: The user
|
|
**kwargs: Fields to update
|
|
|
|
Returns:
|
|
Updated UserPreference instance
|
|
|
|
Example:
|
|
prefs = UserPreferenceService.update_preferences(
|
|
user=request.user,
|
|
default_model="gpt-4o",
|
|
default_temperature=0.8,
|
|
enable_auto_summarization=True
|
|
)
|
|
"""
|
|
prefs = UserPreferenceService.get_or_create_preferences(user)
|
|
|
|
for field, value in kwargs.items():
|
|
if hasattr(prefs, field):
|
|
setattr(prefs, field, value)
|
|
|
|
prefs.save()
|
|
return prefs
|
|
|
|
@staticmethod
|
|
def get_session_config(user: CustomUser) -> Dict[str, Any]:
|
|
"""
|
|
Get session configuration from user preferences.
|
|
|
|
Args:
|
|
user: The user
|
|
|
|
Returns:
|
|
Config dict for creating ChatSession
|
|
"""
|
|
prefs = UserPreferenceService.get_or_create_preferences(user)
|
|
return prefs.get_session_config()
|
|
|
|
@staticmethod
|
|
def reset_to_defaults(user: CustomUser) -> UserPreference:
|
|
"""
|
|
Reset preferences to defaults.
|
|
|
|
Args:
|
|
user: The user
|
|
|
|
Returns:
|
|
Reset UserPreference instance
|
|
"""
|
|
prefs = UserPreferenceService.get_or_create_preferences(user)
|
|
|
|
prefs.default_model = "gpt-4o-mini"
|
|
prefs.default_temperature = 0.7
|
|
prefs.default_max_tokens = 2048
|
|
prefs.enable_auto_summarization = True
|
|
prefs.custom_system_prompt = ""
|
|
prefs.save()
|
|
|
|
return prefs
|