scripts/run_dynamic_ttt_pilot.py
"""Run modular untrained train/dev controls; never use this as a final test entry point."""
import argparse
import json
from pathlib import Path
from mcss.data.pilot_provenance import validate_pilot_entries, write_pilot_provenance
from mcss.evaluation.streaming_report import run_pilot
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--index", type=Path, required=True)
parser.add_argument("--output", type=Path, required=True)
parser.add_argument("--device", default="cpu")
parser.add_argument("--seed", type=int, default=17)
parser.add_argument("--max-episodes", type=int)
parser.add_argument(
"--policies",
nargs="+",
default=["OFF", "FUSE", "COMPLETE", "ALL"],
choices=["OFF", "FUSE", "COMPLETE", "ALL", "RESIDUAL_THRESHOLD"],
)
args = parser.parse_args()
data = json.loads(args.index.read_text(encoding="utf-8"))
index = data["episodes"] if isinstance(data, dict) else data
if args.max_episodes is not None:
if args.max_episodes < 1:
parser.error("--max-episodes must be positive")
index = index[: args.max_episodes]
provenance = validate_pilot_entries(index)
report = run_pilot(
index, args.output, device=args.device, seed=args.seed, policies=args.policies
)
provenance_path = write_pilot_provenance(args.output / "manifest_provenance.json", provenance)
print(
json.dumps(
{
"status": report["status"],
"runs": report["runs"],
"report": str(args.output / "report.json"),
"manifest_provenance": str(provenance_path),
}
)
)
if __name__ == "__main__":
main()