"""测试替身:模拟 llama-server(供 LlamaServerManager 封闭单测,D11)。 - 解析 --port / -m / -ngl / -c(与真实 llama-server 参数对齐) - 把 pid / 收到的参数写入环境变量 FAKE_MARKER 指向的 JSON 文件 - 在本机端口起一个最小 http 服务:/health 返回 {"status":"ok"} - 进程被终止时正常退出 """ import argparse import http.server import json import os import sys def main() -> int: parser = argparse.ArgumentParser(prog="fake-llama-server") parser.add_argument("--port", type=int, default=8901) parser.add_argument("-m", dest="model", default="") parser.add_argument("-ngl", dest="ngl", default="0") parser.add_argument("-c", dest="ctx", default="8192") parser.add_argument("-ctk", dest="ctk", default="") parser.add_argument("-ctv", dest="ctv", default="") args, _ = parser.parse_known_args() marker = os.environ.get("FAKE_MARKER") if marker: os.makedirs(os.path.dirname(marker) or ".", exist_ok=True) with open(marker, "w", encoding="utf-8") as f: json.dump({"pid": os.getpid(), "port": args.port, "model": args.model, "args": sys.argv[1:]}, f) class Handler(http.server.BaseHTTPRequestHandler): def do_GET(self): if self.path.startswith("/health"): body = json.dumps({"status": "ok", "server": "fake-llama"}).encode("utf-8") self.send_response(200) self.send_header("Content-Type", "application/json") self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) else: self.send_response(404) self.end_headers() def log_message(self, *a): pass srv = http.server.ThreadingHTTPServer(("127.0.0.1", args.port), Handler) srv.serve_forever() return 0 if __name__ == "__main__": sys.exit(main())