| | |
| | """ |
| | Comprehensive Example of Multi-Model Orchestrator |
| | Demonstrates parent-child LLM relationships with CLIP-GPT2 and Stable Diffusion |
| | """ |
| |
|
| | import asyncio |
| | import json |
| | import time |
| | from pathlib import Path |
| | from simple_orchestrator import SimpleMultiModelOrchestrator, AsyncMultiModelOrchestrator |
| |
|
| | def create_sample_image(): |
| | """Create a sample image for testing (if no image is available)""" |
| | from PIL import Image, ImageDraw, ImageFont |
| | import numpy as np |
| | |
| | |
| | img = Image.new('RGB', (512, 512), color='lightblue') |
| | draw = ImageDraw.Draw(img) |
| | |
| | |
| | try: |
| | |
| | font = ImageFont.load_default() |
| | except: |
| | font = None |
| | |
| | draw.text((50, 50), "Sample Image", fill='black', font=font) |
| | draw.text((50, 100), "For Testing", fill='black', font=font) |
| | |
| | |
| | draw.rectangle([100, 200, 400, 300], fill='red', outline='black') |
| | draw.ellipse([150, 350, 350, 450], fill='green', outline='black') |
| | |
| | |
| | sample_path = "sample_image.jpg" |
| | img.save(sample_path) |
| | print(f"Created sample image: {sample_path}") |
| | return sample_path |
| |
|
| | def example_basic_usage(): |
| | """Example 1: Basic usage of the orchestrator""" |
| | print("="*60) |
| | print("EXAMPLE 1: BASIC USAGE") |
| | print("="*60) |
| | |
| | |
| | orchestrator = SimpleMultiModelOrchestrator() |
| | |
| | |
| | print("Initializing models...") |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | |
| | status = orchestrator.get_status() |
| | print(f"Orchestrator Status: {json.dumps(status, indent=2)}") |
| | |
| | |
| | sample_image = create_sample_image() |
| | |
| | |
| | print("\n--- Image Captioning ---") |
| | try: |
| | caption = orchestrator.generate_caption(sample_image) |
| | print(f"Generated Caption: {caption}") |
| | except Exception as e: |
| | print(f"Caption generation failed: {e}") |
| | |
| | |
| | print("\n--- Text-to-Image Generation ---") |
| | try: |
| | image_path = orchestrator.generate_image("A beautiful sunset over mountains with a lake") |
| | print(f"Generated Image: {image_path}") |
| | except Exception as e: |
| | print(f"Image generation failed: {e}") |
| | |
| | |
| | print("\n--- Task Routing ---") |
| | try: |
| | |
| | caption = orchestrator.route_task("caption", sample_image) |
| | print(f"Routed Caption: {caption}") |
| | |
| | |
| | image_path = orchestrator.route_task("generate_image", "A cat sitting on a windowsill") |
| | print(f"Routed Image: {image_path}") |
| | except Exception as e: |
| | print(f"Task routing failed: {e}") |
| |
|
| | def example_multimodal_processing(): |
| | """Example 2: Multimodal processing""" |
| | print("\n" + "="*60) |
| | print("EXAMPLE 2: MULTIMODAL PROCESSING") |
| | print("="*60) |
| | |
| | orchestrator = SimpleMultiModelOrchestrator() |
| | |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | sample_image = create_sample_image() |
| | |
| | |
| | print("Processing multimodal task...") |
| | try: |
| | results = orchestrator.process_multimodal_task( |
| | image_path=sample_image, |
| | text_prompt="A serene landscape with mountains and a flowing river" |
| | ) |
| | |
| | print("Multimodal Results:") |
| | for key, value in results.items(): |
| | print(f" {key}: {value}") |
| | |
| | except Exception as e: |
| | print(f"Multimodal processing failed: {e}") |
| |
|
| | async def example_async_processing(): |
| | """Example 3: Async processing for better performance""" |
| | print("\n" + "="*60) |
| | print("EXAMPLE 3: ASYNC PROCESSING") |
| | print("="*60) |
| | |
| | orchestrator = AsyncMultiModelOrchestrator() |
| | |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | sample_image = create_sample_image() |
| | |
| | |
| | print("Processing async multimodal task...") |
| | try: |
| | results = await orchestrator.process_multimodal_async( |
| | image_path=sample_image, |
| | text_prompt="A futuristic cityscape at night with flying cars" |
| | ) |
| | |
| | print("Async Multimodal Results:") |
| | for key, value in results.items(): |
| | print(f" {key}: {value}") |
| | |
| | except Exception as e: |
| | print(f"Async multimodal processing failed: {e}") |
| |
|
| | def example_batch_processing(): |
| | """Example 4: Batch processing multiple tasks""" |
| | print("\n" + "="*60) |
| | print("EXAMPLE 4: BATCH PROCESSING") |
| | print("="*60) |
| | |
| | orchestrator = SimpleMultiModelOrchestrator() |
| | |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | sample_image = create_sample_image() |
| | |
| | |
| | caption_tasks = [sample_image] * 3 |
| | image_tasks = [ |
| | "A majestic eagle soaring over mountains", |
| | "A cozy coffee shop on a rainy day", |
| | "A vibrant garden with colorful flowers" |
| | ] |
| | |
| | print("Processing batch tasks...") |
| | |
| | |
| | print("\n--- Batch Caption Generation ---") |
| | for i, image_path in enumerate(caption_tasks): |
| | try: |
| | caption = orchestrator.generate_caption(image_path) |
| | print(f"Caption {i+1}: {caption}") |
| | except Exception as e: |
| | print(f"Caption {i+1} failed: {e}") |
| | |
| | |
| | print("\n--- Batch Image Generation ---") |
| | for i, prompt in enumerate(image_tasks): |
| | try: |
| | image_path = orchestrator.generate_image(prompt) |
| | print(f"Image {i+1}: {image_path}") |
| | except Exception as e: |
| | print(f"Image {i+1} failed: {e}") |
| |
|
| | def example_error_handling(): |
| | """Example 5: Error handling and recovery""" |
| | print("\n" + "="*60) |
| | print("EXAMPLE 5: ERROR HANDLING") |
| | print("="*60) |
| | |
| | orchestrator = SimpleMultiModelOrchestrator() |
| | |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | |
| | print("Testing error handling...") |
| | |
| | |
| | try: |
| | caption = orchestrator.generate_caption("nonexistent_image.jpg") |
| | print(f"Caption: {caption}") |
| | except Exception as e: |
| | print(f"Expected error for invalid image: {e}") |
| | |
| | |
| | try: |
| | image_path = orchestrator.generate_image("") |
| | print(f"Image: {image_path}") |
| | except Exception as e: |
| | print(f"Expected error for empty prompt: {e}") |
| | |
| | |
| | try: |
| | result = orchestrator.route_task("invalid_task", "test") |
| | print(f"Result: {result}") |
| | except Exception as e: |
| | print(f"Expected error for invalid task: {e}") |
| |
|
| | def example_task_history(): |
| | """Example 6: Task history and monitoring""" |
| | print("\n" + "="*60) |
| | print("EXAMPLE 6: TASK HISTORY") |
| | print("="*60) |
| | |
| | orchestrator = SimpleMultiModelOrchestrator() |
| | |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | sample_image = create_sample_image() |
| | |
| | |
| | print("Performing tasks to build history...") |
| | |
| | try: |
| | |
| | caption1 = orchestrator.generate_caption(sample_image) |
| | print(f"Task 1 - Caption: {caption1}") |
| | |
| | |
| | image1 = orchestrator.generate_image("A peaceful forest scene") |
| | print(f"Task 2 - Image: {image1}") |
| | |
| | |
| | caption2 = orchestrator.generate_caption(sample_image) |
| | print(f"Task 3 - Caption: {caption2}") |
| | |
| | except Exception as e: |
| | print(f"Task execution failed: {e}") |
| | |
| | |
| | print("\n--- Task History ---") |
| | history = orchestrator.get_task_history() |
| | |
| | for i, task in enumerate(history): |
| | print(f"\nTask {i+1}:") |
| | print(f" Type: {task['task_type']}") |
| | print(f" Input: {task['input_data']}") |
| | print(f" Output: {task['output']}") |
| | print(f" Processing Time: {task['processing_time']:.2f}s") |
| | print(f" Success: {task.get('error') is None}") |
| | if task.get('error'): |
| | print(f" Error: {task['error']}") |
| | |
| | |
| | orchestrator.save_task_history("example_task_history.json") |
| | print(f"\nTask history saved to example_task_history.json") |
| |
|
| | def example_custom_configuration(): |
| | """Example 7: Custom configuration and parameters""" |
| | print("\n" + "="*60) |
| | print("EXAMPLE 7: CUSTOM CONFIGURATION") |
| | print("="*60) |
| | |
| | orchestrator = SimpleMultiModelOrchestrator() |
| | |
| | if not orchestrator.initialize_models(): |
| | print("Failed to initialize models. Exiting.") |
| | return |
| | |
| | sample_image = create_sample_image() |
| | |
| | |
| | print("Testing different generation parameters...") |
| | |
| | |
| | try: |
| | |
| | custom_path = "custom_generated_image.png" |
| | image_path = orchestrator.generate_image( |
| | "A magical castle in the clouds", |
| | output_path=custom_path |
| | ) |
| | print(f"Custom path image: {image_path}") |
| | |
| | except Exception as e: |
| | print(f"Custom configuration failed: {e}") |
| |
|
| | def main(): |
| | """Run all examples""" |
| | print("Multi-Model Orchestrator Examples") |
| | print("This script demonstrates various features of the orchestrator.") |
| | print("Note: Some operations may take time and require significant memory.") |
| | |
| | try: |
| | |
| | example_basic_usage() |
| | example_multimodal_processing() |
| | asyncio.run(example_async_processing()) |
| | example_batch_processing() |
| | example_error_handling() |
| | example_task_history() |
| | example_custom_configuration() |
| | |
| | print("\n" + "="*60) |
| | print("ALL EXAMPLES COMPLETED SUCCESSFULLY!") |
| | print("="*60) |
| | |
| | print("\nGenerated files:") |
| | if Path("sample_image.jpg").exists(): |
| | print(" - sample_image.jpg (test image)") |
| | if Path("generated_image_*.png").exists(): |
| | print(" - generated_image_*.png (generated images)") |
| | if Path("example_task_history.json").exists(): |
| | print(" - example_task_history.json (task history)") |
| | |
| | print("\nNext steps:") |
| | print("1. Check the generated images and task history") |
| | print("2. Experiment with different prompts and parameters") |
| | print("3. Integrate the orchestrator into your own applications") |
| | print("4. Add more child models to the system") |
| | |
| | except Exception as e: |
| | print(f"\nError during execution: {e}") |
| | print("This might be due to:") |
| | print("- Insufficient memory (try reducing batch sizes)") |
| | print("- Missing dependencies (check multi_model_requirements.txt)") |
| | print("- GPU not available (will use CPU instead)") |
| | print("- Network issues (models need to be downloaded)") |
| |
|
| | if __name__ == "__main__": |
| | main() |