"""Web 服务启动入口(S5)。 用法: python scripts/serve.py [--host 0.0.0.0] [--port 8000] [--fake] - 默认真实 LLM 模式(需 .env 配置 GENESIS_INFERENCE__API_KEY,generate 时按需加载) - --fake 为离线确定性引擎(无需 key,适合评审演示环境) - 会话/文件/结果存储于 data/server/(SQLite + 上传快照,不入库) """ from __future__ import annotations import argparse import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[1] if str(ROOT / "src") not in sys.path: sys.path.insert(0, str(ROOT / "src")) import uvicorn # noqa: E402 from genesis.server.app import create_app # noqa: E402 def main() -> None: p = argparse.ArgumentParser(description="Genesis Web 服务") p.add_argument("--host", default="127.0.0.1") p.add_argument("--port", type=int, default=8000) p.add_argument("--fake", action="store_true", help="离线 Fake 引擎(无需 API key)") p.add_argument("--data-root", default=str(ROOT / "data" / "server"), help="会话/文件/结果存储目录") args = p.parse_args() app = create_app(data_root=args.data_root, engine="fake" if args.fake else None) print(f"Genesis Web 服务启动: http://{args.host}:{args.port} (mode={'fake' if args.fake else 'real'})") uvicorn.run(app, host=args.host, port=args.port) if __name__ == "__main__": main()