Stage 3 & stage 4
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user