# 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()