Spaces:
Running
Running
Trace completeness: share of output tokens in the trace; why not (withheld by provider, not kept by harness, lost in conversion, summary only); counted/inferred basis; undercounted
Browse files- common.js +15 -12
- data/leaderboard.js +0 -0
- home.js +17 -15
- index.html +10 -8
- row.js +7 -7
- style.css +2 -2
common.js
CHANGED
|
@@ -36,19 +36,22 @@
|
|
| 36 |
});
|
| 37 |
|
| 38 |
/* Reasoning and visibility. */
|
| 39 |
-
|
|
|
|
|
|
|
| 40 |
const RZ_HELP = {
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
|
|
|
| 47 |
};
|
| 48 |
const visibleShare = h => (h.text.unseen === null ? null : 1 - h.text.unseen);
|
| 49 |
const reasoningChip = h => {
|
| 50 |
-
const chip = el("span", "rz rz--" + h.text.
|
| 51 |
-
chip.title = RZ_HELP[h.text.
|
| 52 |
return chip;
|
| 53 |
};
|
| 54 |
|
|
@@ -131,17 +134,17 @@
|
|
| 131 |
|
| 132 |
/* What the output tokens went on: tool-call arguments, messages, reasoning the trace shows,
|
| 133 |
reasoning it doesn't. Full width: shares, not sizes. */
|
| 134 |
-
const MIX = [["tool", "tool calls"], ["message", "messages"], ["reasoning", "reasoning
|
| 135 |
function mixBar(t, large) {
|
| 136 |
const wrap = el("span", "mix" + (large ? " mix--lg" : ""));
|
| 137 |
if (!t.mix) { wrap.append(el("span", "z", "no token counts")); return wrap; }
|
| 138 |
const bar = el("span", "mix-bar");
|
| 139 |
MIX.forEach(([k]) => { const i = el("i", "mx mx--" + k); i.style.width = (100 * t.mix[k]) + "%"; bar.append(i); });
|
| 140 |
const lab = el("span", "mix-lab");
|
| 141 |
-
lab.append(el("b", null, pct0(t.mix.hidden)), document.createTextNode("
|
| 142 |
wrap.append(bar, lab);
|
| 143 |
wrap.title = MIX.map(([k, name]) => name + " " + pct0(t.mix[k])).join(" · ") + " of output tokens" +
|
| 144 |
-
(t.mix.hidden ? " (
|
| 145 |
return wrap;
|
| 146 |
}
|
| 147 |
const mixKey = () => {
|
|
|
|
| 36 |
});
|
| 37 |
|
| 38 |
/* Reasoning and visibility. */
|
| 39 |
+
/* Why output tokens have no text in the trace. */
|
| 40 |
+
const RZ = { withheld: "withheld by provider", notKept: "not kept by harness", lost: "lost in conversion",
|
| 41 |
+
summary: "summary only", complete: "reasoning recorded", noReasoning: "no reasoning recorded", unknown: "no token counts" };
|
| 42 |
const RZ_HELP = {
|
| 43 |
+
withheld: "the model's API returns no reasoning text (encrypted, or thinking blocks with empty text): generated and billed, never readable",
|
| 44 |
+
notKept: "the provider returns reasoning text, but the harness didn't record it",
|
| 45 |
+
lost: "the harness's own session files hold the reasoning; converting them to the trajectory dropped it",
|
| 46 |
+
summary: "the provider returns a summary of the reasoning, far shorter than its tokens",
|
| 47 |
+
complete: "reasoning text is in the trace; for most trials the recorded text accounts for the output tokens",
|
| 48 |
+
noReasoning: "no reasoning text or reasoning tokens in the trace; for most trials the recorded text accounts for the output tokens",
|
| 49 |
+
unknown: "the trials report no output tokens to account for",
|
| 50 |
};
|
| 51 |
const visibleShare = h => (h.text.unseen === null ? null : 1 - h.text.unseen);
|
| 52 |
const reasoningChip = h => {
|
| 53 |
+
const chip = el("span", "rz rz--" + h.text.why, RZ[h.text.why]);
|
| 54 |
+
chip.title = RZ_HELP[h.text.why];
|
| 55 |
return chip;
|
| 56 |
};
|
| 57 |
|
|
|
|
| 134 |
|
| 135 |
/* What the output tokens went on: tool-call arguments, messages, reasoning the trace shows,
|
| 136 |
reasoning it doesn't. Full width: shares, not sizes. */
|
| 137 |
+
const MIX = [["tool", "tool calls"], ["message", "messages"], ["reasoning", "reasoning"], ["hidden", "no text in trace"]];
|
| 138 |
function mixBar(t, large) {
|
| 139 |
const wrap = el("span", "mix" + (large ? " mix--lg" : ""));
|
| 140 |
if (!t.mix) { wrap.append(el("span", "z", "no token counts")); return wrap; }
|
| 141 |
const bar = el("span", "mix-bar");
|
| 142 |
MIX.forEach(([k]) => { const i = el("i", "mx mx--" + k); i.style.width = (100 * t.mix[k]) + "%"; bar.append(i); });
|
| 143 |
const lab = el("span", "mix-lab");
|
| 144 |
+
lab.append(el("b", null, pct0(1 - t.mix.hidden)), document.createTextNode(" in trace"));
|
| 145 |
wrap.append(bar, lab);
|
| 146 |
wrap.title = MIX.map(([k, name]) => name + " " + pct0(t.mix[k])).join(" · ") + " of output tokens" +
|
| 147 |
+
(t.mix.hidden ? " (no text: " + (t.measured ? "counted from reported reasoning tokens" : "inferred from the recorded text") + ")" : "");
|
| 148 |
return wrap;
|
| 149 |
}
|
| 150 |
const mixKey = () => {
|
data/leaderboard.js
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
home.js
CHANGED
|
@@ -48,7 +48,7 @@
|
|
| 48 |
const c = h.cost;
|
| 49 |
if (c.imputedTrials) out.push(["warn", c.imputedTrials + " trials priced from tokens"]);
|
| 50 |
if (c.unpriced / r.scan.trials > 0.02) out.push(["note", c.unpriced + " trials unpriced"]);
|
| 51 |
-
if (c.unbilled) out.push(["bad", "
|
| 52 |
if (r.lb.disqualified) out.push(["bad", r.lb.disqualified + " disqualified by the PR pipeline"]);
|
| 53 |
return out;
|
| 54 |
}
|
|
@@ -71,8 +71,8 @@
|
|
| 71 |
{ name: hasLb ? "Leaderboard" : "Score", sort: "score", help: hasLb ? "published accuracy ± 95% half-width" : "rewarded trials ± 95% half-width over the five attempt rounds" },
|
| 72 |
{ name: "Our estimate", sort: "adj", help: ESTIMATE_HELP },
|
| 73 |
{ name: "Leads", sort: "leads", help: "rewarded trials with an unexcused high or critical finding" },
|
| 74 |
-
{ name: "Output tokens
|
| 75 |
-
{ name: "
|
| 76 |
{ name: "Cost", sort: "cost", help: "our estimate: recorded trial costs, uncosted trials priced from their tokens at the row's own fitted rates, and any reasoning left out of the output tokens" },
|
| 77 |
{ name: "Notes", cls: "l" },
|
| 78 |
];
|
|
@@ -96,7 +96,7 @@
|
|
| 96 |
else ld.append(el("span", "z", "0"));
|
| 97 |
tr.append(ld);
|
| 98 |
const oc = el("td", "l"); oc.append(mixBar(h.tokens)); tr.append(oc);
|
| 99 |
-
const rz = el("td", "rz rz--" + h.text.
|
| 100 |
const c = h.cost, cc = el("td");
|
| 101 |
cc.append(num(c.estimate === null ? "–" : (c.lowerBound ? "≥" : "") + money(c.estimate), "n"));
|
| 102 |
const rec = hasLb && r.lb.cost !== null ? "LB " + money(r.lb.cost) : c.imputed || c.unbilled ? "rec. " + money(c.recorded) : "";
|
|
@@ -122,11 +122,13 @@
|
|
| 122 |
function gaps() {
|
| 123 |
const groups = [
|
| 124 |
["Models", [["Served, by share of steps", "l", "per-step model names; red: another model than the configured one"]]],
|
| 125 |
-
["Output tokens
|
| 126 |
-
["Median", "", "reported output tokens of the median trial"],
|
| 127 |
-
["
|
| 128 |
-
["
|
| 129 |
-
["
|
|
|
|
|
|
|
| 130 |
["Web", [
|
| 131 |
["Trials using it", "", "trials that searched or opened web pages"],
|
| 132 |
["Results not in trace", "", "of those, trials where the search or fetch results aren't in the trace (only the query or URL is)"]]],
|
|
@@ -135,7 +137,7 @@
|
|
| 135 |
["No trajectory", "", "listed trials without a trajectory"]]],
|
| 136 |
["Cost", [
|
| 137 |
["Recorded", "", "sum of the trials' recorded costs"],
|
| 138 |
-
["Our estimate", "", "recorded + uncosted trials priced from their tokens +
|
| 139 |
["Fitted $/M in · cached · out", "", "rates fitted to the row's own trial costs and tokens (R² shown on hover)"]]],
|
| 140 |
["Evidence", [["Undecided", "", "trials with a behavioural check atif-scan couldn't decide"]]],
|
| 141 |
];
|
|
@@ -163,15 +165,15 @@
|
|
| 163 |
tr.append(start(md));
|
| 164 |
|
| 165 |
tr.append(start(el("td", "n", tk.outputMedian ? compactN(tk.outputMedian) : "–")));
|
|
|
|
| 166 |
const hid = el("td", "n");
|
| 167 |
-
if (tk.
|
| 168 |
heat(hid, tk.mix.hidden, 1, "warm");
|
| 169 |
hid.append(link(holeHref(r, "unseen"), pct0(tk.mix.hidden)));
|
| 170 |
} else hid.append(el("span", "z", "–"));
|
| 171 |
tr.append(hid);
|
| 172 |
-
const
|
| 173 |
-
|
| 174 |
-
tr.append(how);
|
| 175 |
const ub = el("td", "c");
|
| 176 |
if (h.text.uncounted) ub.append(link(holeHref(r, "uncounted"), "≥" + pct0(h.text.uncounted), "bad"));
|
| 177 |
else ub.append(el("span", "z", "·"));
|
|
@@ -189,7 +191,7 @@
|
|
| 189 |
if (c.imputedTrials || c.unbilled || c.unpriced) {
|
| 190 |
const parts = [];
|
| 191 |
if (c.imputedTrials) parts.push("+" + money(c.imputed) + " " + c.imputedTrials + " priced");
|
| 192 |
-
if (c.unbilled) parts.push("+" + money(c.unbilled) + "
|
| 193 |
if (c.unpriced) parts.push(c.unpriced + " unpriced");
|
| 194 |
est.append(el("small", null, parts.join(" · ")));
|
| 195 |
}
|
|
|
|
| 48 |
const c = h.cost;
|
| 49 |
if (c.imputedTrials) out.push(["warn", c.imputedTrials + " trials priced from tokens"]);
|
| 50 |
if (c.unpriced / r.scan.trials > 0.02) out.push(["note", c.unpriced + " trials unpriced"]);
|
| 51 |
+
if (c.unbilled) out.push(["bad", "output undercounted"]);
|
| 52 |
if (r.lb.disqualified) out.push(["bad", r.lb.disqualified + " disqualified by the PR pipeline"]);
|
| 53 |
return out;
|
| 54 |
}
|
|
|
|
| 71 |
{ name: hasLb ? "Leaderboard" : "Score", sort: "score", help: hasLb ? "published accuracy ± 95% half-width" : "rewarded trials ± 95% half-width over the five attempt rounds" },
|
| 72 |
{ name: "Our estimate", sort: "adj", help: ESTIMATE_HELP },
|
| 73 |
{ name: "Leads", sort: "leads", help: "rewarded trials with an unexcused high or critical finding" },
|
| 74 |
+
{ name: "Output tokens · trace completeness", sort: "hidden", cls: "l", help: "the row's output tokens: tool calls, messages and reasoning with text in the trace, and (orange) output with no text in it. The figure is the share the trace holds." },
|
| 75 |
+
{ name: "Why not in trace", help: "why some output tokens have no text in the trace" },
|
| 76 |
{ name: "Cost", sort: "cost", help: "our estimate: recorded trial costs, uncosted trials priced from their tokens at the row's own fitted rates, and any reasoning left out of the output tokens" },
|
| 77 |
{ name: "Notes", cls: "l" },
|
| 78 |
];
|
|
|
|
| 96 |
else ld.append(el("span", "z", "0"));
|
| 97 |
tr.append(ld);
|
| 98 |
const oc = el("td", "l"); oc.append(mixBar(h.tokens)); tr.append(oc);
|
| 99 |
+
const rz = el("td", "rz rz--" + h.text.why, RZ[h.text.why]); rz.title = RZ_HELP[h.text.why]; tr.append(rz);
|
| 100 |
const c = h.cost, cc = el("td");
|
| 101 |
cc.append(num(c.estimate === null ? "–" : (c.lowerBound ? "≥" : "") + money(c.estimate), "n"));
|
| 102 |
const rec = hasLb && r.lb.cost !== null ? "LB " + money(r.lb.cost) : c.imputed || c.unbilled ? "rec. " + money(c.recorded) : "";
|
|
|
|
| 122 |
function gaps() {
|
| 123 |
const groups = [
|
| 124 |
["Models", [["Served, by share of steps", "l", "per-step model names; red: another model than the configured one"]]],
|
| 125 |
+
["Output tokens · trace completeness", [
|
| 126 |
+
["Median trial", "", "reported output tokens of the median trial"],
|
| 127 |
+
["In trace", "", "share of the row's output tokens whose text the trace holds"],
|
| 128 |
+
["No text", "", "share with no text in the trace: generated and billed, not readable"],
|
| 129 |
+
["Why", "l", "why that output has no text in the trace"],
|
| 130 |
+
["Basis", "l", "counted: the harness reports reasoning tokens; inferred: from the recorded text at ≈3.2 characters per token"],
|
| 131 |
+
["Undercounted", "", "the reverse: recorded reasoning text the reported output tokens leave out (and so the cost), as a share of reported output"]]],
|
| 132 |
["Web", [
|
| 133 |
["Trials using it", "", "trials that searched or opened web pages"],
|
| 134 |
["Results not in trace", "", "of those, trials where the search or fetch results aren't in the trace (only the query or URL is)"]]],
|
|
|
|
| 137 |
["No trajectory", "", "listed trials without a trajectory"]]],
|
| 138 |
["Cost", [
|
| 139 |
["Recorded", "", "sum of the trials' recorded costs"],
|
| 140 |
+
["Our estimate", "", "recorded + uncosted trials priced from their tokens + undercounted reasoning, at the row's fitted rates"],
|
| 141 |
["Fitted $/M in · cached · out", "", "rates fitted to the row's own trial costs and tokens (R² shown on hover)"]]],
|
| 142 |
["Evidence", [["Undecided", "", "trials with a behavioural check atif-scan couldn't decide"]]],
|
| 143 |
];
|
|
|
|
| 165 |
tr.append(start(md));
|
| 166 |
|
| 167 |
tr.append(start(el("td", "n", tk.outputMedian ? compactN(tk.outputMedian) : "–")));
|
| 168 |
+
tr.append(el("td", "n", tk.mix ? pct0(1 - tk.mix.hidden) : "–"));
|
| 169 |
const hid = el("td", "n");
|
| 170 |
+
if (tk.mix) {
|
| 171 |
heat(hid, tk.mix.hidden, 1, "warm");
|
| 172 |
hid.append(link(holeHref(r, "unseen"), pct0(tk.mix.hidden)));
|
| 173 |
} else hid.append(el("span", "z", "–"));
|
| 174 |
tr.append(hid);
|
| 175 |
+
const why = el("td", "l rz rz--" + h.text.why, RZ[h.text.why]); why.title = RZ_HELP[h.text.why]; tr.append(why);
|
| 176 |
+
tr.append(el("td", "l small", tk.mix ? (tk.measured ? "counted" : "inferred") : "–"));
|
|
|
|
| 177 |
const ub = el("td", "c");
|
| 178 |
if (h.text.uncounted) ub.append(link(holeHref(r, "uncounted"), "≥" + pct0(h.text.uncounted), "bad"));
|
| 179 |
else ub.append(el("span", "z", "·"));
|
|
|
|
| 191 |
if (c.imputedTrials || c.unbilled || c.unpriced) {
|
| 192 |
const parts = [];
|
| 193 |
if (c.imputedTrials) parts.push("+" + money(c.imputed) + " " + c.imputedTrials + " priced");
|
| 194 |
+
if (c.unbilled) parts.push("+" + money(c.unbilled) + " undercounted");
|
| 195 |
if (c.unpriced) parts.push(c.unpriced + " unpriced");
|
| 196 |
est.append(el("small", null, parts.join(" · ")));
|
| 197 |
}
|
index.html
CHANGED
|
@@ -53,18 +53,20 @@
|
|
| 53 |
corner: highest finding <i class="sq sq--1 sq--c"></i>critical <i class="sq sq--1 sq--h"></i>high <i class="sq sq--1 sq--m"></i>medium<br>
|
| 54 |
<b>Our estimate</b> leaves out rewarded trials with an unexcused high or critical finding (review leads) and trials partly run by a
|
| 55 |
fallback model (a Gemini preview name served as another Gemini preview is an alias, not a fallback).
|
| 56 |
-
<b>
|
| 57 |
-
<i class="mx mx--reasoning"></i>reasoning the trace
|
| 58 |
-
billed,
|
| 59 |
rates, and reasoning left out of the output tokens; ≥ where some trials can't be priced (no usage, or no rates that fit the recorded costs).</p>
|
| 60 |
</section>
|
| 61 |
|
| 62 |
<section id="gaps" class="block">
|
| 63 |
<header class="block-head"><h2>Gaps & accounting</h2>
|
| 64 |
<span class="muted small">trials per row unless marked · shading is the share · click a figure for its trials</span></header>
|
| 65 |
-
<p class="explain-line">
|
| 66 |
-
results
|
| 67 |
-
|
|
|
|
|
|
|
| 68 |
hold only the query or URL, not what came back. Tool-result pairing, call records missing from the steps, unanswered final
|
| 69 |
calls and timestamps are on each row's page: recording-format quirks that limit some checks (counted under Undecided) but
|
| 70 |
don't hide what the agent did.</p>
|
|
@@ -100,8 +102,8 @@
|
|
| 100 |
<p>Recorded agent text (reasoning, messages, tool arguments) over reported output tokens. ≈3.2 when the trace holds all
|
| 101 |
output (measured on visible text over visible tokens where reasoning tokens are reported). <b>In trace</b> = that
|
| 102 |
ratio over 3.2. With the visible text alone filling the reported tokens, recorded reasoning is missing from the token
|
| 103 |
-
count and the cost (<b>
|
| 104 |
-
<h3>
|
| 105 |
<dl class="defs" id="rz-defs"></dl>
|
| 106 |
</div>
|
| 107 |
<div>
|
|
|
|
| 53 |
corner: highest finding <i class="sq sq--1 sq--c"></i>critical <i class="sq sq--1 sq--h"></i>high <i class="sq sq--1 sq--m"></i>medium<br>
|
| 54 |
<b>Our estimate</b> leaves out rewarded trials with an unexcused high or critical finding (review leads) and trials partly run by a
|
| 55 |
fallback model (a Gemini preview name served as another Gemini preview is an alias, not a fallback).
|
| 56 |
+
<b>Trace completeness</b>: the row's output tokens as <i class="mx mx--tool"></i>tool calls <i class="mx mx--message"></i>messages
|
| 57 |
+
<i class="mx mx--reasoning"></i>reasoning, all with text in the trace, and <i class="mx mx--hidden"></i>no text in the trace
|
| 58 |
+
(generated and billed, not readable); the figure is the share the trace holds. <b>Cost</b>: recorded trial costs, uncosted trials priced from their tokens at the row's own
|
| 59 |
rates, and reasoning left out of the output tokens; ≥ where some trials can't be priced (no usage, or no rates that fit the recorded costs).</p>
|
| 60 |
</section>
|
| 61 |
|
| 62 |
<section id="gaps" class="block">
|
| 63 |
<header class="block-head"><h2>Gaps & accounting</h2>
|
| 64 |
<span class="muted small">trials per row unless marked · shading is the share · click a figure for its trials</span></header>
|
| 65 |
+
<p class="explain-line">Every output token is accounted for: text in the trace (<b>In trace</b>) or not (<b>No text</b>: in
|
| 66 |
+
practice reasoning, never web results, which are input). <b>Why</b>: withheld by the model's provider, not kept by the
|
| 67 |
+
harness, lost converting its session files, or only a summary returned. <b>Basis</b>: counted where the harness reports
|
| 68 |
+
reasoning tokens, otherwise inferred from the recorded characters (≈3.2 per token when the trace holds everything).
|
| 69 |
+
<b>Undercounted</b> is the reverse: reasoning text the reported output tokens, and so the cost, leave out. <b>Web</b>: of the trials that searched or fetched, how many
|
| 70 |
hold only the query or URL, not what came back. Tool-result pairing, call records missing from the steps, unanswered final
|
| 71 |
calls and timestamps are on each row's page: recording-format quirks that limit some checks (counted under Undecided) but
|
| 72 |
don't hide what the agent did.</p>
|
|
|
|
| 102 |
<p>Recorded agent text (reasoning, messages, tool arguments) over reported output tokens. ≈3.2 when the trace holds all
|
| 103 |
output (measured on visible text over visible tokens where reasoning tokens are reported). <b>In trace</b> = that
|
| 104 |
ratio over 3.2. With the visible text alone filling the reported tokens, recorded reasoning is missing from the token
|
| 105 |
+
count and the cost (<b>undercounted</b>). Tokenizers differ: small deviations mean nothing.</p>
|
| 106 |
+
<h3>Why output has no text in the trace</h3>
|
| 107 |
<dl class="defs" id="rz-defs"></dl>
|
| 108 |
</div>
|
| 109 |
<div>
|
row.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
"use strict";
|
| 4 |
const T = window.TB;
|
| 5 |
const { D, el, link, pct0, fmt1, money, shortModel, rowPath, title, byId, OUTCOME, trialInfo, viewerHref, fullHref,
|
| 6 |
-
reasoningChip, RZ_HELP, visibleShare, problems, problemChip, strip } = T;
|
| 7 |
const DETAILS = window.TB21_DETAILS || {};
|
| 8 |
const compactN = n => (n >= 1e6 ? (n / 1e6).toFixed(1) + "M" : n >= 1e3 ? Math.round(n / 1e3) + "k" : String(n));
|
| 9 |
const main = document.getElementById("row");
|
|
@@ -79,7 +79,7 @@
|
|
| 79 |
stats.append(
|
| 80 |
stat(recount ? "Score" : "Leaderboard score", fmt1(r.lb.accuracy) + "%", "± " + fmt1(r.lb.ci95) + " · " + r.scan.rewarded + " of " + n + " trials rewarded"),
|
| 81 |
stat("Our estimate", fmt1(adj.accuracy) + "%", adj.rewarded + " of " + n + (adj.leads ? " · less " + adj.leads + (adj.leads === 1 ? " review lead" : " review leads") : "") + (adj.fallback ? " · less " + adj.fallback + (adj.fallback === 1 ? " fallback trial" : " fallback trials") : ""), adj.accuracy < r.lb.accuracy - 1 ? "stat--hot" : ""),
|
| 82 |
-
stat("
|
| 83 |
stat("Cost, our estimate", ce.estimate === null ? "–" : (ce.lowerBound ? "≥" : "") + money(ce.estimate), (!recount && r.lb.cost !== null ? "leaderboard " + money(r.lb.cost) + " · " : "") + "recorded " + money(ce.recorded)));
|
| 84 |
const actions = el("div", "actions");
|
| 85 |
actions.append(link(rowPath(r) + "highlights/index.html", "Highlights", "btn btn--primary"),
|
|
@@ -128,13 +128,13 @@
|
|
| 128 |
/* What the trace holds. */
|
| 129 |
const trace = panel("trace", "What the trace holds");
|
| 130 |
const rz = el("p", "rz-line");
|
| 131 |
-
rz.append(reasoningChip(h), document.createTextNode(" " + RZ_HELP[h.text.
|
| 132 |
trace.append(rz);
|
| 133 |
const tstats = el("div", "stats stats--sm");
|
| 134 |
tstats.append(
|
| 135 |
stat("Output tokens, median trial", tk.outputMedian ? compactN(tk.outputMedian) : "–", tk.outputTotal ? compactN(tk.outputTotal) + " over the row" : ""),
|
| 136 |
-
stat("
|
| 137 |
-
tk.measured ? "
|
| 138 |
stat("Text per output token", h.text.allCpt === null ? "–" : String(h.text.allCpt), "reasoning text in " + pct0(h.text.withText) + " of trials"));
|
| 139 |
trace.append(tstats);
|
| 140 |
if (tk.mix) { const mx = el("div", "mix-row"); mx.append(T.mixBar(tk, true), T.mixKey()); trace.append(mx); }
|
|
@@ -158,13 +158,13 @@
|
|
| 158 |
cstats.append(stat("Recorded, sum of trials", money(ce.recorded), h.uncosted ? h.uncosted + " trials uncosted" : "every trial costed"),
|
| 159 |
stat("Our estimate", ce.estimate === null ? "–" : (ce.lowerBound ? "≥" : "") + money(ce.estimate),
|
| 160 |
[ce.imputedTrials ? "+" + money(ce.imputed) + " for " + ce.imputedTrials + " uncosted trials, from their tokens" : "",
|
| 161 |
-
ce.unbilled ? "+" + money(ce.unbilled) + "
|
| 162 |
ce.unpriced ? ce.unpriced + " trials unpriced: no token usage" + (ce.rates ? "" : ", or no rates fit the recorded costs") : ""].filter(Boolean).join(" · ") || "nothing to add"));
|
| 163 |
cost.append(cstats);
|
| 164 |
if (ce.rates) cost.append(el("p", "muted small", "Rates fitted to this row's own trial costs and tokens: $" + ce.rates.uncached + " / $" + ce.rates.cached +
|
| 165 |
" / $" + ce.rates.output + " per million uncached input / cached input / output tokens (R² " + ce.rates.r2 + ")."));
|
| 166 |
if (h.text.uncounted) cost.append(trials("uncounted", "Reasoning left out of output tokens",
|
| 167 |
-
"The visible text alone fills the reported output tokens, so the recorded reasoning is on top: at ≈3.2 characters per token, at least " + pct0(h.text.uncounted) + " more output than reported, and so
|
| 168 |
if (h.uncosted) cost.append(trials("uncosted", "Trials without a recorded cost"));
|
| 169 |
|
| 170 |
// Two columns that fill independently: findings on the left; what ran, the trace and the cost on the right.
|
|
|
|
| 3 |
"use strict";
|
| 4 |
const T = window.TB;
|
| 5 |
const { D, el, link, pct0, fmt1, money, shortModel, rowPath, title, byId, OUTCOME, trialInfo, viewerHref, fullHref,
|
| 6 |
+
reasoningChip, RZ, RZ_HELP, visibleShare, problems, problemChip, strip } = T;
|
| 7 |
const DETAILS = window.TB21_DETAILS || {};
|
| 8 |
const compactN = n => (n >= 1e6 ? (n / 1e6).toFixed(1) + "M" : n >= 1e3 ? Math.round(n / 1e3) + "k" : String(n));
|
| 9 |
const main = document.getElementById("row");
|
|
|
|
| 79 |
stats.append(
|
| 80 |
stat(recount ? "Score" : "Leaderboard score", fmt1(r.lb.accuracy) + "%", "± " + fmt1(r.lb.ci95) + " · " + r.scan.rewarded + " of " + n + " trials rewarded"),
|
| 81 |
stat("Our estimate", fmt1(adj.accuracy) + "%", adj.rewarded + " of " + n + (adj.leads ? " · less " + adj.leads + (adj.leads === 1 ? " review lead" : " review leads") : "") + (adj.fallback ? " · less " + adj.fallback + (adj.fallback === 1 ? " fallback trial" : " fallback trials") : ""), adj.accuracy < r.lb.accuracy - 1 ? "stat--hot" : ""),
|
| 82 |
+
stat("Trace completeness", tk.mix ? pct0(1 - tk.mix.hidden) : "–", tk.mix ? "of output tokens have text in the trace · " + RZ[h.text.why] : "no token counts"),
|
| 83 |
stat("Cost, our estimate", ce.estimate === null ? "–" : (ce.lowerBound ? "≥" : "") + money(ce.estimate), (!recount && r.lb.cost !== null ? "leaderboard " + money(r.lb.cost) + " · " : "") + "recorded " + money(ce.recorded)));
|
| 84 |
const actions = el("div", "actions");
|
| 85 |
actions.append(link(rowPath(r) + "highlights/index.html", "Highlights", "btn btn--primary"),
|
|
|
|
| 128 |
/* What the trace holds. */
|
| 129 |
const trace = panel("trace", "What the trace holds");
|
| 130 |
const rz = el("p", "rz-line");
|
| 131 |
+
rz.append(reasoningChip(h), document.createTextNode(": " + RZ_HELP[h.text.why] + "."));
|
| 132 |
trace.append(rz);
|
| 133 |
const tstats = el("div", "stats stats--sm");
|
| 134 |
tstats.append(
|
| 135 |
stat("Output tokens, median trial", tk.outputMedian ? compactN(tk.outputMedian) : "–", tk.outputTotal ? compactN(tk.outputTotal) + " over the row" : ""),
|
| 136 |
+
stat("No text in trace", tk.mix ? pct0(tk.mix.hidden) : "–",
|
| 137 |
+
tk.measured ? "counted: reasoning tokens reported, no text" : "inferred: recorded text at ≈3.2 chars/token"),
|
| 138 |
stat("Text per output token", h.text.allCpt === null ? "–" : String(h.text.allCpt), "reasoning text in " + pct0(h.text.withText) + " of trials"));
|
| 139 |
trace.append(tstats);
|
| 140 |
if (tk.mix) { const mx = el("div", "mix-row"); mx.append(T.mixBar(tk, true), T.mixKey()); trace.append(mx); }
|
|
|
|
| 158 |
cstats.append(stat("Recorded, sum of trials", money(ce.recorded), h.uncosted ? h.uncosted + " trials uncosted" : "every trial costed"),
|
| 159 |
stat("Our estimate", ce.estimate === null ? "–" : (ce.lowerBound ? "≥" : "") + money(ce.estimate),
|
| 160 |
[ce.imputedTrials ? "+" + money(ce.imputed) + " for " + ce.imputedTrials + " uncosted trials, from their tokens" : "",
|
| 161 |
+
ce.unbilled ? "+" + money(ce.unbilled) + " undercounted reasoning" : "",
|
| 162 |
ce.unpriced ? ce.unpriced + " trials unpriced: no token usage" + (ce.rates ? "" : ", or no rates fit the recorded costs") : ""].filter(Boolean).join(" · ") || "nothing to add"));
|
| 163 |
cost.append(cstats);
|
| 164 |
if (ce.rates) cost.append(el("p", "muted small", "Rates fitted to this row's own trial costs and tokens: $" + ce.rates.uncached + " / $" + ce.rates.cached +
|
| 165 |
" / $" + ce.rates.output + " per million uncached input / cached input / output tokens (R² " + ce.rates.r2 + ")."));
|
| 166 |
if (h.text.uncounted) cost.append(trials("uncounted", "Reasoning left out of output tokens",
|
| 167 |
+
"The visible text alone fills the reported output tokens, so the recorded reasoning is on top: at ≈3.2 characters per token, at least " + pct0(h.text.uncounted) + " more output than reported, and so left out of the cost."));
|
| 168 |
if (h.uncosted) cost.append(trials("uncosted", "Trials without a recorded cost"));
|
| 169 |
|
| 170 |
// Two columns that fill independently: findings on the left; what ran, the trace and the cost on the right.
|
style.css
CHANGED
|
@@ -155,9 +155,9 @@ details.trials summary .label { font-weight: 650; }
|
|
| 155 |
.flags { margin: 6px 0 0; font-size: 13px; }
|
| 156 |
/* Reasoning form: a word, coloured by how much of the reasoning the trace lacks. */
|
| 157 |
.rz { font-size: 12px; font-weight: 650; text-align: left !important; }
|
| 158 |
-
.rz--
|
| 159 |
.rz--summary { color: var(--accent-ink); }
|
| 160 |
-
.rz--
|
| 161 |
/* Heat: one translucent hue per meaning; numbers stay ink. */
|
| 162 |
.heat { background: color-mix(in srgb, var(--hue) calc(var(--a, 0) * 42%), transparent); }
|
| 163 |
.heat--warm { --hue: var(--hl-h); } .heat--cool { --hue: var(--hl-m); } .heat--amber { --hue: var(--accent); }
|
|
|
|
| 155 |
.flags { margin: 6px 0 0; font-size: 13px; }
|
| 156 |
/* Reasoning form: a word, coloured by how much of the reasoning the trace lacks. */
|
| 157 |
.rz { font-size: 12px; font-weight: 650; text-align: left !important; }
|
| 158 |
+
.rz--complete { color: var(--ok); } .rz--unknown, .rz--noReasoning { color: var(--muted); }
|
| 159 |
.rz--summary { color: var(--accent-ink); }
|
| 160 |
+
.rz--withheld, .rz--notKept, .rz--lost { color: var(--danger); }
|
| 161 |
/* Heat: one translucent hue per meaning; numbers stay ink. */
|
| 162 |
.heat { background: color-mix(in srgb, var(--hue) calc(var(--a, 0) * 42%), transparent); }
|
| 163 |
.heat--warm { --hue: var(--hl-h); } .heat--cool { --hue: var(--hl-m); } .heat--amber { --hue: var(--accent); }
|