139 lines
5.8 KiB
Python
Executable file
139 lines
5.8 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
"""Run and score the read-only m3taversal out-of-sample suite on the live VPS handler."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import uuid
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
import run_leo_direct_claim_handler_suite as handler
|
|
import working_leo_m3taversal_oos_benchmark as benchmark
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
REPORT_DIR = ROOT / "docs" / "reports" / "leo-working-state-20260709"
|
|
RESULTS_JSON = REPORT_DIR / "telegram-handler-m3taversal-oos-suite-current.json"
|
|
SCORE_JSON = REPORT_DIR / "telegram-handler-m3taversal-oos-suite-score-current.json"
|
|
SCORE_MARKDOWN = REPORT_DIR / "telegram-handler-m3taversal-oos-suite-score-current.md"
|
|
|
|
|
|
def write_score_markdown(path: Path, report: dict[str, Any]) -> None:
|
|
score = report["score"]
|
|
lines = [
|
|
"# Working Leo m3taversal Out-of-Sample Score",
|
|
"",
|
|
f"Generated UTC: `{report['generated_at_utc']}`",
|
|
f"Pass: `{score['pass']}`",
|
|
f"Prompts: `{score['passes']}/{score['expected_prompt_count']}`",
|
|
f"DB counts changed: `{report['db_counts_changed']}`",
|
|
f"Service unchanged: `{report['service_unchanged']}`",
|
|
f"Temporary profile removed: `{report['temp_profile_removed']}`",
|
|
f"Database context injections: `{report['database_context_injection_count']}`",
|
|
f"Database context all OK: `{report['database_context_all_ok']}`",
|
|
f"Posted to Telegram: `{report['posted_to_telegram']}`",
|
|
"",
|
|
"## Prompt Scores",
|
|
"",
|
|
]
|
|
for item in score["scores"]:
|
|
lines.append(f"- `{item['prompt_id']}` / `{item['dimension']}`: `pass={item['pass']}`")
|
|
lines.extend(
|
|
[
|
|
"",
|
|
"## Claim Ceiling",
|
|
"",
|
|
"A pass proves broad out-of-sample and same-session-memory behavior through the live VPS GatewayRunner "
|
|
"using a temporary profile, with no Telegram post and no DB count change. It does not prove human-visible "
|
|
"Telegram delivery, production DB apply, or GCP parity.",
|
|
"",
|
|
]
|
|
)
|
|
path.write_text("\n".join(lines), encoding="utf-8")
|
|
|
|
|
|
def build_score_report(report: dict[str, Any], *, memory_token: str) -> dict[str, Any]:
|
|
score = benchmark.score_results(report.get("results") or [], memory_token=memory_token)
|
|
service_unchanged = bool((report.get("service_before_after") or {}).get("unchanged_from_preexisting_live_readback"))
|
|
return {
|
|
"generated_at_utc": datetime.now(timezone.utc).isoformat(),
|
|
"mode": "working_leo_m3taversal_out_of_sample_live_vps_handler_score",
|
|
"source_results_json": str(RESULTS_JSON),
|
|
"memory_token": memory_token,
|
|
"score": score,
|
|
"db_counts_changed": report.get("db_counts_changed"),
|
|
"service_unchanged": service_unchanged,
|
|
"temp_profile_removed": report.get("temp_profile_removed"),
|
|
"database_context_injection_count": report.get("database_context_injection_count"),
|
|
"database_context_all_ok": report.get("database_context_all_ok"),
|
|
"posted_to_telegram": report.get("posted_to_telegram"),
|
|
"production_db_apply_ran": False,
|
|
}
|
|
|
|
|
|
def score_report_passes(report: dict[str, Any], score_report: dict[str, Any]) -> bool:
|
|
return bool(
|
|
report.get("remote_returncode") == 0
|
|
and report.get("pass_runtime") is True
|
|
and report.get("db_counts_changed") is False
|
|
and score_report["service_unchanged"]
|
|
and report.get("temp_profile_removed") is True
|
|
and report.get("database_context_all_ok") is True
|
|
and int(report.get("database_context_injection_count") or 0) >= len(report.get("results") or [])
|
|
and report.get("posted_to_telegram") is False
|
|
and score_report["score"]["pass"]
|
|
)
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument(
|
|
"--score-existing",
|
|
action="store_true",
|
|
help="Rescore the retained live transcript without making another remote model call.",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
if args.score_existing:
|
|
report = json.loads(RESULTS_JSON.read_text(encoding="utf-8"))
|
|
previous_score = json.loads(SCORE_JSON.read_text(encoding="utf-8"))
|
|
memory_token = str(previous_score["memory_token"])
|
|
else:
|
|
memory_token = "demo-ledger-" + uuid.uuid4().hex[:8]
|
|
prompts = [
|
|
{"id": prompt["id"], "dimension": prompt["dimension"], "message": prompt["message"]}
|
|
for prompt in benchmark.prompt_catalog(memory_token)
|
|
]
|
|
remote = handler.run_remote(
|
|
prompts=prompts,
|
|
suite_mode="live_vps_gatewayrunner_temp_profile_m3taversal_out_of_sample_suite",
|
|
report_prefix="leo-m3taversal-oos-handler-report",
|
|
prompt_note="Broad out-of-sample m3taversal prompts plus randomized memory and participant-identity checks.",
|
|
)
|
|
report = handler.write_output(remote, output_json=RESULTS_JSON)
|
|
|
|
score_report = build_score_report(report, memory_token=memory_token)
|
|
SCORE_JSON.write_text(json.dumps(score_report, indent=2, sort_keys=True) + "\n", encoding="utf-8")
|
|
write_score_markdown(SCORE_MARKDOWN, score_report)
|
|
safe_pass = score_report_passes(report, score_report)
|
|
print(
|
|
json.dumps(
|
|
{
|
|
"results_json": str(RESULTS_JSON),
|
|
"score_json": str(SCORE_JSON),
|
|
"score_markdown": str(SCORE_MARKDOWN),
|
|
"pass": safe_pass,
|
|
"prompts": f"{score_report['score']['passes']}/{score_report['score']['expected_prompt_count']}",
|
|
"rescored_existing": args.score_existing,
|
|
},
|
|
indent=2,
|
|
sort_keys=True,
|
|
)
|
|
)
|
|
return 0 if safe_pass else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|