PinkSky / server /main.py
FreshPixels's picture
Rename main.py to server/main.py
0af83ca verified
Raw
History Blame Contribute Delete
2.49 kB
"""Точка входа — запуск сервера"""
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()