diff --git a/backend/igny8_core/ai/tasks.py b/backend/igny8_core/ai/tasks.py index def80225..3328a2d0 100644 --- a/backend/igny8_core/ai/tasks.py +++ b/backend/igny8_core/ai/tasks.py @@ -139,7 +139,7 @@ def process_image_generation_queue(self, image_ids: list, account_id: int = None from igny8_core.modules.writer.models import Images, Content from igny8_core.modules.system.models import IntegrationSettings from igny8_core.ai.ai_core import AICore - from igny8_core.utils.prompt_registry import PromptRegistry + from igny8_core.ai.prompts import PromptRegistry logger.info("=" * 80) logger.info(f"process_image_generation_queue STARTED") diff --git a/frontend/src/components/common/ImageQueueModal.tsx b/frontend/src/components/common/ImageQueueModal.tsx index 15dde80b..13e245d9 100644 --- a/frontend/src/components/common/ImageQueueModal.tsx +++ b/frontend/src/components/common/ImageQueueModal.tsx @@ -29,6 +29,14 @@ interface ImageQueueModalProps { totalImages: number; taskId?: string | null; onUpdateQueue?: (queue: ImageQueueItem[]) => void; + onLog?: (log: { + timestamp: string; + type: 'request' | 'success' | 'error' | 'step'; + action: string; + data: any; + stepName?: string; + percentage?: number; + }) => void; } export default function ImageQueueModal({ @@ -38,6 +46,7 @@ export default function ImageQueueModal({ totalImages, taskId, onUpdateQueue, + onLog, }: ImageQueueModalProps) { const [localQueue, setLocalQueue] = useState(queue); @@ -86,6 +95,44 @@ export default function ImageQueueModal({ if (taskState === 'SUCCESS' || taskState === 'FAILURE') { console.log(`[ImageQueueModal] Task completed with state:`, taskState); clearInterval(pollInterval); + + // Log completion status + if (onLog) { + if (taskState === 'SUCCESS') { + const result = data.result || (data.meta && data.meta.result); + const completed = result?.completed || 0; + const failed = result?.failed || 0; + const total = result?.total_images || totalImages; + + onLog({ + timestamp: new Date().toISOString(), + type: failed > 0 ? 'error' : 'success', + action: 'generate_images', + stepName: 'Task Completed', + data: { + state: 'SUCCESS', + completed, + failed, + total, + results: result?.results || [] + } + }); + } else { + // FAILURE + onLog({ + timestamp: new Date().toISOString(), + type: 'error', + action: 'generate_images', + stepName: 'Task Failed', + data: { + state: 'FAILURE', + error: data.error || data.meta?.error || 'Task failed', + meta: data.meta + } + }); + } + } + // Update final state if (taskState === 'SUCCESS' && data.result) { console.log(`[ImageQueueModal] Updating queue from result:`, data.result); diff --git a/frontend/src/pages/Writer/Images.tsx b/frontend/src/pages/Writer/Images.tsx index 19f53878..edba45bd 100644 --- a/frontend/src/pages/Writer/Images.tsx +++ b/frontend/src/pages/Writer/Images.tsx @@ -280,9 +280,10 @@ export default function Images() { console.log('[Generate Images] Stage 2: Task started with ID:', result.task_id); addAiLog({ timestamp: new Date().toISOString(), - type: 'success', + type: 'step', action: 'generate_images', - data: { task_id: result.task_id, message: 'Task queued successfully' } + stepName: 'Task Queued', + data: { task_id: result.task_id, message: 'Image generation task queued' } }); } else { toast.error(result.error || 'Failed to start image generation'); @@ -386,21 +387,22 @@ export default function Images() { setCurrentPage(1); }} /> - { - setIsQueueModalOpen(false); - setImageQueue([]); - setCurrentContentId(null); - setTaskId(null); - // Reload images after closing if generation completed - loadImages(); - }} - queue={imageQueue} - totalImages={imageQueue.length} - taskId={taskId} - onUpdateQueue={setImageQueue} - /> + { + setIsQueueModalOpen(false); + setImageQueue([]); + setCurrentContentId(null); + setTaskId(null); + // Reload images after closing if generation completed + loadImages(); + }} + queue={imageQueue} + totalImages={imageQueue.length} + taskId={taskId} + onUpdateQueue={setImageQueue} + onLog={addAiLog} + /> {/* AI Function Logs - Display below table (only when Resource Debug is enabled) */} {resourceDebugEnabled && aiLogs.length > 0 && (