Fix action-aware burn-in gate

This commit is contained in:
2026-07-14 20:47:23 +08:00
parent 1db737e641
commit c5ab073af5
5 changed files with 343 additions and 14 deletions

View File

@@ -334,6 +334,30 @@ def validate_result(
raise RuntimeError(f"selection hash mismatch {result_key}: {role}")
def burnin_gate(
result: Mapping[str, Any],
*,
expected_count: int,
maximum_elapsed_s: float,
) -> dict[str, Any]:
if result.get("kind") != "anchor":
raise RuntimeError("burnin gate received a non-anchor result")
if int(result["selection"]["count"]) != expected_count:
raise RuntimeError("burnin gate received the wrong request set")
elapsed_s = float(result["interval"]["elapsed_s"])
summary = {
"elapsed_s": elapsed_s,
"pass_rate": float(result["pass_rate"]),
"feasible": bool(result["feasible"]),
}
if elapsed_s > maximum_elapsed_s:
raise RuntimeError(
f"burnin throughput gate failed: {elapsed_s:.3f}s > "
f"{maximum_elapsed_s:.3f}s"
)
return summary
def run_client(
*,
entry: dict[str, Any],
@@ -458,7 +482,7 @@ def execute_session(
first = manifest["repetitions"][str(config["repetition_order"][0])]
session_state["status"] = "warmup"
atomic_json(state_path, state)
burnin_result = run_client(
run_client(
entry=entry,
config=config,
role="warmup",
@@ -472,7 +496,7 @@ def execute_session(
session_state["status"] = "burnin"
atomic_json(state_path, state)
burnin = manifest["burnin"]
run_client(
burnin_result = run_client(
entry=entry,
config=config,
role="burnin",
@@ -482,19 +506,12 @@ def execute_session(
state=state,
timeout_s=float(manifest["engine"]["client_timeout_s"]),
)
burnin_elapsed_s = float(burnin_result["interval"]["elapsed_s"])
session_state["burnin"] = {
"elapsed_s": burnin_elapsed_s,
"pass_rate": float(burnin_result["pass_rate"]),
"feasible": bool(burnin_result["feasible"]),
}
session_state["burnin"] = burnin_gate(
burnin_result,
expected_count=int(burnin["selected_count"]),
maximum_elapsed_s=float(manifest["engine"]["burnin_max_elapsed_s"]),
)
atomic_json(state_path, state)
burnin_limit_s = float(manifest["engine"]["burnin_max_elapsed_s"])
if burnin_elapsed_s > burnin_limit_s:
raise RuntimeError(
f"burnin throughput gate failed: {burnin_elapsed_s:.3f}s > "
f"{burnin_limit_s:.3f}s"
)
session_state["status"] = "measured"
atomic_json(state_path, state)
for repetition in config["repetition_order"]: