layout-viewer / scripts /launch_ui.py
Spyspook's picture
initial commit
ce82348 verified
# 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()