"""测试替身:模拟 llama-server(供 LlamaServerManager 封闭单测,D11)。 - 解析 --port / -m / -ngl / -c(与真实 llama-server 参数对齐) - 把 pid / 收到的参数写入 FAKE_MARKER_NAME 指定文件名的 JSON(固定在系统临时目录) - 在本机端口起一个最小 http 服务:/health 返回 {"status":"ok"} - 进程被终止时正常退出 """ import argparse import http.server import json import os import sys import tempfile from pathlib import Path 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_name = os.environ.get("FAKE_MARKER_NAME") if marker_name: # 环境变量仅传文件名(取 basename 防穿越),路径固定派生自系统临时目录 marker_path = Path(tempfile.gettempdir()) / Path(marker_name).name marker_path.write_text(json.dumps({"pid": os.getpid(), "port": args.port, "model": args.model, "args": sys.argv[1:]}), encoding="utf-8") 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())