EduMentorAI / src /rag_app /tests /test_workflow.py
ziadtarek12's picture
Images in slides done!
af376d8
Raw
History Blame Contribute Delete
4.04 kB
#!/usr/bin/env python3
"""
Test the complete image placement workflow
"""
import os
import sys
import django
# Configure Django
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rag_django.settings')
django.setup()
from rag_app.pipeline.SlideProcessor import SlideProcessor
def test_workflow():
"""Test the complete image β†’ slide matching workflow"""
print("=" * 60)
print("Testing Complete Image Placement Workflow")
print("=" * 60)
processor = SlideProcessor()
# Simulate generated slide content (as it would be from LLM)
slide_content = """### Introduction to Machine Learning
β€’ Machine Learning is a subset of AI
β€’ Enables computers to learn from data
β€’ Widely used in modern applications
### Neural Networks
β€’ Inspired by biological neurons
β€’ Consists of interconnected layers
β€’ Foundation of deep learning
### Deep Learning Applications
β€’ Computer vision and image recognition
β€’ Natural language processing
β€’ Autonomous vehicles"""
print("\n1. Extract slide titles:")
titles = processor._extract_slide_titles(slide_content)
print(f" Found {len(titles)} titles: {titles}")
print("\n2. Calculate middle slides:")
total_slides = len(titles)
if total_slides >= 5:
middle_idx = total_slides // 2
target_slide_indices = [middle_idx - 1, middle_idx, middle_idx + 1]
elif total_slides == 4:
target_slide_indices = [1, 2]
elif total_slides == 3:
target_slide_indices = [1]
else:
target_slide_indices = []
print(f" Total slides: {total_slides}")
print(f" Target indices: {target_slide_indices}")
print(f" Target slides (1-indexed): {[i+1 for i in target_slide_indices]}")
print("\n3. Download images:")
internet_images = []
for slide_idx in target_slide_indices:
if slide_idx < len(titles):
slide_title = titles[slide_idx]
print(f" Downloading for slide {slide_idx} (1-indexed: {slide_idx+1}): '{slide_title}'")
# IMPORTANT: Match the real code - PowerPoint split creates empty first element
# Title index 0 β†’ PowerPoint slide index 1, etc.
ppt_slide_index = slide_idx + 1
# Search for 1 image
images = processor._search_and_download_images(slide_title, num_images=1, slide_index=ppt_slide_index)
if images:
internet_images.extend(images)
print(f" βœ“ Downloaded image with slide_index={images[0]['slide_index']}")
print(f"\n Total images downloaded: {len(internet_images)}")
for img in internet_images:
print(f" - Image for slide_index {img['slide_index']} (1-indexed: {img['slide_index']+1})")
print("\n4. Match images to slides:")
placements = processor._match_images_to_slides(slide_content, internet_images)
print(f" Created {len(placements)} placements:")
for p in placements:
print(f" - slide_index={p['slide_index']} (1-indexed: {p['slide_index']+1}), query='{p['image']['ocr_text']}'")
print("\n5. Simulate PowerPoint creation:")
slides = slide_content.split("###")
for i, slide in enumerate(slides):
if not slide.strip():
continue
lines = slide.strip().split("\n")
slide_title = lines[0].strip()
# Check for images (this is what the actual code does)
slide_images = []
for placement in placements:
if placement['slide_index'] == i:
slide_images.append(placement['image'])
print(f" Slide {i} (1-indexed: {i+1}): '{slide_title}'")
if slide_images:
print(f" βœ“ HAS IMAGE: {slide_images[0]['ocr_text']}")
else:
print(f" βœ— NO IMAGE")
print("\n" + "=" * 60)
print("Analysis Complete")
print("=" * 60)
if __name__ == '__main__':
test_workflow()