Ling-3.0-tiny-RKNN / tests /live_generation_control.py
Sariel00's picture
Publish Ling-3.0-tiny RKNN engine and model
3fd1a35 verified
Raw History Blame Contribute Delete
4.84 kB
"""Explicit test against an already running v2 engine; performs real inference."""
import argparse
import json
import time
import urllib.error
import urllib.request
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--base", default="http://127.0.0.1:19091")
args = parser.parse_args()
opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
def open_request(path, body=None):
return opener.open(urllib.request.Request(args.base + path,
data=None if body is None else json.dumps(body).encode(),
headers={"Content-Type": "application/json"}), timeout=180)
def request(path, body=None):
with open_request(path, body) as response:
return json.load(response)
def events(response):
for line in response:
if line.startswith(b"data:"):
data = line[5:].strip()
if data == b"[DONE]":
return
yield json.loads(data)
def rejected(path, body):
try:
request(path, body)
except urllib.error.HTTPError as exc:
assert exc.code == 409, exc.read().decode()
return
raise AssertionError("stale control accepted")
health = request("/health")
assert health["mindnano_integration_version"] >= 2
body = {"model": "mindnano-ling3-tiny", "messages": [{"role": "user", "content": "讲一个小兔子探索森林的长故事。"}],
"stream": True, "max_tokens": 128, "temperature": 0, "top_k": 20, "repeat_penalty": 1.05}
with open_request("/v1/chat/completions", dict(body, flow_control="ack")) as response:
stream = events(response)
first = next(event for event in stream if event.get("mindnano_flow"))
flow = first["mindnano_flow"]
before = request("/v1/generation/status")
time.sleep(0.5)
after = request("/v1/generation/status")
assert before["waiting_for_ack"] and after["waiting_for_ack"]
assert before["evaluated_steps"] == after["evaluated_steps"]
rejected("/v1/flow/ack", dict(flow, request_id="stale"))
rejected("/v1/flow/ack", dict(flow, sequence=flow["sequence"] + 1))
assert request("/v1/cancel", {"request_id": "stale"})["cancel_requested"] is False
request("/v1/flow/ack", flow)
second = next(event for event in stream if event.get("mindnano_flow"))
assert second["mindnano_flow"]["sequence"] == flow["sequence"] + 1
resumed = request("/v1/generation/status")
assert resumed["evaluated_steps"] > after["evaluated_steps"]
request("/v1/cancel", {"request_id": flow["request_id"]})
tail = list(stream)
assert any(event.get("error", {}).get("code") == "request_canceled" for event in tail)
print(json.dumps({"flow_ack": "PASS", "parked_steps": after["evaluated_steps"],
"resumed_steps": resumed["evaluated_steps"], "stale_controls": "PASS"}), flush=True)
with open_request("/v1/chat/completions", body) as response:
stream = events(response)
first = next(stream)
request_id = first["id"]
paused = request("/v1/generation/pause", {"request_id": request_id})
assert paused["paused"]
time.sleep(0.5)
parked = request("/v1/generation/status")
assert parked["evaluated_steps"] == paused["evaluated_steps"]
assert parked["paused"]
rejected("/v1/generation/resume", {"request_id": flow["request_id"]})
request("/v1/generation/resume", {"request_id": request_id})
next(event for event in stream if any(c.get("delta", {}).get("content") for c in event.get("choices", [])))
request("/v1/cancel", {"request_id": request_id})
list(stream)
print(json.dumps({"pause_resume": "PASS", "parked_steps": parked["evaluated_steps"]}), flush=True)
with open_request("/v1/chat/completions", dict(body, max_tokens=8, flow_control="ack")) as response:
stream = events(response)
first = next(event for event in stream if event.get("mindnano_flow"))
# Closing without acknowledging must unblock the inference thread.
deadline = time.monotonic() + 5
while request("/v1/generation/status")["active"]:
assert time.monotonic() < deadline, "disconnect did not cancel parked generation"
time.sleep(0.05)
result = request("/v1/chat/completions", dict(body, stream=False, max_tokens=8))
assert result["usage"]["completion_tokens"] > 0
assert result["mindnano_metrics"]["sampling"]["top_k"] == 20
assert result["mindnano_metrics"]["sampling"]["repeat_penalty"] == 1.05
print(json.dumps({"disconnect_recovery": "PASS", "sampling": result["mindnano_metrics"]["sampling"]}), flush=True)
if __name__ == "__main__":
main()