marimo-diffusion / bench /ledger-needle-compare.html
goldenfox's picture
Final bench: add thinking-at-512-budget condition (2/10 vs ledger 6/10)
0625b14 verified
Raw
History Blame Contribute Delete
10.6 kB
<!doctype html><html><head><meta charset="utf-8">
<title>Ledger needle β€” comparaciΓ³n</title><style>
:root { --bg:#11141a; --panel:#1a1f29; --text:#dde3ee; --dim:#8a93a6; --hit:#3fb96b;
--miss:#e05555; --line:#2a3140; --us:#16233a; }
* { box-sizing:border-box; margin:0 } body { background:var(--bg); color:var(--text);
font:14px/1.5 ui-monospace,Menlo,monospace; padding:24px; max-width:1240px; margin:0 auto }
h1 { font-size:18px } .sub { color:var(--dim); margin:4px 0 20px }
table { border-collapse:collapse; width:100%; margin-bottom:26px }
th, td { border:1px solid var(--line); padding:7px 10px; text-align:left; font-size:13px }
th { background:var(--panel); color:var(--dim); font-weight:normal; cursor:pointer;
user-select:none; white-space:nowrap }
th.sorted { color:var(--text) } th.sorted::after { content:' ↓' }
th.sorted.asc::after { content:' ↑' }
tr.us td { background:var(--us) }
td.hitcell { background:#173523; color:var(--hit); text-align:center; font-weight:bold }
td.misscell { background:#3a1d1d; color:var(--miss); text-align:center }
#matrix { width:auto } #matrix th, #matrix td { padding:5px 8px }
#matrix td.hitcell, #matrix td.misscell { width:36px; min-width:36px; padding:5px 0 }
#matrix th.sys { writing-mode:vertical-rl; transform:rotate(180deg); text-align:left;
vertical-align:bottom; max-height:190px; font-size:12px; cursor:default; padding:8px 4px }
#matrix th.sys.usc { color:#9fc4ea }
#matrix td.exp { white-space:nowrap }
.bar { display:inline-block; height:11px; background:var(--hit); border-radius:2px;
vertical-align:middle } .bar.m { background:var(--miss) }
h2 { font-size:14px; color:var(--dim); margin:22px 0 10px; text-transform:uppercase }
.caveats { background:var(--panel); border:1px solid var(--line); border-radius:8px;
padding:14px 18px; color:var(--dim); font-size:13px } .caveats li { margin:6px 0 0 18px }
.hint { color:var(--dim); font-size:12px; margin:-18px 0 10px }
</style></head><body>
<h1>Ledger needle β€” comparaciΓ³n hasta 1.5B</h1>
<div class="sub">100 turnos guionados (seed 21) Β· 15 hechos, 5 correcciones, 10 sondas a
distancia 3–96 Β· scoring por nΓΊcleo del valor, idΓ©ntico para todos Β· baselines con historia
completa, decoding greedy e instrucciΓ³n explΓ­cita de memoria</div>
<table id="summary"><thead><tr>
<th data-k="label" data-t="s">sistema</th>
<th data-k="params" data-t="n">tamaΓ±o (B)</th>
<th data-k="hits" data-t="n">recall</th>
<th data-k="d1" data-t="n">d 3–10</th>
<th data-k="d2" data-t="n">d 11–50</th>
<th data-k="d3" data-t="n">d 51+</th>
<th data-k="total" data-t="n">test total (s)</th>
<th data-k="per" data-t="n">s/turno</th>
<th data-k="prefix" data-t="n">prefijo mΓ‘x</th>
</tr></thead><tbody></tbody></table>
<div class="hint">click en una cabecera reordena; por defecto: mΓ‘s aciertos primero</div>
<h2>Sonda por sonda</h2>
<table id="matrix"><tr><th>turno</th><th>dist</th><th>esperado</th><th class="sys">Qwen2.5-1.5B-Instruct Β· full</th><th class="sys">Qwen3-0.6B + thinking Β· full</th><th class="sys usc">Marimo Diffusion (ledger, nuestro)</th><th class="sys">Qwen2.5-0.5B-Instruct Β· full</th><th class="sys">SmolLM2-360M-Instruct Β· full</th><th class="sys">TinyLlama-1.1B-Chat Β· full</th><th class="sys">Qwen3-0.6B + thinking Β· budget 512</th><th class="sys">Qwen3-0.6B sin thinking Β· full</th><th class="sys">Qwen3-0.6B sin thinking Β· budget 512</th></tr><tr><td>6</td><td>5</td><td class="exp">code 4805</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td></tr><tr><td>17</td><td>6</td><td class="exp">$6,400</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>28</td><td>3</td><td class="exp">7:15pm</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>61</td><td>57</td><td class="exp">harbor858</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>72</td><td>37</td><td class="exp">$4,000</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>83</td><td>47</td><td class="exp">day 97</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>94</td><td>83</td><td class="exp">$6,400</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>98</td><td>59</td><td class="exp">room 411</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>99</td><td>60</td><td class="exp">room 411</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr><tr><td>100</td><td>96</td><td class="exp">harbor858</td><td class="hitcell">βœ“</td><td class="hitcell">βœ“</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td><td class="misscell">βœ—</td></tr></table>
<h2>Advertencias de lectura</h2>
<div class="caveats"><ul>
<li>Un solo seed y 10 sondas por sistema: las diferencias chicas son ruido; las grandes
sobreviven a ese margen.</li>
<li>La comparaciΓ³n mide el paquete mecanismo+entrenamiento: el sistema de ledger fue entrenado
en este registro conversacional y los baselines no. Muestra que el paquete funciona, no que el
mecanismo solo cause la diferencia.</li>
<li>Los baselines reciben la mayor ventaja razonable: historia completa en contexto, greedy,
instrucciΓ³n de memoria, y el modo thinking nativo donde existe. El sistema de ledger corre con
sampling a temperatura 0.7 y un prefijo constante de ~500 tokens.</li>
<li>El guion es sintΓ©tico y sus valores son arbitrarios por diseΓ±o; un valor sin sentido
("day 97") puede penalizar a un modelo que se resiste a repetir datos absurdos.</li>
</ul></div>
<script>
const ROWS = [{"label": "Qwen2.5-1.5B-Instruct Β· full", "params": 1.54, "probes": 10, "hits": 9, "total": 76.74, "per": 0.7674, "prefix": 2881, "us": false, "d1": 3, "d1n": 3, "d2": 1, "d2n": 2, "d3": 5, "d3n": 5}, {"label": "Qwen3-0.6B + thinking Β· full", "params": 0.6, "probes": 10, "hits": 7, "total": 1318.3, "per": 13.183, "prefix": 4450, "us": false, "d1": 3, "d1n": 3, "d2": 1, "d2n": 2, "d3": 3, "d3n": 5}, {"label": "Marimo Diffusion (ledger, nuestro)", "params": 0.6, "probes": 10, "hits": 6, "total": 218.07, "per": 2.1807, "prefix": 625, "us": true, "d1": 3, "d1n": 3, "d2": 1, "d2n": 2, "d3": 2, "d3n": 5}, {"label": "Qwen2.5-0.5B-Instruct Β· full", "params": 0.49, "probes": 10, "hits": 4, "total": 110.34, "per": 1.1034, "prefix": 3908, "us": false, "d1": 2, "d1n": 3, "d2": 1, "d2n": 2, "d3": 1, "d3n": 5}, {"label": "SmolLM2-360M-Instruct Β· full", "params": 0.36, "probes": 10, "hits": 4, "total": 56.93, "per": 0.5693, "prefix": 2712, "us": false, "d1": 3, "d1n": 3, "d2": 1, "d2n": 2, "d3": 0, "d3n": 5}, {"label": "TinyLlama-1.1B-Chat Β· full", "params": 1.1, "probes": 10, "hits": 3, "total": 120.77, "per": 1.2077, "prefix": 5126, "us": false, "d1": 3, "d1n": 3, "d2": 0, "d2n": 2, "d3": 0, "d3n": 5}, {"label": "Qwen3-0.6B + thinking Β· budget 512", "params": 0.6, "probes": 10, "hits": 2, "total": 1337.49, "per": 13.3749, "prefix": 508, "us": false, "d1": 2, "d1n": 3, "d2": 0, "d2n": 2, "d3": 0, "d3n": 5}, {"label": "Qwen3-0.6B sin thinking Β· full", "params": 0.6, "probes": 10, "hits": 1, "total": 129.6, "per": 1.296, "prefix": 3722, "us": false, "d1": 1, "d1n": 3, "d2": 0, "d2n": 2, "d3": 0, "d3n": 5}, {"label": "Qwen3-0.6B sin thinking Β· budget 512", "params": 0.6, "probes": 10, "hits": 1, "total": 161.75, "per": 1.6175, "prefix": 512, "us": false, "d1": 1, "d1n": 3, "d2": 0, "d2n": 2, "d3": 0, "d3n": 5}];
const tbody = document.querySelector('#summary tbody');
let sortKey = 'hits', asc = false;
function fmt(r) {
return '<td><b>' + r.label + '</b></td><td>' + r.params.toFixed(2) + '</td>' +
'<td><b>' + r.hits + '/' + r.probes + '</b> <span class="bar" style="width:' + 6 * r.hits +
'px"></span><span class="bar m" style="width:' + 6 * (r.probes - r.hits) + 'px"></span></td>' +
['d1', 'd2', 'd3'].map(k => '<td>' + r[k] + '/' + r[k + 'n'] + '</td>').join('') +
'<td>' + r.total.toFixed(0) + '</td><td>' + r.per.toFixed(1) + '</td><td>' + r.prefix + '</td>';
}
function draw() {
const rows = [...ROWS].sort((a, b) => {
const va = a[sortKey], vb = b[sortKey];
const c = typeof va === 'string' ? va.localeCompare(vb) : va - vb;
return asc ? c : -c;
});
tbody.innerHTML = rows.map(r =>
'<tr' + (r.us ? ' class="us"' : '') + '>' + fmt(r) + '</tr>').join('');
document.querySelectorAll('#summary th').forEach(th => {
th.classList.toggle('sorted', th.dataset.k === sortKey);
th.classList.toggle('asc', th.dataset.k === sortKey && asc);
});
}
document.querySelectorAll('#summary th').forEach(th => th.onclick = () => {
if (sortKey === th.dataset.k) asc = !asc;
else { sortKey = th.dataset.k; asc = th.dataset.t === 's'; }
draw();
});
draw();
</script></body></html>