import gc from typing import List import gradio as gr from core.settings import ALL_MODEL_MAP from utils.app_utils import _ensure_model_downloaded class ModelManager: _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(ModelManager, cls).__new__(cls, *args, **kwargs) return cls._instance def __init__(self): if hasattr(self, 'initialized'): return self.initialized = True print("✅ ModelManager initialized.") def ensure_models_downloaded(self, required_models: List[str], progress): print(f"--- [ModelManager] Ensuring models are downloaded: {required_models} ---") files_to_download = set() for display_name in required_models: if display_name in ALL_MODEL_MAP: _, components, _, _ = ALL_MODEL_MAP[display_name] for component_key, component_file in components.items(): if component_key in ['unet', 'clip', 'vae', 'lora']: files_to_download.add(component_file) files_to_download = list(files_to_download) total_files = len(files_to_download) for i, filename in enumerate(files_to_download): if progress and hasattr(progress, '__call__'): progress(i / total_files, desc=f"Checking file: {filename}") try: _ensure_model_downloaded(filename, progress) except Exception as e: raise gr.Error(f"Failed to download model component '{filename}'. Reason: {e}") print(f"--- [ModelManager] ✅ All required models are present on disk. ---") model_manager = ModelManager()