Spaces:
Sleeping
Sleeping
File size: 3,238 Bytes
ce82348 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # 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() |