from abc import ABC, abstractmethod from typing import List, Optional from PIL import Image class ImageProviderBase(ABC): """ Abstract base class for image generation providers. All providers must implement the generate method. """ @abstractmethod def generate( self, prompt: str, negative_prompt: str = "", n_images: int = 1, **kwargs ) -> List[Image.Image]: """ Generate images based on prompt. Args: prompt: Main generation prompt negative_prompt: Things to avoid in generation n_images: Number of images to generate **kwargs: Provider-specific parameters Returns: List of PIL Image objects """ pass class VideoProviderBase(ABC): """ Abstract base class for video generation providers. """ @abstractmethod def generate( self, prompt: str, duration: int = 10, fps: int = 30, **kwargs ) -> str: """ Generate video based on prompt. Args: prompt: Video generation prompt duration: Video duration in seconds fps: Frames per second **kwargs: Provider-specific parameters Returns: Path to generated video file """ pass class Model3DProviderBase(ABC): """ Abstract base class for 3D model generation providers. """ @abstractmethod def generate( self, prompt: str, export_format: str = "obj", **kwargs ) -> str: """ Generate 3D model based on prompt. Args: prompt: 3D asset generation prompt export_format: Export format (obj, fbx, gltf, etc.) **kwargs: Provider-specific parameters Returns: Path to generated 3D model file """ pass