INNER CODE UNIT · Python
cmd_serve
Laurent00TT/PharosRAG · src/pharos/cli.py:26
def cmd_serve(args) -> None:
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s")
import uvicorn
from .service import create_app
cfg = config.from_env()
host, port = args.host or cfg.host, args.port or cfg.port
print(f"Pharos v{__version__} http://{host}:{port} index={cfg.qdrant_path} "
f"collection={cfg.collection} tenant={cfg.tenant or '(未设,fail-closed)'}", flush=True)
# 优雅停机(阶段F):SIGTERM -> uvicorn 停止收新请求、drain 在途,最多等 25s 后强制退出。
# 25 < compose stop_grace_period 30s -> 在 docker SIGKILL 前干净退出(in-flight /v1/ask 不被截杀)。
uvicorn.run(create_app(cfg), host=host, port=port, log_level="info",
timeout_graceful_shutdown=25)
def cmd_mcp(args) -> None:
if getattr(args, "direct", False):
# no-daemon 兜底:stdio 直连引擎(独占嵌入式 Qdrant 锁 + 常驻 GPU),不经守护进程
from .mcp_stdio import main as stdio_main