fixes and final pre launch verifcation md
This commit is contained in:
@@ -171,6 +171,8 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
site = get_object_or_404(Site, id=site_id, account=request.user.account)
|
||||
data = request.data
|
||||
|
||||
logger.info(f"[UnifiedSettings] Received update for site {site_id}: {data}")
|
||||
|
||||
try:
|
||||
# Get or create AutomationConfig
|
||||
automation_config, _ = AutomationConfig.objects.get_or_create(
|
||||
@@ -194,6 +196,7 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
|
||||
# Update stage configuration
|
||||
if 'stages' in data:
|
||||
logger.info(f"[UnifiedSettings] Updating stages: {data['stages']}")
|
||||
self._update_stage_config(automation_config, data['stages'])
|
||||
|
||||
# Update delays
|
||||
@@ -205,6 +208,7 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
automation_config.between_stage_delay = delays['between_stage']
|
||||
|
||||
automation_config.save()
|
||||
logger.info(f"[UnifiedSettings] AutomationConfig saved for site {site_id}")
|
||||
|
||||
# Update publishing settings
|
||||
if 'publishing' in data:
|
||||
@@ -239,13 +243,15 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
'enabled': automation_config.stage_1_enabled,
|
||||
'batch_size': automation_config.stage_1_batch_size,
|
||||
'per_run_limit': automation_config.max_keywords_per_run,
|
||||
'use_testing': False, # Default, can be stored in metadata later
|
||||
'use_testing': automation_config.stage_1_use_testing,
|
||||
'budget_pct': automation_config.stage_1_budget_pct,
|
||||
},
|
||||
'2': {
|
||||
'enabled': automation_config.stage_2_enabled,
|
||||
'batch_size': automation_config.stage_2_batch_size,
|
||||
'per_run_limit': automation_config.max_clusters_per_run,
|
||||
'use_testing': False,
|
||||
'use_testing': automation_config.stage_2_use_testing,
|
||||
'budget_pct': automation_config.stage_2_budget_pct,
|
||||
},
|
||||
'3': {
|
||||
'enabled': automation_config.stage_3_enabled,
|
||||
@@ -256,19 +262,22 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
'enabled': automation_config.stage_4_enabled,
|
||||
'batch_size': automation_config.stage_4_batch_size,
|
||||
'per_run_limit': automation_config.max_tasks_per_run,
|
||||
'use_testing': False,
|
||||
'use_testing': automation_config.stage_4_use_testing,
|
||||
'budget_pct': automation_config.stage_4_budget_pct,
|
||||
},
|
||||
'5': {
|
||||
'enabled': automation_config.stage_5_enabled,
|
||||
'batch_size': automation_config.stage_5_batch_size,
|
||||
'per_run_limit': automation_config.max_content_per_run,
|
||||
'use_testing': False,
|
||||
'use_testing': automation_config.stage_5_use_testing,
|
||||
'budget_pct': automation_config.stage_5_budget_pct,
|
||||
},
|
||||
'6': {
|
||||
'enabled': automation_config.stage_6_enabled,
|
||||
'batch_size': automation_config.stage_6_batch_size,
|
||||
'per_run_limit': automation_config.max_images_per_run,
|
||||
'use_testing': False,
|
||||
'use_testing': automation_config.stage_6_use_testing,
|
||||
'budget_pct': automation_config.stage_6_budget_pct,
|
||||
},
|
||||
'7': {
|
||||
'enabled': automation_config.stage_7_enabled,
|
||||
@@ -306,8 +315,11 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
for stage in stages:
|
||||
num = stage.get('number')
|
||||
if not num:
|
||||
logger.warning(f"[UnifiedSettings] Stage missing 'number': {stage}")
|
||||
continue
|
||||
|
||||
logger.info(f"[UnifiedSettings] Processing stage {num}: enabled={stage.get('enabled')}, batch_size={stage.get('batch_size')}, per_run_limit={stage.get('per_run_limit')}, use_testing={stage.get('use_testing')}, budget_pct={stage.get('budget_pct')}")
|
||||
|
||||
if num == 1:
|
||||
if 'enabled' in stage:
|
||||
automation_config.stage_1_enabled = stage['enabled']
|
||||
@@ -315,6 +327,10 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
automation_config.stage_1_batch_size = stage['batch_size']
|
||||
if 'per_run_limit' in stage:
|
||||
automation_config.max_keywords_per_run = stage['per_run_limit']
|
||||
if 'use_testing' in stage:
|
||||
automation_config.stage_1_use_testing = stage['use_testing']
|
||||
if 'budget_pct' in stage:
|
||||
automation_config.stage_1_budget_pct = stage['budget_pct']
|
||||
elif num == 2:
|
||||
if 'enabled' in stage:
|
||||
automation_config.stage_2_enabled = stage['enabled']
|
||||
@@ -322,6 +338,10 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
automation_config.stage_2_batch_size = stage['batch_size']
|
||||
if 'per_run_limit' in stage:
|
||||
automation_config.max_clusters_per_run = stage['per_run_limit']
|
||||
if 'use_testing' in stage:
|
||||
automation_config.stage_2_use_testing = stage['use_testing']
|
||||
if 'budget_pct' in stage:
|
||||
automation_config.stage_2_budget_pct = stage['budget_pct']
|
||||
elif num == 3:
|
||||
if 'enabled' in stage:
|
||||
automation_config.stage_3_enabled = stage['enabled']
|
||||
@@ -336,6 +356,10 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
automation_config.stage_4_batch_size = stage['batch_size']
|
||||
if 'per_run_limit' in stage:
|
||||
automation_config.max_tasks_per_run = stage['per_run_limit']
|
||||
if 'use_testing' in stage:
|
||||
automation_config.stage_4_use_testing = stage['use_testing']
|
||||
if 'budget_pct' in stage:
|
||||
automation_config.stage_4_budget_pct = stage['budget_pct']
|
||||
elif num == 5:
|
||||
if 'enabled' in stage:
|
||||
automation_config.stage_5_enabled = stage['enabled']
|
||||
@@ -343,6 +367,10 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
automation_config.stage_5_batch_size = stage['batch_size']
|
||||
if 'per_run_limit' in stage:
|
||||
automation_config.max_content_per_run = stage['per_run_limit']
|
||||
if 'use_testing' in stage:
|
||||
automation_config.stage_5_use_testing = stage['use_testing']
|
||||
if 'budget_pct' in stage:
|
||||
automation_config.stage_5_budget_pct = stage['budget_pct']
|
||||
elif num == 6:
|
||||
if 'enabled' in stage:
|
||||
automation_config.stage_6_enabled = stage['enabled']
|
||||
@@ -350,8 +378,14 @@ class UnifiedSiteSettingsViewSet(viewsets.ViewSet):
|
||||
automation_config.stage_6_batch_size = stage['batch_size']
|
||||
if 'per_run_limit' in stage:
|
||||
automation_config.max_images_per_run = stage['per_run_limit']
|
||||
if 'use_testing' in stage:
|
||||
automation_config.stage_6_use_testing = stage['use_testing']
|
||||
if 'budget_pct' in stage:
|
||||
automation_config.stage_6_budget_pct = stage['budget_pct']
|
||||
elif num == 7:
|
||||
if 'enabled' in stage:
|
||||
automation_config.stage_7_enabled = stage['enabled']
|
||||
if 'per_run_limit' in stage:
|
||||
automation_config.max_approvals_per_run = stage['per_run_limit']
|
||||
|
||||
logger.info(f"[UnifiedSettings] After update - stage_1_batch_size={automation_config.stage_1_batch_size}, max_keywords_per_run={automation_config.max_keywords_per_run}")
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
# Generated migration for adding use_testing and budget_pct per AI stage
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
"""
|
||||
Add use_testing and budget_pct fields per AI stage to AutomationConfig.
|
||||
AI stages are: 1 (Keywords→Clusters), 2 (Clusters→Ideas), 4 (Tasks→Content),
|
||||
5 (Content→Prompts), 6 (Prompts→Images)
|
||||
"""
|
||||
|
||||
dependencies = [
|
||||
('automation', '0008_automationconfig_max_approvals_per_run_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# Stage 1 use_testing and budget_pct
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_1_use_testing',
|
||||
field=models.BooleanField(default=False, help_text='Use testing model for Stage 1'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_1_budget_pct',
|
||||
field=models.IntegerField(default=15, help_text='Budget percentage for Stage 1'),
|
||||
),
|
||||
|
||||
# Stage 2 use_testing and budget_pct
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_2_use_testing',
|
||||
field=models.BooleanField(default=False, help_text='Use testing model for Stage 2'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_2_budget_pct',
|
||||
field=models.IntegerField(default=10, help_text='Budget percentage for Stage 2'),
|
||||
),
|
||||
|
||||
# Stage 4 use_testing and budget_pct
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_4_use_testing',
|
||||
field=models.BooleanField(default=False, help_text='Use testing model for Stage 4'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_4_budget_pct',
|
||||
field=models.IntegerField(default=40, help_text='Budget percentage for Stage 4'),
|
||||
),
|
||||
|
||||
# Stage 5 use_testing and budget_pct
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_5_use_testing',
|
||||
field=models.BooleanField(default=False, help_text='Use testing model for Stage 5'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_5_budget_pct',
|
||||
field=models.IntegerField(default=5, help_text='Budget percentage for Stage 5'),
|
||||
),
|
||||
|
||||
# Stage 6 use_testing and budget_pct
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_6_use_testing',
|
||||
field=models.BooleanField(default=False, help_text='Use testing model for Stage 6'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='automationconfig',
|
||||
name='stage_6_budget_pct',
|
||||
field=models.IntegerField(default=30, help_text='Budget percentage for Stage 6'),
|
||||
),
|
||||
]
|
||||
@@ -40,6 +40,20 @@ class AutomationConfig(models.Model):
|
||||
stage_5_batch_size = models.IntegerField(default=1, help_text="Content at a time")
|
||||
stage_6_batch_size = models.IntegerField(default=1, help_text="Images - sequential")
|
||||
|
||||
# Use testing model per stage (only for AI stages: 1, 2, 4, 5, 6)
|
||||
stage_1_use_testing = models.BooleanField(default=False, help_text="Use testing model for Stage 1")
|
||||
stage_2_use_testing = models.BooleanField(default=False, help_text="Use testing model for Stage 2")
|
||||
stage_4_use_testing = models.BooleanField(default=False, help_text="Use testing model for Stage 4")
|
||||
stage_5_use_testing = models.BooleanField(default=False, help_text="Use testing model for Stage 5")
|
||||
stage_6_use_testing = models.BooleanField(default=False, help_text="Use testing model for Stage 6")
|
||||
|
||||
# Budget percentage per stage (only for AI stages: 1, 2, 4, 5, 6)
|
||||
stage_1_budget_pct = models.IntegerField(default=15, help_text="Budget percentage for Stage 1")
|
||||
stage_2_budget_pct = models.IntegerField(default=10, help_text="Budget percentage for Stage 2")
|
||||
stage_4_budget_pct = models.IntegerField(default=40, help_text="Budget percentage for Stage 4")
|
||||
stage_5_budget_pct = models.IntegerField(default=5, help_text="Budget percentage for Stage 5")
|
||||
stage_6_budget_pct = models.IntegerField(default=30, help_text="Budget percentage for Stage 6")
|
||||
|
||||
# Delay configuration (in seconds)
|
||||
within_stage_delay = models.IntegerField(default=3, help_text="Delay between batches within a stage (seconds)")
|
||||
between_stage_delay = models.IntegerField(default=5, help_text="Delay between stage transitions (seconds)")
|
||||
|
||||
Reference in New Issue
Block a user