src/mcss/evaluation/streaming_report.py
"""Engineering pilot composition: online runner and post-seal evaluator meet only here."""
import copy
import json
from collections import defaultdict
from dataclasses import asdict
from pathlib import Path
from time import perf_counter
import torch
from mcss.data.episodes import OnlineEpisodeSource
from mcss.dynamic.carrier import DynamicSceneCarrier
from mcss.dynamic.config import CarrierConfig, WriteConfig
from mcss.dynamic.policy import FixedPolicy, ResidualThresholdPolicy
from mcss.dynamic.runner import StreamingRunner
from mcss.dynamic.types import Action, hash_value
from mcss.dynamic.write_rule import DirectWriteRule
from mcss.evaluation.sealed_queries import evaluate_sealed
from mcss.measurements import FixedMeasurementRenderer
def run_pilot(
index,
output_dir,
*,
device="cpu",
seed=17,
policies=("OFF", "FUSE", "COMPLETE", "ALL"),
max_units=1e12,
):
output = Path(output_dir)
output.mkdir(parents=True, exist_ok=True)
if (output / "report.json").exists():
raise FileExistsError("Use a new output directory to preserve previous pilot evidence")
if not index or any(entry["split_id"] not in {"train", "dev"} for entry in index):
raise ValueError("Engineering pilot only accepts declared train/dev episodes")
torch.manual_seed(seed)
torch.set_num_threads(4)
config, write_config = CarrierConfig(), WriteConfig()
base_carrier = DynamicSceneCarrier(config).to(device)
base_write = DirectWriteRule(config, write_config).to(device)
source_hash = hash_value(
{"carrier": base_carrier.state_dict(), "write_rule": base_write.state_dict()}
)
resolved = {
"carrier": asdict(config),
"write": asdict(write_config),
"seed": seed,
"device": str(device),
"policies": list(policies),
"max_units": max_units,
"renderer_n_samples": 16,
"index": index,
"initialization": "random_untrained_shared_across_policies",
}
(output / "resolved_config.json").write_text(
json.dumps(resolved, indent=2) + "\n", encoding="utf-8"
)
records = []
for entry in index:
for name in policies:
source = OnlineEpisodeSource.from_file(entry["online_manifest"], device=device)
if source.scene_id != entry["scene_id"] or source.split_id != entry["split_id"]:
raise ValueError("Pilot index and online manifest disagree")
query_count = int(entry["query_count"])
warmup = source.warmup()
policy = (
ResidualThresholdPolicy()
if name == "RESIDUAL_THRESHOLD"
else FixedPolicy(Action(name))
)
renderer = FixedMeasurementRenderer(n_samples=16)
runner = StreamingRunner(
copy.deepcopy(base_carrier),
copy.deepcopy(base_write),
renderer,
policy,
max_units=max_units,
)
if runner.checkpoint_hash != source_hash:
raise RuntimeError("Internal controls did not start from identical weights")
if torch.device(device).type == "cuda":
torch.cuda.reset_peak_memory_stats(device)
torch.cuda.synchronize(device)
started = perf_counter()
runner.reset(
warmup,
episode_id=source.episode_id,
scene_id=source.scene_id,
split_id=source.split_id,
query_vault_id=source.query_vault_id,
stream_steps=source.remaining_steps,
query_count=query_count,
)
while source.remaining_steps:
runner.step(source.next_observation())
sealed = runner.seal()
if torch.device(device).type == "cuda":
torch.cuda.synchronize(device)
adaptation_seconds = perf_counter() - started
evaluation_started = perf_counter()
metrics = evaluate_sealed(sealed, entry["query_manifest"], renderer)
if len(metrics["per_query"]) != query_count:
raise ValueError("Query count differs from the declared pilot protocol")
if torch.device(device).type == "cuda":
torch.cuda.synchronize(device)
evaluation_seconds = perf_counter() - evaluation_started
# Query count is declared by the protocol, never inferred by the policy from labels.
for _ in range(query_count):
runner.budget.record("query_render", runner.budget.render_units)
peak = (
torch.cuda.max_memory_allocated(device)
if torch.device(device).type == "cuda"
else None
)
record = {
"episode_id": source.episode_id,
"scene_id": source.scene_id,
"split_id": source.split_id,
"policy": name,
"trained_policy": False,
"state_hash": sealed.state_hash,
"checkpoint_hash": sealed.checkpoint_hash,
"fast_state_hash": sealed.fast_state_hash,
"observed_ids": list(sealed.observed_ids),
"adaptation_seconds": adaptation_seconds,
"evaluation_seconds": evaluation_seconds,
"peak_cuda_allocated_bytes": peak,
"metrics": metrics,
"budget": runner.budget.report(),
"history": runner.history,
}
path = output / f"{source.episode_id}_{name}.json"
path.write_text(json.dumps(record, indent=2, allow_nan=False) + "\n", encoding="utf-8")
records.append(record)
print(
f"Completed {source.scene_id} {name}: {adaptation_seconds:.2f}s adaptation",
flush=True,
)
groups = defaultdict(list)
for record in records:
groups[record["split_id"]].append(record["scene_id"])
report = {
"schema": "mcss.dynamic.engineering_pilot.v1",
"status": "complete",
"scientific_performance_evidence": False,
"initialization": resolved["initialization"],
"purpose": "Validate software execution and isolation, not method accuracy",
"configuration_hash": hash_value(resolved),
"shared_checkpoint_hash": source_hash,
"episodes": len(index),
"runs": len(records),
"scenes_by_split": {key: sorted(set(value)) for key, value in groups.items()},
"final_holdout_used": False,
"records": records,
}
(output / "report.json").write_text(
json.dumps(report, indent=2, allow_nan=False) + "\n", encoding="utf-8"
)
return report