feat: Add Global Module Settings and Caption to Images
- Introduced GlobalModuleSettings model for platform-wide module enable/disable settings. - Added 'caption' field to Images model to store image captions. - Updated GenerateImagePromptsFunction to handle new caption structure in prompts. - Enhanced AIPromptViewSet to return global prompt types and validate active prompts. - Modified serializers and views to accommodate new caption field and global settings. - Updated frontend components to display captions and filter prompts based on active types. - Created migrations for GlobalModuleSettings and added caption field to Images.
This commit is contained in:
@@ -48,22 +48,50 @@ class AIPromptViewSet(AccountModelViewSet):
|
||||
"""Get prompts for the current account"""
|
||||
return super().get_queryset().order_by('prompt_type')
|
||||
|
||||
@action(detail=False, methods=['get'], url_path='active_types', url_name='active_types')
|
||||
def get_active_types(self, request):
|
||||
"""Get list of globally active prompt types"""
|
||||
from .global_settings_models import GlobalAIPrompt
|
||||
|
||||
active_prompts = GlobalAIPrompt.objects.filter(is_active=True).values_list('prompt_type', flat=True)
|
||||
return success_response(
|
||||
data={'active_types': list(active_prompts)},
|
||||
request=request
|
||||
)
|
||||
|
||||
@action(detail=False, methods=['get'], url_path='by_type/(?P<prompt_type>[^/.]+)', url_name='by_type')
|
||||
def get_by_type(self, request, prompt_type=None):
|
||||
"""Get prompt by type"""
|
||||
"""Get prompt by type - only if globally active"""
|
||||
from .global_settings_models import GlobalAIPrompt
|
||||
|
||||
# Check if this prompt type is globally active
|
||||
try:
|
||||
global_prompt = GlobalAIPrompt.objects.get(prompt_type=prompt_type)
|
||||
if not global_prompt.is_active:
|
||||
return error_response(
|
||||
error=f'Prompt type "{prompt_type}" is not globally active',
|
||||
status_code=http_status.HTTP_404_NOT_FOUND,
|
||||
request=request
|
||||
)
|
||||
except GlobalAIPrompt.DoesNotExist:
|
||||
return error_response(
|
||||
error=f'Prompt type "{prompt_type}" not found in global settings',
|
||||
status_code=http_status.HTTP_404_NOT_FOUND,
|
||||
request=request
|
||||
)
|
||||
|
||||
# Get account-specific prompt or return default
|
||||
try:
|
||||
prompt = self.get_queryset().get(prompt_type=prompt_type)
|
||||
serializer = self.get_serializer(prompt)
|
||||
return success_response(data=serializer.data, request=request)
|
||||
except AIPrompt.DoesNotExist:
|
||||
# Return default if not found
|
||||
from .utils import get_default_prompt
|
||||
default_value = get_default_prompt(prompt_type)
|
||||
# Return default from GlobalAIPrompt
|
||||
return success_response(
|
||||
data={
|
||||
'prompt_type': prompt_type,
|
||||
'prompt_value': default_value,
|
||||
'default_prompt': default_value,
|
||||
'prompt_value': global_prompt.prompt_value,
|
||||
'default_prompt': global_prompt.prompt_value,
|
||||
'is_active': True,
|
||||
},
|
||||
request=request
|
||||
@@ -120,10 +148,13 @@ class AIPromptViewSet(AccountModelViewSet):
|
||||
request=request
|
||||
)
|
||||
|
||||
# Get default prompt value if creating new
|
||||
# Get default prompt value from GlobalAIPrompt
|
||||
from .utils import get_default_prompt
|
||||
default_value = get_default_prompt(prompt_type)
|
||||
|
||||
# Check if the prompt is customized (different from global default)
|
||||
is_customized = (prompt_value != default_value)
|
||||
|
||||
# Get or create prompt
|
||||
prompt, created = AIPrompt.objects.get_or_create(
|
||||
prompt_type=prompt_type,
|
||||
@@ -131,12 +162,15 @@ class AIPromptViewSet(AccountModelViewSet):
|
||||
defaults={
|
||||
'prompt_value': prompt_value,
|
||||
'default_prompt': default_value,
|
||||
'is_customized': is_customized,
|
||||
'is_active': True,
|
||||
}
|
||||
)
|
||||
|
||||
if not created:
|
||||
prompt.prompt_value = prompt_value
|
||||
prompt.default_prompt = default_value
|
||||
prompt.is_customized = is_customized
|
||||
prompt.save()
|
||||
|
||||
serializer = self.get_serializer(prompt)
|
||||
@@ -190,7 +224,7 @@ class AIPromptViewSet(AccountModelViewSet):
|
||||
request=request
|
||||
)
|
||||
|
||||
# Get default prompt
|
||||
# Get default prompt from GlobalAIPrompt
|
||||
from .utils import get_default_prompt
|
||||
default_value = get_default_prompt(prompt_type)
|
||||
|
||||
@@ -201,12 +235,15 @@ class AIPromptViewSet(AccountModelViewSet):
|
||||
defaults={
|
||||
'prompt_value': default_value,
|
||||
'default_prompt': default_value,
|
||||
'is_customized': False,
|
||||
'is_active': True,
|
||||
}
|
||||
)
|
||||
|
||||
if not created:
|
||||
prompt.prompt_value = default_value
|
||||
prompt.default_prompt = default_value
|
||||
prompt.is_customized = False
|
||||
prompt.save()
|
||||
|
||||
serializer = self.get_serializer(prompt)
|
||||
|
||||
Reference in New Issue
Block a user