Files
hermes-agent/evals/compaction/scripts/jev_cycles_report.py
teknium1 00919d1e8a evals(compaction): document the Jev repeated-compaction recipe and add the table renderer
jev_cycles_report.py renders the cycles/freed/floor/end-state table from
jev_cycles.py outputs; README carries the exact commands, thresholds and
cost so the diminishing-returns and stuck/fallback findings can be
reproduced. Fallback records now count the real tool calls.
2026-09-19 11:58:37 -07:00

48 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Render the repeated-compaction table from jev_cycles.py outputs.
Usage: jev_cycles_report.py <cycles_json> [<cycles_json> ...]
One row per run: cycles reached, raw session consumed, freed-per-cycle at the
first and last cycle, text floor at the first and last cycle, and how the run
ended (still working / stuck / plugin fallback). Prints a markdown table.
"""
import json
import sys
def describe(d: dict) -> dict:
cycles = d["cycles"]
scored = [c for c in cycles if "freed_pct" in c]
row = {
"run": f"{d['transcript']} @{d['threshold'] // 1000}K",
"cycles": len(scored),
"raw": f"{d['raw_tokens_consumed'] / 1e6:.2f}M of {d['raw_total'] / 1e6:.1f}M",
"freed": "—",
"floor": "—",
"end": "still working",
}
if scored:
row["freed"] = f"{scored[0]['freed_pct']:.0f}% → {scored[-1]['freed_pct']:.0f}%"
row["floor"] = f"{scored[0]['floor'] / 1000:.0f}K → {scored[-1]['floor'] / 1000:.0f}K"
if scored[-1].get("stuck"):
row["end"] = "STUCK (floor ≥ threshold, 0% freed)"
elif scored[-1]["freed_pct"] < 10:
row["end"] = f"degraded: {scored[-1]['before'] - scored[-1]['after']:,} tokens freed/cycle"
if cycles and "fallback" in cycles[-1]:
c = cycles[-1]
row["end"] = f"fallback on cycle {c['cycle']} ({c['calls']} calls, state does not fit)"
return row
def main() -> None:
rows = [describe(json.load(open(p, encoding="utf-8"))) for p in sys.argv[1:]]
print("| run | cycles | raw session consumed | freed per cycle | text floor | end state |")
print("|---|---|---|---|---|---|")
for r in rows:
print(f"| {r['run']} | {r['cycles']} | {r['raw']} | {r['freed']} | {r['floor']} | {r['end']} |")
if __name__ == "__main__":
main()