Spaces:
Sleeping
Sleeping
| # scripts/launch_ui.py | |
| """ | |
| Главный скрипт для запуска веб-интерфейса приложения. | |
| Осуществляет настройку путей, предварительный разогрев кэша ОЗУ | |
| и старт сервера Gradio. | |
| """ | |
| import logging | |
| import os | |
| import sys | |
| from pathlib import Path | |
| from omegaconf import DictConfig, OmegaConf | |
| # Добавляем корень проекта и папку src в sys.path для корректных импортов | |
| current_file: Path = Path(__file__).resolve() | |
| project_root: Path = current_file.parent.parent | |
| if str(project_root) not in sys.path: | |
| sys.path.append(str(project_root)) | |
| src_dir: Path = project_root / "src" | |
| if str(src_dir) not in sys.path: | |
| sys.path.append(str(src_dir)) | |
| from utils.logger import setup_logger | |
| from layout_generator.pipeline import generate_layout_stream | |
| from ui.layout import create_ui | |
| # Настройка логгера | |
| logger: logging.Logger = logging.getLogger(__name__) | |
| def main() -> None: | |
| """Точка входа в приложение.""" | |
| logger.info("🚀 Запуск процесса инициализации приложения...") | |
| # 1. Загрузка конфигурации (без устаревших параметров инвентаря) | |
| config_path: Path = project_root / "configs" / "layout_config.yaml" | |
| if config_path.exists(): | |
| cfg: DictConfig = OmegaConf.load(config_path) | |
| else: | |
| logger.warning(f"⚠️ Конфигурация {config_path} не найдена. Используем значения по умолчанию.") | |
| cfg = OmegaConf.create({ | |
| "layout": {"size_n": 10, "size_m": 10} | |
| }) | |
| # 2. Разогрев кэша (холостой прогон генератора с фейковым графом) | |
| logger.info("⚙️ Подготовка сервера. Запуск тестовой сцены для инициализации ОЗУ...") | |
| try: | |
| warmup_tracker = setup_logger() | |
| # Минимальный граф для безопасного прогрева (чтобы загрузить геометрию холодильника) | |
| dummy_graph = { | |
| "nodes": [{"id": "warmup_node", "type": "showcase_glb", "items": {}}], | |
| "edges": [] | |
| } | |
| # Прогоняем стрим вхолостую | |
| for _ in generate_layout_stream( | |
| project_dir=project_root, | |
| tracker=warmup_tracker, | |
| size_n=5, size_m=5, | |
| layout_graph=dummy_graph | |
| ): | |
| pass | |
| logger.info("✅ Разогрев кэша успешно завершен.") | |
| except Exception as e: | |
| logger.error(f"❌ Ошибка при разогреве кэша: {e}", exc_info=True) | |
| # 3. Сборка и запуск интерфейса | |
| app = create_ui(cfg) | |
| is_hf_space: bool = os.environ.get("SPACE_ID") is not None | |
| app.launch(server_name="0.0.0.0", server_port=7860, share=not is_hf_space, debug=False) | |
| if __name__ == "__main__": | |
| main() |