Stage 3 & stage 4

This commit is contained in:
Desktop
2025-11-10 23:51:59 +05:00
parent 1bd9ebc974
commit 14beeed75c
7 changed files with 72 additions and 2259 deletions

View File

@@ -178,19 +178,37 @@ class TasksViewSet(SiteSectorModelViewSet):
# Try to queue Celery task, fall back to synchronous if Celery not available
try:
from .tasks import auto_generate_content_task
from igny8_core.ai.tasks import run_ai_task
from kombu.exceptions import OperationalError as KombuOperationalError
if hasattr(auto_generate_content_task, 'delay'):
if hasattr(run_ai_task, 'delay'):
# Celery is available - queue async task
logger.info(f"auto_generate_content: Queuing Celery task for {len(ids)} tasks")
try:
task = auto_generate_content_task.delay(ids, account_id=account_id)
task = run_ai_task.delay(
function_name='generate_content',
payload={'ids': ids},
account_id=account_id
)
logger.info(f"auto_generate_content: Celery task queued successfully: {task.id}")
return Response({
'success': True,
'task_id': str(task.id),
'message': 'Content generation started'
}, status=status.HTTP_200_OK)
except KombuOperationalError as celery_error:
logger.error("=" * 80)
logger.error("CELERY ERROR: Failed to queue task")
logger.error(f" - Error type: {type(celery_error).__name__}")
logger.error(f" - Error message: {str(celery_error)}")
logger.error(f" - Task IDs: {ids}")
logger.error(f" - Account ID: {account_id}")
logger.error("=" * 80, exc_info=True)
return Response({
'error': 'Task queue unavailable. Please try again.',
'type': 'QueueError'
}, status=status.HTTP_503_SERVICE_UNAVAILABLE)
except Exception as celery_error:
logger.error("=" * 80)
logger.error("CELERY ERROR: Failed to queue task")
@@ -202,11 +220,15 @@ class TasksViewSet(SiteSectorModelViewSet):
# Fall back to synchronous execution
logger.info("auto_generate_content: Falling back to synchronous execution")
result = auto_generate_content_task(ids, account_id=account_id)
result = run_ai_task(
function_name='generate_content',
payload={'ids': ids},
account_id=account_id
)
if result.get('success'):
return Response({
'success': True,
'tasks_updated': result.get('tasks_updated', 0),
'tasks_updated': result.get('count', 0),
'message': 'Content generated successfully (synchronous)'
}, status=status.HTTP_200_OK)
else:
@@ -217,12 +239,16 @@ class TasksViewSet(SiteSectorModelViewSet):
else:
# Celery not available - execute synchronously
logger.info(f"auto_generate_content: Executing synchronously (Celery not available)")
result = auto_generate_content_task(ids, account_id=account_id)
result = run_ai_task(
function_name='generate_content',
payload={'ids': ids},
account_id=account_id
)
if result.get('success'):
logger.info(f"auto_generate_content: Synchronous execution successful: {result.get('tasks_updated', 0)} tasks updated")
logger.info(f"auto_generate_content: Synchronous execution successful: {result.get('count', 0)} tasks updated")
return Response({
'success': True,
'tasks_updated': result.get('tasks_updated', 0),
'tasks_updated': result.get('count', 0),
'message': 'Content generated successfully'
}, status=status.HTTP_200_OK)
else:
@@ -356,10 +382,16 @@ class ImagesViewSet(SiteSectorModelViewSet):
# Try to queue Celery task, fall back to synchronous if Celery not available
try:
from .tasks import auto_generate_images_task
if hasattr(auto_generate_images_task, 'delay'):
from igny8_core.ai.tasks import run_ai_task
from kombu.exceptions import OperationalError as KombuOperationalError
if hasattr(run_ai_task, 'delay'):
# Celery is available - queue async task
task = auto_generate_images_task.delay(task_ids, account_id=account_id)
task = run_ai_task.delay(
function_name='generate_images',
payload={'ids': task_ids},
account_id=account_id
)
return Response({
'success': True,
'task_id': str(task.id),
@@ -367,22 +399,39 @@ class ImagesViewSet(SiteSectorModelViewSet):
}, status=status.HTTP_200_OK)
else:
# Celery not available - execute synchronously
result = auto_generate_images_task(task_ids, account_id=account_id)
result = run_ai_task(
function_name='generate_images',
payload={'ids': task_ids},
account_id=account_id
)
if result.get('success'):
return Response({
'success': True,
'images_created': result.get('images_created', 0),
'images_created': result.get('count', 0),
'message': result.get('message', 'Image generation completed')
}, status=status.HTTP_200_OK)
else:
return Response({
'error': result.get('error', 'Image generation failed')
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
except KombuOperationalError as e:
return Response({
'error': 'Task queue unavailable. Please try again.',
'type': 'QueueError'
}, status=status.HTTP_503_SERVICE_UNAVAILABLE)
except ImportError:
# Tasks module not available
return Response({
'error': 'Image generation task not available'
}, status=status.HTTP_503_SERVICE_UNAVAILABLE)
except Exception as e:
import logging
logger = logging.getLogger(__name__)
logger.error(f"Error queuing image generation task: {str(e)}", exc_info=True)
return Response({
'error': f'Failed to start image generation: {str(e)}',
'type': 'TaskError'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class ContentViewSet(SiteSectorModelViewSet):