@plurnk/plurnk-digest 3.2.3 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/SPEC.md +35 -213
- package/dist/Digest.js +39 -39
- package/dist/Digest.js.map +1 -1
- package/dist/DigestArtifacts.d.ts +10 -0
- package/dist/DigestArtifacts.d.ts.map +1 -0
- package/dist/DigestArtifacts.js +452 -0
- package/dist/DigestArtifacts.js.map +1 -0
- package/dist/DigestFormat.d.ts +18 -0
- package/dist/DigestFormat.d.ts.map +1 -0
- package/dist/DigestFormat.js +142 -0
- package/dist/DigestFormat.js.map +1 -0
- package/dist/DigestLedgers.d.ts +21 -0
- package/dist/DigestLedgers.d.ts.map +1 -0
- package/dist/DigestLedgers.js +284 -0
- package/dist/DigestLedgers.js.map +1 -0
- package/dist/DigestRender.d.ts +15 -15
- package/dist/DigestRender.d.ts.map +1 -1
- package/dist/DigestRender.js +95 -967
- package/dist/DigestRender.js.map +1 -1
- package/dist/DigestRequiem.d.ts +1 -1
- package/dist/DigestRequiem.d.ts.map +1 -1
- package/dist/DigestRequiem.js +33 -33
- package/dist/DigestRequiem.js.map +1 -1
- package/dist/Share.js +1 -1
- package/dist/Share.js.map +1 -1
- package/dist/digest-paths.js +1 -1
- package/dist/digest-paths.js.map +1 -1
- package/dist/digest-rows.d.ts +22 -22
- package/dist/digest-rows.d.ts.map +1 -1
- package/dist/evidence.d.ts +3 -3
- package/dist/evidence.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { aggregateProviderAccounting, } from "@plurnk/plurnk-providers";
|
|
3
|
+
import { Validator, isRecord, isExecutionOp } from "@plurnk/plurnk-contracts";
|
|
4
|
+
export const literal = (body, language = "text") => {
|
|
5
|
+
let length = 3;
|
|
6
|
+
for (const match of body.matchAll(/`+/gu))
|
|
7
|
+
length = Math.max(length, match[0].length + 1);
|
|
8
|
+
const fence = "`".repeat(length);
|
|
9
|
+
return `${fence}${language}\n${body}\n${fence}`;
|
|
10
|
+
};
|
|
11
|
+
export const link = (from, target, label) => `[${label}](${posix.relative(posix.dirname(from), target)})`;
|
|
12
|
+
const summarize = (text, n = 80) => {
|
|
13
|
+
if (text === null || text === undefined)
|
|
14
|
+
return "";
|
|
15
|
+
const flat = (typeof text === "string" ? text : JSON.stringify(text) ?? "").replace(/\s+/g, " ").trim();
|
|
16
|
+
if (flat.length <= n)
|
|
17
|
+
return flat;
|
|
18
|
+
return `${flat.slice(0, n)}…`;
|
|
19
|
+
};
|
|
20
|
+
export const indentLines = (text, prefix = " ") => text.split("\n").map((line) => line.length > 0 ? `${prefix}${line}` : line).join("\n");
|
|
21
|
+
export const parseJson = (s, fallback = null) => {
|
|
22
|
+
if (s === null || s === undefined)
|
|
23
|
+
return fallback;
|
|
24
|
+
const text = typeof s === "string" ? s : Buffer.isBuffer(s) ? s.toString("utf8") : null;
|
|
25
|
+
if (text === null)
|
|
26
|
+
return fallback;
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(text);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return fallback;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const requestAccounting = (row) => {
|
|
35
|
+
if (row.state !== "settled" || row.accounting === null) {
|
|
36
|
+
throw new TypeError(`provider request ${row.id} is not settled`);
|
|
37
|
+
}
|
|
38
|
+
return row.accounting;
|
|
39
|
+
};
|
|
40
|
+
export const accounting = (rows) => rows.some((row) => row.state !== "settled")
|
|
41
|
+
? null
|
|
42
|
+
: aggregateProviderAccounting(rows.map((row) => requestAccounting(row)));
|
|
43
|
+
export const usageSummary = (acct) => {
|
|
44
|
+
if (acct === null)
|
|
45
|
+
return "accounting=incomplete";
|
|
46
|
+
const usage = acct.usage;
|
|
47
|
+
const known = acct.knownUsage;
|
|
48
|
+
const quantity = (total, subtotal) => total !== undefined ? String(total) : subtotal === undefined ? "unknown" : `${subtotal}+?`;
|
|
49
|
+
return [
|
|
50
|
+
`input=${quantity(usage?.inputTokens, known?.inputTokens)}`,
|
|
51
|
+
`output=${quantity(usage?.outputTokens, known?.outputTokens)}`,
|
|
52
|
+
`reasoning=${quantity(usage?.outputTokenDetails?.reasoningTokens, known?.outputTokenDetails?.reasoningTokens)}`,
|
|
53
|
+
`cache-read=${quantity(usage?.inputTokenDetails?.cacheReadTokens, known?.inputTokenDetails?.cacheReadTokens)}`,
|
|
54
|
+
].join(" ");
|
|
55
|
+
};
|
|
56
|
+
export const costSummary = (acct) => {
|
|
57
|
+
if (acct?.costUsd != null)
|
|
58
|
+
return `$${acct.costUsd}`;
|
|
59
|
+
return acct?.knownCostUsd == null ? "unknown" : `$${acct.knownCostUsd} + ? (incomplete)`;
|
|
60
|
+
};
|
|
61
|
+
const operationResult = (raw, subject) => {
|
|
62
|
+
try {
|
|
63
|
+
return Validator.assertOperationResult(parseJson(raw));
|
|
64
|
+
}
|
|
65
|
+
catch (cause) {
|
|
66
|
+
throw new Error(`${subject} does not contain a valid operation result`, { cause });
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
export const rowProblem = (row) => {
|
|
70
|
+
const result = operationResult(row.rx, `failed log entry ${row.id}`);
|
|
71
|
+
if (result.problem === undefined) {
|
|
72
|
+
throw new Error(`failed log entry ${row.id} does not contain Problem Details`);
|
|
73
|
+
}
|
|
74
|
+
return result.problem;
|
|
75
|
+
};
|
|
76
|
+
export const terminalResult = (loop) => loop.terminal_result === null
|
|
77
|
+
? null
|
|
78
|
+
: operationResult(loop.terminal_result, `terminal loop ${loop.id}`);
|
|
79
|
+
export const renderStream = (le) => {
|
|
80
|
+
if (!isExecutionOp(le.op))
|
|
81
|
+
return null;
|
|
82
|
+
const attrs = parseJson(le.attrs, {});
|
|
83
|
+
const stream = isRecord(attrs) ? attrs.stream : undefined;
|
|
84
|
+
return typeof stream === "string" ? stream : null;
|
|
85
|
+
};
|
|
86
|
+
// {§execution-output-identity} — the environment a spawn received, as recorded on its row: host names by
|
|
87
|
+
// name, the Session's own values, inherited values by their source, masked names. Host values
|
|
88
|
+
// stay in digest.json. Part of the rendered line, so spawns under different environments never
|
|
89
|
+
// collapse into one group.
|
|
90
|
+
export const envLine = (env) => {
|
|
91
|
+
if (!isRecord(env))
|
|
92
|
+
return null;
|
|
93
|
+
const host = [];
|
|
94
|
+
const rest = [];
|
|
95
|
+
for (const [name, raw] of Object.entries(env).toSorted(([left], [right]) => left.localeCompare(right))) {
|
|
96
|
+
const record = isRecord(raw) ? raw : {};
|
|
97
|
+
const from = typeof record.from === "string" ? record.from : null;
|
|
98
|
+
if (record.source === "host")
|
|
99
|
+
host.push(name);
|
|
100
|
+
else if (record.source === "masked")
|
|
101
|
+
rest.push(`${name} (masked${from === null ? "" : ` by ${from}`})`);
|
|
102
|
+
else if (record.source === "workspace")
|
|
103
|
+
rest.push(`${name}=${summarize(record.value, 60)} (workspace)`);
|
|
104
|
+
else
|
|
105
|
+
rest.push(`${name}=${summarize(record.value, 60)} (${from === null ? "session" : `from ${from}`})`);
|
|
106
|
+
}
|
|
107
|
+
const parts = [...(host.length === 0 ? [] : [`host ${host.join(",")}`]), ...rest];
|
|
108
|
+
return `env: ${parts.length === 0 ? "(empty)" : parts.join(" · ")}`;
|
|
109
|
+
};
|
|
110
|
+
// The environment a spawn recorded on its output, found through the row's stream address.
|
|
111
|
+
export const environmentOf = (le, m) => {
|
|
112
|
+
const stream = renderStream(le);
|
|
113
|
+
if (stream === null)
|
|
114
|
+
return undefined;
|
|
115
|
+
const session = m.sessionsById.get(le.session_id);
|
|
116
|
+
return session === undefined ? undefined : m.environments.get(`${session.workspace_id}:${stream}`);
|
|
117
|
+
};
|
|
118
|
+
// {§provider-failure-normalization} — an empty emission is read from what the wire carried, never guessed at.
|
|
119
|
+
export const wireLine = (assistantRaw) => {
|
|
120
|
+
const wire = isRecord(assistantRaw) && isRecord(assistantRaw.wire) ? assistantRaw.wire : null;
|
|
121
|
+
if (wire === null)
|
|
122
|
+
return null;
|
|
123
|
+
const chunks = typeof wire.chunks === "number" ? wire.chunks : 0;
|
|
124
|
+
const emptyChunks = typeof wire.emptyChunks === "number" ? wire.emptyChunks : 0;
|
|
125
|
+
const fields = isRecord(wire.fields) ? wire.fields : {};
|
|
126
|
+
const channels = isRecord(wire.channels) ? wire.channels : {};
|
|
127
|
+
const toolCalls = Array.isArray(wire.toolCalls) ? wire.toolCalls : [];
|
|
128
|
+
const unmappedChunks = Array.isArray(wire.unmappedChunks) ? wire.unmappedChunks : [];
|
|
129
|
+
const parts = [
|
|
130
|
+
`${chunks} chunks`,
|
|
131
|
+
emptyChunks > 0 ? `${emptyChunks} carried nothing` : null,
|
|
132
|
+
...Object.entries(fields).map(([field, count]) => `${field}×${String(count)}`),
|
|
133
|
+
...toolCalls.map((call) => {
|
|
134
|
+
const name = isRecord(call) && typeof call.name === "string" ? call.name : "?";
|
|
135
|
+
return `tool call ${name}(${summarize(isRecord(call) ? call.arguments : undefined, 60)})`;
|
|
136
|
+
}),
|
|
137
|
+
...Object.entries(channels).map(([channel, text]) => `${channel}: ${summarize(text, 60)}`),
|
|
138
|
+
unmappedChunks.length > 0 ? `${unmappedChunks.length} unmapped frames retained` : null,
|
|
139
|
+
].filter((part) => part !== null);
|
|
140
|
+
return ` ↳ wire: ${parts.join(", ")}`;
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=DigestFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DigestFormat.js","sourceRoot":"","sources":["../src/DigestFormat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type CacheLedgerEntry, type DigestModel, type EditCensus, type EditForm, type EditRow, type LogRow, type LoopRow, type ProviderRequestRow, type SessionRow, type TurnRow } from "./digest-rows.ts";
|
|
2
|
+
export declare const countsAsError: (le: LogRow) => boolean;
|
|
3
|
+
export declare const loopHealth: (loop: LoopRow, m: DigestModel) => {
|
|
4
|
+
errors: number;
|
|
5
|
+
errorItems: number;
|
|
6
|
+
verdict: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const editForm: (row: Pick<EditRow, "line_marker" | "pattern">) => EditForm;
|
|
9
|
+
export declare const editCensus: (m: DigestModel) => {
|
|
10
|
+
bySession: Map<number, EditCensus>;
|
|
11
|
+
formById: Map<number, EditForm>;
|
|
12
|
+
revisitById: Set<number>;
|
|
13
|
+
};
|
|
14
|
+
export declare const renderEditCensus: (census: EditCensus | undefined) => string;
|
|
15
|
+
export declare const cacheLedger: (m: DigestModel) => Map<number, CacheLedgerEntry>;
|
|
16
|
+
export declare const cacheBadge: (turn: TurnRow, m: DigestModel) => string;
|
|
17
|
+
export declare const cacheLine: (requests: readonly ProviderRequestRow[], m: DigestModel) => string;
|
|
18
|
+
export declare const renderRoom: (session: SessionRow, m: DigestModel) => string;
|
|
19
|
+
export declare const renderEmissions: (session: SessionRow, m: DigestModel) => string;
|
|
20
|
+
export declare const renderReasonings: (session: SessionRow, m: DigestModel) => string;
|
|
21
|
+
//# sourceMappingURL=DigestLedgers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DigestLedgers.d.ts","sourceRoot":"","sources":["../src/DigestLedgers.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,OAAO,EACf,MAAM,kBAAkB,CAAC;AAkB1B,eAAO,MAAM,aAAa,OAAQ,MAAM,KAAG,OACkC,CAAC;AAE9E,eAAO,MAAM,UAAU,SAAU,OAAO,KAAK,WAAW,KAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAc/G,CAAC;AAsBF,eAAO,MAAM,QAAQ,QAAS,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,KAAG,QAgBxE,CAAC;AAMF,eAAO,MAAM,UAAU,MAAO,WAAW,KAAG;IAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAwC1I,CAAC;AAEF,eAAO,MAAM,gBAAgB,WAAY,UAAU,GAAG,SAAS,KAAG,MAIjE,CAAC;AAKF,eAAO,MAAM,WAAW,MAAO,WAAW,KAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAuCxE,CAAC;AAQF,eAAO,MAAM,UAAU,SAAU,OAAO,KAAK,WAAW,KAAG,MAO1D,CAAC;AAGF,eAAO,MAAM,SAAS,aAAc,SAAS,kBAAkB,EAAE,KAAK,WAAW,KAAG,MAYnF,CAAC;AAiCF,eAAO,MAAM,UAAU,YAAa,UAAU,KAAK,WAAW,KAAG,MAShE,CAAC;AAGF,eAAO,MAAM,eAAe,YAAa,UAAU,KAAK,WAAW,KAAG,MAOrE,CAAC;AAGF,eAAO,MAAM,gBAAgB,YAAa,UAAU,KAAK,WAAW,KAAG,MAUtE,CAAC"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { isRecord } from "@plurnk/plurnk-contracts";
|
|
2
|
+
import { parseJson } from "./DigestFormat.js";
|
|
3
|
+
import { EDIT_FORMS, } from "./digest-rows.js";
|
|
4
|
+
// {§digest-forensic-fidelity} (#436) — a failed command's completion rows carry the
|
|
5
|
+
// executor's problem identity; a red test run is the loop's normal work, not a
|
|
6
|
+
// defect. They stay visible but never count as errors in health or the errs
|
|
7
|
+
// badge — the digest mirror of the strike rail's exemption (#425 F1).
|
|
8
|
+
const isExecutorEvidence = (le) => {
|
|
9
|
+
if (le.status_rx < 400 || le.rx === null)
|
|
10
|
+
return false;
|
|
11
|
+
const rx = parseJson(le.rx, null);
|
|
12
|
+
const problem = isRecord(rx) && isRecord(rx.problem) ? rx.problem : null;
|
|
13
|
+
return typeof problem?.type === "string" && problem.type.startsWith("https://problems.plurnk.xyz/executor/");
|
|
14
|
+
};
|
|
15
|
+
// {§digest-forensic-fidelity} (#1096) — a 413 is the capacity contract working: a result that did
|
|
16
|
+
// not fit, the over-budget mandate, a limit met. It renders like any row and never counts as an
|
|
17
|
+
// error, an error item or in the errs badge; a loop that concluded under a binding budget is CLEAN.
|
|
18
|
+
const isCapacityEvidence = (le) => le.status_rx === 413;
|
|
19
|
+
export const countsAsError = (le) => le.status_rx >= 400 && !isExecutorEvidence(le) && !isCapacityEvidence(le);
|
|
20
|
+
export const loopHealth = (loop, m) => {
|
|
21
|
+
let errors = 0;
|
|
22
|
+
let errorItems = 0;
|
|
23
|
+
for (const t of m.turnsByLoop.get(loop.id) ?? []) {
|
|
24
|
+
for (const le of m.logEntriesByTurn.get(t.id) ?? []) {
|
|
25
|
+
if (countsAsError(le))
|
|
26
|
+
errors += 1;
|
|
27
|
+
if (le.op === "error" && !isCapacityEvidence(le))
|
|
28
|
+
errorItems += 1;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const s = loop.status;
|
|
32
|
+
const verdict = s >= 400 ? `FAILED(${s})`
|
|
33
|
+
: s >= 200 && s < 300 ? (errors > 0 ? "DEGENERATE-WIN" : "CLEAN")
|
|
34
|
+
: `status=${s}`;
|
|
35
|
+
return { errors, errorItems, verdict };
|
|
36
|
+
};
|
|
37
|
+
// {§digest-forensic-fidelity} — the reconstructed text envelope, each role above its content,
|
|
38
|
+
// as `.wire.json` holds it ({§share-packet-names}); null when no valid packet is stored.
|
|
39
|
+
const promptText = (turn, m) => {
|
|
40
|
+
const { packet } = m.evidence.packet(turn);
|
|
41
|
+
if (packet === null)
|
|
42
|
+
return null;
|
|
43
|
+
const messages = packet.messages();
|
|
44
|
+
if (messages.length === 0)
|
|
45
|
+
return null;
|
|
46
|
+
return messages
|
|
47
|
+
.map(({ role, content }) => `${role}\n${content}`)
|
|
48
|
+
.join("\n");
|
|
49
|
+
};
|
|
50
|
+
const commonPrefixLength = (left, right) => {
|
|
51
|
+
const bound = Math.min(left.length, right.length);
|
|
52
|
+
let n = 0;
|
|
53
|
+
while (n < bound && left.charCodeAt(n) === right.charCodeAt(n))
|
|
54
|
+
n += 1;
|
|
55
|
+
return n;
|
|
56
|
+
};
|
|
57
|
+
// {§digest-forensic-fidelity}: the form an EDIT authored, read from its stored marker and pattern.
|
|
58
|
+
export const editForm = (row) => {
|
|
59
|
+
if (row.pattern !== null)
|
|
60
|
+
return "pattern";
|
|
61
|
+
if (row.line_marker === null)
|
|
62
|
+
return "whole";
|
|
63
|
+
const marker = parseJson(row.line_marker, { marks: [] });
|
|
64
|
+
const marks = isRecord(marker) && Array.isArray(marker.marks) ? marker.marks : [];
|
|
65
|
+
if (marks.length === 1) {
|
|
66
|
+
const [mark] = marks;
|
|
67
|
+
if (typeof mark === "string")
|
|
68
|
+
return "hash";
|
|
69
|
+
if (mark === -1)
|
|
70
|
+
return "append";
|
|
71
|
+
if (mark === 0)
|
|
72
|
+
return "prepend";
|
|
73
|
+
return "line";
|
|
74
|
+
}
|
|
75
|
+
if (marks.length === 2)
|
|
76
|
+
return "range";
|
|
77
|
+
if (marks.length === 3)
|
|
78
|
+
return "offset";
|
|
79
|
+
if (marks.length === 4 && marks[0] === marks[2] && marks[1] === 1 && marks[3] === 1)
|
|
80
|
+
return "insert";
|
|
81
|
+
return "column";
|
|
82
|
+
};
|
|
83
|
+
const editCensusCache = new WeakMap();
|
|
84
|
+
// {§digest-forensic-fidelity}: per session, every model EDIT by authored form and status, and the
|
|
85
|
+
// revisits — an EDIT of a path the same session edited within its previous two model turns.
|
|
86
|
+
export const editCensus = (m) => {
|
|
87
|
+
const cached = editCensusCache.get(m);
|
|
88
|
+
if (cached !== undefined)
|
|
89
|
+
return cached;
|
|
90
|
+
const loopSession = new Map(m.loops.map((loop) => [loop.id, loop.session_id]));
|
|
91
|
+
// A session's model turns in order; the ordinal is the distance the revisit window counts in.
|
|
92
|
+
const ordinal = new Map();
|
|
93
|
+
const perSession = new Map();
|
|
94
|
+
for (const turn of [...m.turns].toSorted((a, b) => a.id - b.id)) {
|
|
95
|
+
if (turn.producer !== "model")
|
|
96
|
+
continue;
|
|
97
|
+
const sessionId = loopSession.get(turn.loop_id);
|
|
98
|
+
if (sessionId === undefined)
|
|
99
|
+
throw new TypeError(`turn ${turn.id} has no loop in scope`);
|
|
100
|
+
const next = (perSession.get(sessionId) ?? 0) + 1;
|
|
101
|
+
perSession.set(sessionId, next);
|
|
102
|
+
ordinal.set(turn.id, next);
|
|
103
|
+
}
|
|
104
|
+
const bySession = new Map();
|
|
105
|
+
const formById = new Map();
|
|
106
|
+
const revisitById = new Set();
|
|
107
|
+
for (const [sessionId, rows] of m.editRowsBySession) {
|
|
108
|
+
const census = { edits: 0, refused: 0, revisits: 0, forms: Object.fromEntries(EDIT_FORMS.map((form) => [form, 0])) };
|
|
109
|
+
const lastEdited = new Map();
|
|
110
|
+
for (const row of rows) {
|
|
111
|
+
const form = editForm(row);
|
|
112
|
+
formById.set(row.id, form);
|
|
113
|
+
census.edits += 1;
|
|
114
|
+
census.forms[form] = (census.forms[form] ?? 0) + 1;
|
|
115
|
+
if (row.status_rx >= 400)
|
|
116
|
+
census.refused += 1;
|
|
117
|
+
const at = ordinal.get(row.turn_id);
|
|
118
|
+
if (at === undefined)
|
|
119
|
+
throw new TypeError(`EDIT ${row.id} sits on a turn no model produced`);
|
|
120
|
+
if (row.pathname !== null) {
|
|
121
|
+
const previous = lastEdited.get(row.pathname);
|
|
122
|
+
if (previous !== undefined && previous < at && at - previous <= 2) {
|
|
123
|
+
census.revisits += 1;
|
|
124
|
+
revisitById.add(row.id);
|
|
125
|
+
}
|
|
126
|
+
lastEdited.set(row.pathname, at);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
bySession.set(sessionId, census);
|
|
130
|
+
}
|
|
131
|
+
const result = { bySession, formById, revisitById };
|
|
132
|
+
editCensusCache.set(m, result);
|
|
133
|
+
return result;
|
|
134
|
+
};
|
|
135
|
+
export const renderEditCensus = (census) => {
|
|
136
|
+
if (census === undefined || census.edits === 0)
|
|
137
|
+
return "(no edits)";
|
|
138
|
+
const forms = EDIT_FORMS.filter((form) => (census.forms[form] ?? 0) > 0).map((form) => `${form}=${census.forms[form] ?? 0}`).join(" ");
|
|
139
|
+
return `${census.edits} · ${forms} · refused=${census.refused} · revisits=${census.revisits}`;
|
|
140
|
+
};
|
|
141
|
+
const cacheLedgerCache = new WeakMap();
|
|
142
|
+
// {§digest-forensic-fidelity} — estimate adjacent prefixes with at most two prompts resident per loop.
|
|
143
|
+
export const cacheLedger = (m) => {
|
|
144
|
+
const cached = cacheLedgerCache.get(m);
|
|
145
|
+
if (cached !== undefined)
|
|
146
|
+
return cached;
|
|
147
|
+
const turnsById = new Map(m.turns.map((turn) => [turn.id, turn]));
|
|
148
|
+
const ledger = new Map();
|
|
149
|
+
for (const loop of m.loops) {
|
|
150
|
+
let memo;
|
|
151
|
+
const promptOf = (turn) => {
|
|
152
|
+
if (memo?.turnId !== turn.id)
|
|
153
|
+
memo = { turnId: turn.id, text: promptText(turn, m) };
|
|
154
|
+
return memo.text;
|
|
155
|
+
};
|
|
156
|
+
// undefined: no previous request in this loop; null: the previous request's packet is not valid.
|
|
157
|
+
let previousText;
|
|
158
|
+
for (const request of m.requestsByLoop.get(loop.id) ?? []) {
|
|
159
|
+
const turn = turnsById.get(request.turn_id);
|
|
160
|
+
if (turn === undefined)
|
|
161
|
+
throw new TypeError(`provider request ${request.id} has no turn in scope`);
|
|
162
|
+
const text = request.kind === "emission" ? promptOf(turn) : null;
|
|
163
|
+
const adjacentPrefixTokensEstimate = text === null || request.usage_input === null
|
|
164
|
+
? null
|
|
165
|
+
: previousText === undefined
|
|
166
|
+
? 0
|
|
167
|
+
: previousText === null
|
|
168
|
+
? null
|
|
169
|
+
: text.length === 0
|
|
170
|
+
? 0
|
|
171
|
+
: Math.round(request.usage_input * m.evidence.textWeight(text.slice(0, commonPrefixLength(previousText, text))) / m.evidence.textWeight(text));
|
|
172
|
+
ledger.set(request.id, {
|
|
173
|
+
adjacentPrefixTokensEstimate,
|
|
174
|
+
cachedTokens: request.usage_input_cache_read,
|
|
175
|
+
inputTokens: request.usage_input,
|
|
176
|
+
});
|
|
177
|
+
previousText = text;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
for (const request of m.providerRequests) {
|
|
181
|
+
if (!ledger.has(request.id))
|
|
182
|
+
throw new TypeError(`provider request ${request.id} has no loop in scope`);
|
|
183
|
+
}
|
|
184
|
+
cacheLedgerCache.set(m, ledger);
|
|
185
|
+
return ledger;
|
|
186
|
+
};
|
|
187
|
+
const cacheEntries = (requests, m) => {
|
|
188
|
+
const ledger = cacheLedger(m);
|
|
189
|
+
return requests.map((request) => ledger.get(request.id));
|
|
190
|
+
};
|
|
191
|
+
// {§digest-forensic-fidelity} — sum each provider-reported counter; one absent quantity makes that sum unknown.
|
|
192
|
+
export const cacheBadge = (turn, m) => {
|
|
193
|
+
const entries = cacheEntries(m.requestsByTurn.get(turn.id) ?? [], m);
|
|
194
|
+
if (entries.length === 0)
|
|
195
|
+
return "";
|
|
196
|
+
const sum = (values) => values.some((value) => value === null)
|
|
197
|
+
? "?"
|
|
198
|
+
: String(values.reduce((total, value) => total + (value ?? 0), 0));
|
|
199
|
+
return ` cache=${sum(entries.map((entry) => entry.cachedTokens))}/${sum(entries.map((entry) => entry.inputTokens))}`;
|
|
200
|
+
};
|
|
201
|
+
// {§digest-forensic-fidelity} — one workspace line; unreported requests are named and left out of the percentage.
|
|
202
|
+
export const cacheLine = (requests, m) => {
|
|
203
|
+
const entries = cacheEntries(requests, m);
|
|
204
|
+
const reported = entries.filter((entry) => entry.cachedTokens !== null && entry.inputTokens !== null);
|
|
205
|
+
const unreported = entries.length - reported.length;
|
|
206
|
+
const cached = reported.reduce((total, entry) => total + (entry.cachedTokens ?? 0), 0);
|
|
207
|
+
const input = reported.reduce((total, entry) => total + (entry.inputTokens ?? 0), 0);
|
|
208
|
+
const pct = input === 0 ? "n/a" : `${((100 * cached) / input).toFixed(1)}%`;
|
|
209
|
+
const plural = (n) => n === 1 ? "request" : "requests";
|
|
210
|
+
return [
|
|
211
|
+
`Cache: ${cached} of ${input} reported input tokens read from cache (${pct}) over ${reported.length} ${plural(reported.length)}`,
|
|
212
|
+
unreported > 0 ? `${unreported} missing input or cache usage (excluded)` : null,
|
|
213
|
+
].filter((part) => part !== null).join(" · ");
|
|
214
|
+
};
|
|
215
|
+
// One measure per packet-bearing inference turn whose request records a known capacity and wall and a
|
|
216
|
+
// provider count: the exact preflight measurement, else the reported input.
|
|
217
|
+
const roomMeasures = (session, m) => {
|
|
218
|
+
const measures = [];
|
|
219
|
+
for (const loop of m.loopsBySession.get(session.id) ?? []) {
|
|
220
|
+
for (const turn of m.turnsByLoop.get(loop.id) ?? []) {
|
|
221
|
+
if (turn.kind !== "inference" || turn.has_packet !== 1)
|
|
222
|
+
continue;
|
|
223
|
+
const packet = m.evidence.packet(turn).packet;
|
|
224
|
+
if (packet === null || packet.budget === null || packet.budget === 0 || packet.weight === 0)
|
|
225
|
+
continue;
|
|
226
|
+
const call = m.modelCalls.findLast((row) => row.turn_id === turn.id && row.kind === "emission" && row.capacity !== null);
|
|
227
|
+
const capacity = parseJson(call?.capacity);
|
|
228
|
+
const inputCapacity = isRecord(capacity) ? capacity.inputCapacity : undefined;
|
|
229
|
+
const inputWall = isRecord(capacity) ? capacity.inputWall : undefined;
|
|
230
|
+
if (typeof inputCapacity !== "number" || typeof inputWall !== "number")
|
|
231
|
+
continue;
|
|
232
|
+
const reported = (m.requestsByTurn.get(turn.id) ?? [])
|
|
233
|
+
.findLast((row) => row.kind === "emission" && row.outcome === "response" && row.usage_input !== null)?.usage_input ?? null;
|
|
234
|
+
const prompt = isRecord(capacity) && isRecord(capacity.prompt) ? capacity.prompt : null;
|
|
235
|
+
const count = prompt?.kind === "exact" ? (typeof prompt.tokens === "number" ? prompt.tokens : null) : reported;
|
|
236
|
+
if (count === null || count === 0)
|
|
237
|
+
continue;
|
|
238
|
+
measures.push({
|
|
239
|
+
weight: packet.weight, budget: packet.budget, capacity: inputCapacity, wall: inputWall, count,
|
|
240
|
+
estimate: Math.ceil(packet.weight * inputCapacity / packet.budget),
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return measures;
|
|
245
|
+
};
|
|
246
|
+
// {§digest-forensic-fidelity} — the room in provider tokens: the largest budget the model was shown, at its
|
|
247
|
+
// request's own ratio, against the capacity; the wall's estimate against the provider's count; and the
|
|
248
|
+
// requests the estimate put under the wall while the count was over it.
|
|
249
|
+
export const renderRoom = (session, m) => {
|
|
250
|
+
const measured = roomMeasures(session, m);
|
|
251
|
+
if (measured.length === 0)
|
|
252
|
+
return "(no measured requests)";
|
|
253
|
+
const room = Math.max(...measured.map(({ weight, budget, count, capacity }) => budget * count / weight / capacity));
|
|
254
|
+
const errors = measured.map(({ estimate, count }) => (estimate - count) / count);
|
|
255
|
+
const missed = measured.filter(({ estimate, count, wall }) => estimate <= wall && count > wall).length;
|
|
256
|
+
const percent = (ratio) => `${ratio < 0 ? "-" : "+"}${Math.abs(100 * ratio).toFixed(1)}%`;
|
|
257
|
+
return `budget up to ${Math.round(100 * room)}% of capacity · wall estimate ${percent(Math.min(...errors))} to ${percent(Math.max(...errors))} of the count`
|
|
258
|
+
+ (missed === 0 ? "" : ` ⚠ ${missed} over the wall the estimate admitted`);
|
|
259
|
+
};
|
|
260
|
+
// {§turn-source-resources} — announced, retired by the model, and echoed back as headings in its own text.
|
|
261
|
+
export const renderEmissions = (session, m) => {
|
|
262
|
+
const rows = m.emissionRows.filter((row) => row.session_id === session.id);
|
|
263
|
+
const killed = rows.filter((row) => row.active === 0).length;
|
|
264
|
+
const echoes = (m.loopsBySession.get(session.id) ?? [])
|
|
265
|
+
.flatMap((loop) => m.turnsByLoop.get(loop.id) ?? [])
|
|
266
|
+
.reduce((sum, turn) => sum + turn.packetEchoes, 0);
|
|
267
|
+
return `${rows.length} announced · ${killed} killed · ${echoes} header echo${echoes === 1 ? "" : "es"}`;
|
|
268
|
+
};
|
|
269
|
+
// {§turn-source-resources} — landed, retired by the model, and turns that reasoned.
|
|
270
|
+
export const renderReasonings = (session, m) => {
|
|
271
|
+
const rows = m.reasoningRows.filter((row) => row.session_id === session.id);
|
|
272
|
+
const killed = rows.filter((row) => row.active === 0).length;
|
|
273
|
+
const reasonedTurns = (m.loopsBySession.get(session.id) ?? [])
|
|
274
|
+
.flatMap((loop) => m.turnsByLoop.get(loop.id) ?? [])
|
|
275
|
+
.filter((turn) => turn.has_reasoning === 1).length;
|
|
276
|
+
if (reasonedTurns === 0 && rows.length === 0)
|
|
277
|
+
return "(no reasoning)";
|
|
278
|
+
if (rows.length === 0)
|
|
279
|
+
return `0 of ${reasonedTurns} landed (unbudgeted or disabled)`;
|
|
280
|
+
if (reasonedTurns > rows.length)
|
|
281
|
+
return `${rows.length} of ${reasonedTurns} landed · ${killed} killed`;
|
|
282
|
+
return `${rows.length} landed · ${killed} killed`;
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=DigestLedgers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DigestLedgers.js","sourceRoot":"","sources":["../src/DigestLedgers.ts"],"names":[],"mappings":"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"}
|
package/dist/DigestRender.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { costSummary, envLine, parseJson, usageSummary, wireLine } from "./DigestFormat.ts";
|
|
2
|
+
import { cacheLedger, editForm } from "./DigestLedgers.ts";
|
|
3
|
+
import { json, packetFiles, packetStems, request } from "./DigestArtifacts.ts";
|
|
4
|
+
import type { DigestModel } from "./digest-rows.ts";
|
|
3
5
|
export default class DigestRender {
|
|
4
6
|
#private;
|
|
5
|
-
static parseJson
|
|
6
|
-
static usageSummary
|
|
7
|
-
static costSummary
|
|
8
|
-
static envLine
|
|
9
|
-
static
|
|
10
|
-
static
|
|
11
|
-
static
|
|
7
|
+
static parseJson: typeof parseJson;
|
|
8
|
+
static usageSummary: typeof usageSummary;
|
|
9
|
+
static costSummary: typeof costSummary;
|
|
10
|
+
static envLine: typeof envLine;
|
|
11
|
+
static wireLine: typeof wireLine;
|
|
12
|
+
static editForm: typeof editForm;
|
|
13
|
+
static cacheLedger: typeof cacheLedger;
|
|
14
|
+
static packetStems: typeof packetStems;
|
|
15
|
+
static request: typeof request;
|
|
16
|
+
static packetFiles: typeof packetFiles;
|
|
17
|
+
static json: typeof json;
|
|
12
18
|
static waterfall(m: DigestModel): string;
|
|
13
19
|
static reasoning(m: DigestModel): string;
|
|
14
|
-
static request(messages: ReadonlyArray<ChatMessage & {
|
|
15
|
-
content: string;
|
|
16
|
-
}>, preamble?: readonly string[]): string;
|
|
17
|
-
static packetStems(m: DigestModel): Map<number, string>;
|
|
18
|
-
static packetFiles(m: DigestModel): string[];
|
|
19
|
-
static json(m: DigestModel): Generator<string>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=DigestRender.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DigestRender.d.ts","sourceRoot":"","sources":["../src/DigestRender.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DigestRender.d.ts","sourceRoot":"","sources":["../src/DigestRender.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,WAAW,EAEX,OAAO,EAIP,SAAS,EAIT,YAAY,EACZ,QAAQ,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEH,WAAW,EAIX,QAAQ,EAMX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,kBAAkB,CAAC;AAE1F,MAAM,CAAC,OAAO,OAAO,YAAY;;IAC7B,MAAM,CAAC,SAAS,mBAAa;IAC7B,MAAM,CAAC,YAAY,sBAAgB;IACnC,MAAM,CAAC,WAAW,qBAAe;IACjC,MAAM,CAAC,OAAO,iBAAW;IACzB,MAAM,CAAC,QAAQ,kBAAY;IAC3B,MAAM,CAAC,QAAQ,kBAAY;IAC3B,MAAM,CAAC,WAAW,qBAAe;IACjC,MAAM,CAAC,WAAW,qBAAe;IACjC,MAAM,CAAC,OAAO,iBAAW;IACzB,MAAM,CAAC,WAAW,qBAAe;IACjC,MAAM,CAAC,IAAI,cAAQ;IAmNnB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAsEvC;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CA2EvC;CACJ"}
|