Spaces:
Running on Zero
Running on Zero
| 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() |