""" DeepSeek Web Adapter - 主入口 启动 Adapter 连接 Array 平台 + 控制面板 """ import asyncio import logging import sys import threading import signal from src.config import config from src.adapter import DeepSeekWebAdapter from src.admin_server import AdminServer logging.basicConfig( level=getattr(logging, config.log_level, logging.INFO), format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", handlers=[ logging.StreamHandler(sys.stdout), logging.FileHandler("adapter_debug.log", encoding="utf-8"), ], ) logger = logging.getLogger(__name__) def main(): logger.info("=" * 60) logger.info(" DeepSeek Web Adapter - 启动中...") logger.info("=" * 60) adapter = DeepSeekWebAdapter() admin = AdminServer(adapter) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) admin.set_adapter(adapter, loop) admin_thread = threading.Thread( target=admin.run, kwargs={"host": "0.0.0.0", "port": config.admin_port}, daemon=True, ) admin_thread.start() logger.info(f"控制面板已启动: http://localhost:{config.admin_port}") def shutdown(sig=None, frame=None): logger.info("收到关闭信号,正在退出...") loop.call_soon_threadsafe(loop.stop) signal.signal(signal.SIGINT, shutdown) signal.signal(signal.SIGTERM, shutdown) logger.info("正在连接 Array 平台...") try: loop.run_until_complete(adapter.run()) except KeyboardInterrupt: logger.info("用户中断,正在退出...") except Exception as e: logger.error(f"Adapter 运行异常: {e}", exc_info=True) finally: if adapter.session: loop.run_until_complete(adapter.stop_deepseek_session()) loop.close() logger.info("DeepSeek Web Adapter 已关闭") if __name__ == "__main__": main()