Image genartiona dn temaplte design redesign

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-10 03:58:02 +00:00
parent ce66dadc00
commit 0c693dc1cc
18 changed files with 1717 additions and 214 deletions

View File

@@ -183,8 +183,8 @@ class ContentSettingsViewSet(viewsets.ViewSet):
setting = AccountSettings.objects.get(account=account, key=pk)
return success_response(data={
'key': setting.key,
'config': setting.config,
'is_active': setting.is_active,
'config': setting.value, # Model uses 'value', frontend expects 'config'
'is_active': getattr(setting, 'is_active', True),
}, request=request)
except AccountSettings.DoesNotExist:
# Return default settings if not yet saved
@@ -234,17 +234,17 @@ class ContentSettingsViewSet(viewsets.ViewSet):
# Filter to only valid fields
filtered_config = {k: v for k, v in config.items() if k in valid_fields}
# Get or create setting
# Get or create setting - model uses 'value' field
setting, created = AccountSettings.objects.update_or_create(
account=account,
key=pk,
defaults={'config': filtered_config, 'is_active': True}
defaults={'value': filtered_config}
)
return success_response(data={
'key': setting.key,
'config': setting.config,
'is_active': setting.is_active,
'config': setting.value, # Model uses 'value', frontend expects 'config'
'is_active': getattr(setting, 'is_active', True),
'message': 'Settings saved successfully',
}, request=request)
@@ -607,8 +607,28 @@ class ContentGenerationSettingsViewSet(viewsets.ViewSet):
account=account,
key='ai.image_quality_tier'
).first()
if tier_setting and tier_setting.config:
selected_tier = tier_setting.config.get('value', 'quality')
if tier_setting and tier_setting.value: # Model uses 'value' field
selected_tier = tier_setting.value.get('value', 'quality')
# Get default image model (or model for selected tier)
default_image_model = AIModelConfig.get_default_image_model()
# Try to find model matching selected tier
selected_model = AIModelConfig.objects.filter(
model_type='image',
quality_tier=selected_tier,
is_active=True
).first() or default_image_model
# Get image sizes from the selected model
featured_image_size = '1792x1024' # Default
landscape_image_size = '1792x1024' # Default
square_image_size = '1024x1024' # Default
if selected_model:
landscape_image_size = selected_model.landscape_size or '1792x1024'
square_image_size = selected_model.square_size or '1024x1024'
featured_image_size = landscape_image_size # Featured uses landscape
response_data = {
'content_generation': {
@@ -622,6 +642,12 @@ class ContentGenerationSettingsViewSet(viewsets.ViewSet):
'selected_style': image_style,
'max_images': max_images,
'max_allowed': 8,
# Image sizes based on selected model
'featured_image_size': featured_image_size,
'landscape_image_size': landscape_image_size,
'square_image_size': square_image_size,
'model_name': selected_model.model_name if selected_model else None,
'model_display_name': selected_model.display_name if selected_model else None,
}
}
@@ -640,7 +666,12 @@ class ContentGenerationSettingsViewSet(viewsets.ViewSet):
PUT/POST /api/v1/accounts/settings/ai/
Save account-specific overrides to AccountSettings.
Request body per the plan:
Accepts nested structure:
{
"content_generation": { "temperature": 0.8, "max_tokens": 4096 },
"image_generation": { "quality_tier": "premium", "image_style": "illustration", "max_images_per_article": 6 }
}
Or flat structure:
{
"temperature": 0.8,
"max_tokens": 4096,
@@ -662,6 +693,19 @@ class ContentGenerationSettingsViewSet(viewsets.ViewSet):
data = request.data
saved_keys = []
# Handle nested structure from frontend
content_gen = data.get('content_generation', {})
image_gen = data.get('image_generation', {})
# Flatten nested structure or use flat keys
flat_data = {
'temperature': content_gen.get('temperature') if content_gen else data.get('temperature'),
'max_tokens': content_gen.get('max_tokens') if content_gen else data.get('max_tokens'),
'image_quality_tier': image_gen.get('quality_tier') if image_gen else data.get('image_quality_tier'),
'image_style': image_gen.get('image_style') if image_gen else data.get('image_style'),
'max_images': image_gen.get('max_images_per_article') if image_gen else data.get('max_images'),
}
# Map request fields to AccountSettings keys
key_mappings = {
'temperature': 'ai.temperature',
@@ -672,11 +716,12 @@ class ContentGenerationSettingsViewSet(viewsets.ViewSet):
}
for field, account_key in key_mappings.items():
if field in data:
value = flat_data.get(field)
if value is not None:
AccountSettings.objects.update_or_create(
account=account,
key=account_key,
defaults={'config': {'value': data[field]}}
defaults={'value': {'value': value}} # Model uses 'value' field
)
saved_keys.append(account_key)