Fix action-aware burn-in gate
This commit is contained in:
@@ -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"]:
|
||||
|
||||
Reference in New Issue
Block a user