55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
"""测试替身:模拟 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())
|