fixes for image gen

This commit is contained in:
IGNY8 VPS (Salman)
2025-11-11 21:35:54 +00:00
parent 298b7bc625
commit 253d2e989d
4 changed files with 432 additions and 31 deletions

View File

@@ -169,8 +169,41 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
images_failed = 0
errors = []
# Initialize image queue in meta for frontend
image_queue = []
for idx, img in enumerate(images, 1):
content_obj = img.content
if not content_obj:
if img.task:
content_title = img.task.title
else:
content_title = "Content"
else:
content_title = content_obj.title or content_obj.meta_title or "Content"
image_queue.append({
'image_id': img.id,
'index': idx,
'label': f"{img.image_type.replace('_', ' ').title()} Image",
'content_title': content_title,
'status': 'pending',
'progress': 0,
'image_url': None,
'error': None
})
# Send initial queue to frontend
if progress_tracker:
initial_meta = step_tracker.get_meta() if step_tracker else {}
initial_meta['image_queue'] = image_queue
progress_tracker.update("PREP", 10, f"Preparing to generate {total_images} image{'s' if total_images != 1 else ''}", meta=initial_meta)
# Process each image sequentially
for index, image in enumerate(images, 1):
queue_item = image_queue[index - 1]
queue_item['status'] = 'processing'
queue_item['progress'] = 0
try:
# Get content title
content = image.content
@@ -202,16 +235,32 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
if progress_tracker and step_tracker:
prep_msg = f"Generating image {index} of {total_images}: {image.image_type}"
step_tracker.add_request_step("PREP", "success", prep_msg)
queue_item['progress'] = 10
# Update queue in meta
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_pct = 10 + int((index - 1) / total_images * 15) # 10-25% for PREP
progress_tracker.update("PREP", progress_pct, prep_msg, meta=step_tracker.get_meta())
progress_tracker.update("PREP", progress_pct, prep_msg, meta=meta)
# Generate image
# Generate image - update progress incrementally
if progress_tracker and step_tracker:
ai_msg = f"Generating {image.image_type} image {index} of {total_images} with AI"
step_tracker.add_response_step("AI_CALL", "success", ai_msg)
queue_item['progress'] = 25
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_pct = 25 + int((index - 1) / total_images * 45) # 25-70% for AI_CALL
progress_tracker.update("AI_CALL", progress_pct, ai_msg, meta=step_tracker.get_meta())
progress_tracker.update("AI_CALL", progress_pct, ai_msg, meta=meta)
# Update progress to 50% (simulating API call start)
queue_item['progress'] = 50
if progress_tracker and step_tracker:
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_tracker.update("AI_CALL", progress_pct, ai_msg, meta=meta)
# Generate image (this is the actual API call)
# Frontend will simulate smooth progress from 50% to 95% while waiting
result = ai_core.generate_image(
prompt=formatted_prompt,
provider=provider,
@@ -221,8 +270,18 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
function_name='generate_images_from_prompts'
)
# Update progress to 90% (API call completed, processing response)
queue_item['progress'] = 90
if progress_tracker and step_tracker:
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_tracker.update("AI_CALL", progress_pct, ai_msg, meta=meta)
if result.get('error'):
# Mark as failed
queue_item['status'] = 'failed'
queue_item['progress'] = 100
queue_item['error'] = result['error']
with transaction.atomic():
image.status = 'failed'
image.save(update_fields=['status', 'updated_at'])
@@ -235,14 +294,19 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
if progress_tracker and step_tracker:
parse_msg = f"Image {index} failed: {result['error']}"
step_tracker.add_response_step("PARSE", "error", parse_msg)
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_pct = 70 + int((index - 1) / total_images * 15) # 70-85% for PARSE
progress_tracker.update("PARSE", progress_pct, parse_msg, meta=step_tracker.get_meta())
progress_tracker.update("PARSE", progress_pct, parse_msg, meta=meta)
continue
image_url = result.get('url')
if not image_url:
# Mark as failed
queue_item['status'] = 'failed'
queue_item['progress'] = 100
queue_item['error'] = 'No URL returned'
with transaction.atomic():
image.status = 'failed'
image.save(update_fields=['status', 'updated_at'])
@@ -255,17 +319,22 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
if progress_tracker and step_tracker:
parse_msg = f"Image {index} failed: No URL returned"
step_tracker.add_response_step("PARSE", "error", parse_msg)
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_pct = 70 + int((index - 1) / total_images * 15)
progress_tracker.update("PARSE", progress_pct, parse_msg, meta=step_tracker.get_meta())
progress_tracker.update("PARSE", progress_pct, parse_msg, meta=meta)
continue
# Update progress: PARSE phase
# Update progress: PARSE phase (90%)
queue_item['progress'] = 90
if progress_tracker and step_tracker:
parse_msg = f"Image {index} of {total_images} generated successfully"
step_tracker.add_response_step("PARSE", "success", parse_msg)
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_pct = 70 + int((index - 1) / total_images * 15) # 70-85% for PARSE
progress_tracker.update("PARSE", progress_pct, parse_msg, meta=step_tracker.get_meta())
progress_tracker.update("PARSE", progress_pct, parse_msg, meta=meta)
# Update image record
with transaction.atomic():
@@ -273,6 +342,10 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
image.status = 'generated'
image.save(update_fields=['image_url', 'status', 'updated_at'])
# Mark queue item as completed
queue_item['status'] = 'completed'
queue_item['progress'] = 100
queue_item['image_url'] = image_url
images_generated += 1
logger.info(f"Image {image.id} ({image.image_type}) generated successfully: {image_url}")
@@ -280,8 +353,10 @@ class GenerateImagesFromPromptsFunction(BaseAIFunction):
if progress_tracker and step_tracker:
save_msg = f"Saved image {index} of {total_images}"
step_tracker.add_request_step("SAVE", "success", save_msg)
meta = step_tracker.get_meta()
meta['image_queue'] = image_queue
progress_pct = 85 + int((index - 1) / total_images * 13) # 85-98% for SAVE
progress_tracker.update("SAVE", progress_pct, save_msg, meta=step_tracker.get_meta())
progress_tracker.update("SAVE", progress_pct, save_msg, meta=meta)
except Exception as e:
# Mark as failed