File size: 2,487 Bytes
feef734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Точка входа — запуск сервера"""
import sys
import signal
import logging
from http.server import HTTPServer
from .config import PORT, TOKEN, API_KEY, ensure_folders
from .state import STATE
from .internet_agent import INTERNET_AGENT
from .routes import WebhookHandler
from .process_manager import PROCESS_MANAGER

def handle_shutdown(signum, frame):
    """Корректная остановка сервера"""
    logging.info("Shutdown signal received")
    PROCESS_MANAGER.cancel_all()
    STATE.save_history()
    logging.info("Server shutdown gracefully")

def configure_logging():
    """Настройка структурированного логирования"""
    logging.basicConfig(
        level=logging.INFO,
        format="[%(asctime)s] [%(levelname)s] [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
        handlers=[
            logging.StreamHandler()
        ]
    )
    # Отключаем логирование urllib
    logging.getLogger("urllib3").setLevel(logging.WARNING)

def main():
    configure_logging()
    logger = logging.getLogger(__name__)

    logger.info("=" * 60)
    logger.info("🧠 PINKSKY v7.0 — МОДУЛЬНАЯ АРХИТЕКТУРА")
    logger.info("=" * 60)

    if not TOKEN:
        logger.critical("TELEGRAM_BOT_TOKEN не найден!")
        sys.exit(1)
    if not API_KEY:
        logger.warning("NVIDIA_API_KEY не найден")

    ensure_folders()
    logger.info(f"Загружено моделей: {len(STATE.models)}")
    logger.info(f"Загружено ролей: {len(STATE.roles)}")
    logger.info(f"Загружено кондукторов: {len(STATE.conductors)}")
    logger.info(f"Интернет: {'✅' if STATE.build_context.get('internet_access', True) else '❌'}")
    logger.info(f"Кэш поиска: {INTERNET_AGENT.get_cache_stats()}")

    STATE.current_mode = "chat"
    server = HTTPServer(("0.0.0.0", PORT), WebhookHandler)

    # Настройка обработчиков сигналов
    signal.signal(signal.SIGINT, handle_shutdown)
    signal.signal(signal.SIGTERM, handle_shutdown)

    logger.info(f"🚀 Сервер запущен на порту {PORT}")
    logger.info("=" * 60)

    try:
        server.serve_forever()
    except KeyboardInterrupt:
        handle_shutdown(None, None)
    finally:
        server.server_close()
        logger.info("Сервер остановлен")

if __name__ == "__main__":
    main()