@dsh-enhanced/assistant-evaluation 0.1.24 → 0.1.30
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 +109 -3
- package/bin/dsh-benchmark.js +21 -0
- package/lib/benchmark/cli.d.ts +6 -0
- package/lib/benchmark/cli.d.ts.map +1 -0
- package/lib/benchmark/cli.js +332 -0
- package/lib/benchmark/cli.js.map +1 -0
- package/lib/benchmark/corpus.d.ts +28 -0
- package/lib/benchmark/corpus.d.ts.map +1 -0
- package/lib/benchmark/corpus.js +173 -0
- package/lib/benchmark/corpus.js.map +1 -0
- package/lib/benchmark/deepseek.d.ts +15 -0
- package/lib/benchmark/deepseek.d.ts.map +1 -0
- package/lib/benchmark/deepseek.js +143 -0
- package/lib/benchmark/deepseek.js.map +1 -0
- package/lib/benchmark/holdout-evidence.d.ts +126 -0
- package/lib/benchmark/holdout-evidence.d.ts.map +1 -0
- package/lib/benchmark/holdout-evidence.js +466 -0
- package/lib/benchmark/holdout-evidence.js.map +1 -0
- package/lib/benchmark/holdout-protocol.d.ts +68 -0
- package/lib/benchmark/holdout-protocol.d.ts.map +1 -0
- package/lib/benchmark/holdout-protocol.js +271 -0
- package/lib/benchmark/holdout-protocol.js.map +1 -0
- package/lib/benchmark/holdout-provider.d.ts +26 -0
- package/lib/benchmark/holdout-provider.d.ts.map +1 -0
- package/lib/benchmark/holdout-provider.js +382 -0
- package/lib/benchmark/holdout-provider.js.map +1 -0
- package/lib/benchmark/holdout.d.ts +83 -0
- package/lib/benchmark/holdout.d.ts.map +1 -0
- package/lib/benchmark/holdout.js +391 -0
- package/lib/benchmark/holdout.js.map +1 -0
- package/lib/benchmark/index.d.ts +9 -0
- package/lib/benchmark/index.d.ts.map +1 -0
- package/lib/benchmark/index.js +7 -0
- package/lib/benchmark/index.js.map +1 -0
- package/lib/benchmark/memory-corpus.d.ts +55 -0
- package/lib/benchmark/memory-corpus.d.ts.map +1 -0
- package/lib/benchmark/memory-corpus.js +153 -0
- package/lib/benchmark/memory-corpus.js.map +1 -0
- package/lib/benchmark/memory-runtime.d.ts +63 -0
- package/lib/benchmark/memory-runtime.d.ts.map +1 -0
- package/lib/benchmark/memory-runtime.js +75 -0
- package/lib/benchmark/memory-runtime.js.map +1 -0
- package/lib/benchmark/native.d.ts +46 -0
- package/lib/benchmark/native.d.ts.map +1 -0
- package/lib/benchmark/native.js +300 -0
- package/lib/benchmark/native.js.map +1 -0
- package/lib/benchmark/report.d.ts +4 -0
- package/lib/benchmark/report.d.ts.map +1 -0
- package/lib/benchmark/report.js +153 -0
- package/lib/benchmark/report.js.map +1 -0
- package/lib/benchmark/runner.d.ts +25 -0
- package/lib/benchmark/runner.d.ts.map +1 -0
- package/lib/benchmark/runner.js +119 -0
- package/lib/benchmark/runner.js.map +1 -0
- package/lib/benchmark/schema.d.ts +20 -0
- package/lib/benchmark/schema.d.ts.map +1 -0
- package/lib/benchmark/schema.js +183 -0
- package/lib/benchmark/schema.js.map +1 -0
- package/lib/benchmark/store.d.ts +18 -0
- package/lib/benchmark/store.d.ts.map +1 -0
- package/lib/benchmark/store.js +321 -0
- package/lib/benchmark/store.js.map +1 -0
- package/lib/benchmark/strategy-capabilities.d.ts +154 -0
- package/lib/benchmark/strategy-capabilities.d.ts.map +1 -0
- package/lib/benchmark/strategy-capabilities.js +300 -0
- package/lib/benchmark/strategy-capabilities.js.map +1 -0
- package/lib/benchmark/strategy-config.d.ts +26 -0
- package/lib/benchmark/strategy-config.d.ts.map +1 -0
- package/lib/benchmark/strategy-config.js +80 -0
- package/lib/benchmark/strategy-config.js.map +1 -0
- package/lib/benchmark/strategy-corpus.d.ts +21 -0
- package/lib/benchmark/strategy-corpus.d.ts.map +1 -0
- package/lib/benchmark/strategy-corpus.js +95 -0
- package/lib/benchmark/strategy-corpus.js.map +1 -0
- package/lib/benchmark/strategy-evidence.d.ts +161 -0
- package/lib/benchmark/strategy-evidence.d.ts.map +1 -0
- package/lib/benchmark/strategy-evidence.js +520 -0
- package/lib/benchmark/strategy-evidence.js.map +1 -0
- package/lib/benchmark/strategy-executor.d.ts +27 -0
- package/lib/benchmark/strategy-executor.d.ts.map +1 -0
- package/lib/benchmark/strategy-executor.js +178 -0
- package/lib/benchmark/strategy-executor.js.map +1 -0
- package/lib/benchmark/strategy-goal-runtime.d.ts +78 -0
- package/lib/benchmark/strategy-goal-runtime.d.ts.map +1 -0
- package/lib/benchmark/strategy-goal-runtime.js +324 -0
- package/lib/benchmark/strategy-goal-runtime.js.map +1 -0
- package/lib/benchmark/strategy-meter.d.ts +62 -0
- package/lib/benchmark/strategy-meter.d.ts.map +1 -0
- package/lib/benchmark/strategy-meter.js +236 -0
- package/lib/benchmark/strategy-meter.js.map +1 -0
- package/lib/benchmark/strategy-owner.d.ts +71 -0
- package/lib/benchmark/strategy-owner.d.ts.map +1 -0
- package/lib/benchmark/strategy-owner.js +282 -0
- package/lib/benchmark/strategy-owner.js.map +1 -0
- package/lib/benchmark/strategy-plan.d.ts +51 -0
- package/lib/benchmark/strategy-plan.d.ts.map +1 -0
- package/lib/benchmark/strategy-plan.js +71 -0
- package/lib/benchmark/strategy-plan.js.map +1 -0
- package/lib/benchmark/strategy-policy.d.ts +16 -0
- package/lib/benchmark/strategy-policy.d.ts.map +1 -0
- package/lib/benchmark/strategy-policy.js +77 -0
- package/lib/benchmark/strategy-policy.js.map +1 -0
- package/lib/benchmark/strategy.d.ts +17 -0
- package/lib/benchmark/strategy.d.ts.map +1 -0
- package/lib/benchmark/strategy.js +21 -0
- package/lib/benchmark/strategy.js.map +1 -0
- package/lib/benchmark/types.d.ts +133 -0
- package/lib/benchmark/types.d.ts.map +1 -0
- package/lib/benchmark/types.js +3 -0
- package/lib/benchmark/types.js.map +1 -0
- package/lib/benchmark/usage.d.ts +36 -0
- package/lib/benchmark/usage.d.ts.map +1 -0
- package/lib/benchmark/usage.js +84 -0
- package/lib/benchmark/usage.js.map +1 -0
- package/lib/service.d.ts +50 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +556 -9
- package/lib/service.js.map +1 -1
- package/lib/sqlite.d.ts +1 -1
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +94 -2
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +27 -5
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +324 -25
- package/lib/store.js.map +1 -1
- package/lib/types.d.ts +114 -5
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +125 -18
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { acceptanceCanonicalJson } from '@dsh-enhanced/task-acceptance-contract';
|
|
3
|
+
import { HoldoutEvidenceStore, } from './holdout-evidence.js';
|
|
4
|
+
import { holdoutAuthorityKeyId, holdoutEnvelopeDigest, holdoutInputBytes, parseSignedHoldoutFinish, parseSignedHoldoutInput, parseSignedHoldoutManifest, parseSignedHoldoutVerdict, } from './holdout-protocol.js';
|
|
5
|
+
import { runBenchmark } from './runner.js';
|
|
6
|
+
import { BenchmarkError, benchmarkAssert, benchmarkHash, benchmarkObject, benchmarkPlanDigest, benchmarkSchedule, benchmarkSnapshot, benchmarkVersionKeys, parseBenchmarkMetrics, parseBenchmarkPlan, } from './schema.js';
|
|
7
|
+
import { BenchmarkStore } from './store.js';
|
|
8
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 1024 * 1024;
|
|
9
|
+
const DEFAULT_DELEGATE_CLOSE_TIMEOUT_MS = 10_000;
|
|
10
|
+
const DEFAULT_PROVIDER_TIMEOUT_MS = 10_000;
|
|
11
|
+
const MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
|
|
12
|
+
const MAX_CLOSE_TIMEOUT_MS = 300_000;
|
|
13
|
+
const CONTENT_TYPE = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.+/-]{0,126}(?:; charset=utf-8)?$/u;
|
|
14
|
+
function same(left, right) {
|
|
15
|
+
return acceptanceCanonicalJson(left) === acceptanceCanonicalJson(right);
|
|
16
|
+
}
|
|
17
|
+
function exactData(value, fields, label) {
|
|
18
|
+
benchmarkAssert(value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
19
|
+
&& Object.getPrototypeOf(value) === Object.prototype, `${label} must be a plain object`);
|
|
20
|
+
const record = value;
|
|
21
|
+
const keys = Reflect.ownKeys(record);
|
|
22
|
+
benchmarkAssert(keys.length === fields.length
|
|
23
|
+
&& keys.every(key => typeof key === 'string' && fields.includes(key)), `${label} has unexpected fields`);
|
|
24
|
+
for (const key of keys) {
|
|
25
|
+
const descriptor = Object.getOwnPropertyDescriptor(record, key);
|
|
26
|
+
benchmarkAssert(descriptor.enumerable && Object.hasOwn(descriptor, 'value'), `${label} contains an unsafe property`);
|
|
27
|
+
}
|
|
28
|
+
return record;
|
|
29
|
+
}
|
|
30
|
+
function boundedInteger(value, fallback, maximum, label) {
|
|
31
|
+
const selected = value ?? fallback;
|
|
32
|
+
benchmarkAssert(typeof selected === 'number' && Number.isSafeInteger(selected)
|
|
33
|
+
&& selected >= 1 && selected <= maximum, `invalid ${label}`);
|
|
34
|
+
return selected;
|
|
35
|
+
}
|
|
36
|
+
function assertContentType(value, label) {
|
|
37
|
+
benchmarkAssert(typeof value === 'string' && CONTENT_TYPE.test(value), `invalid ${label}`);
|
|
38
|
+
}
|
|
39
|
+
function validateDatasetPin(value, plan) {
|
|
40
|
+
const pin = exactData(value, ['id', 'version', 'digest'], 'holdout dataset pin');
|
|
41
|
+
benchmarkHash(pin.digest);
|
|
42
|
+
benchmarkAssert(typeof pin.id === 'string' && typeof pin.version === 'string'
|
|
43
|
+
&& same(pin, { id: plan.dataset.id, version: plan.dataset.version, digest: plan.dataset.digest }), 'holdout plan differs from the operator-pinned dataset');
|
|
44
|
+
return Object.freeze({ id: pin.id, version: pin.version, digest: pin.digest });
|
|
45
|
+
}
|
|
46
|
+
function validateManifest(value, plan, pinnedPublicKey) {
|
|
47
|
+
const manifest = parseSignedHoldoutManifest(value, pinnedPublicKey);
|
|
48
|
+
benchmarkAssert(same(manifest.dataset, plan.dataset) && same(manifest.cases, plan.cases), 'signed holdout manifest differs from the operator-pinned plan');
|
|
49
|
+
return manifest;
|
|
50
|
+
}
|
|
51
|
+
function validateBinding(value) {
|
|
52
|
+
benchmarkAssert(value !== null && typeof value === 'object'
|
|
53
|
+
&& typeof value.execute === 'function'
|
|
54
|
+
&& typeof value.close === 'function', 'invalid holdout delegate binding');
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
function validateDelegateResult(value, request, maxOutputBytes) {
|
|
58
|
+
const raw = exactData(value, ['output', 'versions', 'metrics', 'executionEvidenceDigest', 'quiescent'], 'holdout delegate result');
|
|
59
|
+
const output = exactData(raw.output, ['contentType', 'bytes'], 'holdout delegate output');
|
|
60
|
+
assertContentType(output.contentType, 'holdout output content type');
|
|
61
|
+
benchmarkAssert(output.bytes instanceof Uint8Array && Object.getPrototypeOf(output.bytes) === Uint8Array.prototype, 'holdout output bytes must be a Uint8Array');
|
|
62
|
+
const rawOutputBytes = output.bytes;
|
|
63
|
+
benchmarkAssert(rawOutputBytes.byteLength <= maxOutputBytes, 'holdout output exceeds its byte limit');
|
|
64
|
+
const outputBytes = Uint8Array.from(rawOutputBytes);
|
|
65
|
+
const versions = benchmarkObject(benchmarkSnapshot(raw.versions), benchmarkVersionKeys);
|
|
66
|
+
benchmarkAssert(same(versions, request.variant.versions), 'holdout delegate loaded different versions');
|
|
67
|
+
const metrics = parseBenchmarkMetrics(raw.metrics);
|
|
68
|
+
benchmarkAssert(metrics.latencyMs === null && metrics.inputTokens !== null && metrics.outputTokens !== null
|
|
69
|
+
&& metrics.toolCalls !== null && (request.budget.costUsdMicros === null || metrics.costUsdMicros !== null), 'holdout delegate metrics are incomplete or contain adapter latency');
|
|
70
|
+
benchmarkAssert(metrics.inputTokens <= request.budget.inputTokens && metrics.outputTokens <= request.budget.outputTokens
|
|
71
|
+
&& metrics.toolCalls <= request.budget.toolCalls
|
|
72
|
+
&& (request.budget.costUsdMicros === null || metrics.costUsdMicros <= request.budget.costUsdMicros), 'holdout delegate exceeded a Host budget');
|
|
73
|
+
benchmarkHash(raw.executionEvidenceDigest);
|
|
74
|
+
benchmarkAssert(raw.quiescent === true, 'holdout delegate did not prove quiescence');
|
|
75
|
+
return Object.freeze({
|
|
76
|
+
outputContentType: output.contentType, outputBytes, rawOutputBytes, metrics,
|
|
77
|
+
executionEvidenceDigest: raw.executionEvidenceDigest,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async function within(promise, milliseconds, message = 'holdout delegate cleanup was not confirmed') {
|
|
81
|
+
let timer;
|
|
82
|
+
try {
|
|
83
|
+
return await Promise.race([promise, new Promise((_resolve, reject) => {
|
|
84
|
+
timer = setTimeout(() => reject(new BenchmarkError(message)), milliseconds);
|
|
85
|
+
timer.unref();
|
|
86
|
+
})]);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
if (timer !== undefined)
|
|
90
|
+
clearTimeout(timer);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function withinAbort(promise, signal, milliseconds, message) {
|
|
94
|
+
if (signal?.aborted)
|
|
95
|
+
throw new BenchmarkError(message);
|
|
96
|
+
let removeAbort;
|
|
97
|
+
try {
|
|
98
|
+
const aborted = signal === undefined ? new Promise(() => { }) : new Promise((_resolve, reject) => {
|
|
99
|
+
const abort = () => reject(new BenchmarkError(message));
|
|
100
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
101
|
+
removeAbort = () => signal.removeEventListener('abort', abort);
|
|
102
|
+
});
|
|
103
|
+
return await within(Promise.race([promise, aborted]), milliseconds, message);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
removeAbort?.();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Build the verifier used by a HoldoutEvidenceStore from the same operator-pinned key. */
|
|
110
|
+
export function createHoldoutEvidenceVerifier(pinnedPublicKey) {
|
|
111
|
+
holdoutAuthorityKeyId(pinnedPublicKey);
|
|
112
|
+
return Object.freeze({
|
|
113
|
+
verifyManifest: (envelope) => parseSignedHoldoutManifest(envelope, pinnedPublicKey),
|
|
114
|
+
verifyVerdict: (input) => parseSignedHoldoutVerdict(input.envelope, input.manifest, input.planDigest, input.cell, input.outputDigest, pinnedPublicKey),
|
|
115
|
+
verifyFinish: (input) => parseSignedHoldoutFinish(input.envelope, input.manifest, input.planDigest, input.cells, input.verdictEnvelopeDigests, pinnedPublicKey),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function verifyPinnedRun(evidence, plan, results, pinnedPublicKey) {
|
|
119
|
+
const verified = evidence.verifyRun(plan, results);
|
|
120
|
+
const manifest = validateManifest(verified.manifest.envelope, plan, pinnedPublicKey);
|
|
121
|
+
const planDigest = benchmarkPlanDigest(plan);
|
|
122
|
+
const cells = benchmarkSchedule(plan);
|
|
123
|
+
benchmarkAssert(verified.verdicts.length === cells.length
|
|
124
|
+
&& verified.verdicts.every(item => item.manifestEvidenceDigest === verified.completion.manifestEvidenceDigest)
|
|
125
|
+
&& verified.finish.manifestEvidenceDigest === verified.completion.manifestEvidenceDigest, 'holdout evidence combines different signed manifests');
|
|
126
|
+
const verdictEnvelopeDigests = verified.verdicts.map((item, index) => {
|
|
127
|
+
parseSignedHoldoutVerdict(item.envelope, manifest, planDigest, cells[index], item.host.outputDigest, pinnedPublicKey);
|
|
128
|
+
return holdoutEnvelopeDigest(item.envelope);
|
|
129
|
+
});
|
|
130
|
+
parseSignedHoldoutFinish(verified.finish.envelope, manifest, planDigest, cells, verdictEnvelopeDigests, pinnedPublicKey);
|
|
131
|
+
return verified;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Run an authority-signed holdout without exposing private input to the journal or evidence store.
|
|
135
|
+
* Recovery deliberately never replays a completed prefix: the authority transport owns its ordered
|
|
136
|
+
* session state, and the v1 journal has no durable provider resume token.
|
|
137
|
+
*/
|
|
138
|
+
export async function runIndependentHoldout(options) {
|
|
139
|
+
benchmarkAssert(options !== null && typeof options === 'object'
|
|
140
|
+
&& options.store instanceof BenchmarkStore && options.evidence instanceof HoldoutEvidenceStore
|
|
141
|
+
&& typeof options.openProvider === 'function' && typeof options.openDelegate === 'function', 'invalid independent holdout options');
|
|
142
|
+
const plan = parseBenchmarkPlan(options.plan);
|
|
143
|
+
benchmarkAssert(plan.dataset.split === 'holdout', 'independent holdout requires a holdout dataset');
|
|
144
|
+
const expectedDataset = validateDatasetPin(options.expectedDataset, plan);
|
|
145
|
+
benchmarkAssert(typeof options.pinnedPublicKey === 'string', 'invalid holdout public key');
|
|
146
|
+
holdoutAuthorityKeyId(options.pinnedPublicKey);
|
|
147
|
+
const maxOutputBytes = boundedInteger(options.maxOutputBytes, DEFAULT_MAX_OUTPUT_BYTES, MAX_OUTPUT_BYTES, 'holdout output byte limit');
|
|
148
|
+
const delegateCloseTimeoutMs = boundedInteger(options.delegateCloseTimeoutMs, DEFAULT_DELEGATE_CLOSE_TIMEOUT_MS, MAX_CLOSE_TIMEOUT_MS, 'holdout delegate close timeout');
|
|
149
|
+
const providerTimeoutMs = boundedInteger(options.providerTimeoutMs, DEFAULT_PROVIDER_TIMEOUT_MS, MAX_CLOSE_TIMEOUT_MS, 'holdout provider timeout');
|
|
150
|
+
const cells = benchmarkSchedule(plan);
|
|
151
|
+
const planDigest = benchmarkPlanDigest(plan);
|
|
152
|
+
options.store.create(plan);
|
|
153
|
+
const status = options.store.status(plan.id);
|
|
154
|
+
benchmarkAssert(status.runningCell === null, 'holdout journal has an unresolved running intent');
|
|
155
|
+
const recorded = status.results;
|
|
156
|
+
if (recorded.some(result => result.status === 'unknown'))
|
|
157
|
+
return Object.freeze({ results: recorded });
|
|
158
|
+
const existingCompletion = options.evidence.readPlanCompletion(plan);
|
|
159
|
+
if (recorded.length === cells.length) {
|
|
160
|
+
benchmarkAssert(existingCompletion !== undefined, 'completed holdout journal has no signed finish marker');
|
|
161
|
+
const verified = verifyPinnedRun(options.evidence, plan, recorded, options.pinnedPublicKey);
|
|
162
|
+
return Object.freeze({ results: recorded, completion: verified.completion });
|
|
163
|
+
}
|
|
164
|
+
benchmarkAssert(recorded.length === 0 && existingCompletion === undefined, 'partial holdout recovery requires a durable authority resume protocol');
|
|
165
|
+
benchmarkAssert(!options.signal?.aborted, 'holdout run was aborted before provider startup');
|
|
166
|
+
let provider;
|
|
167
|
+
let providerOpening;
|
|
168
|
+
let providerClose;
|
|
169
|
+
let delegate;
|
|
170
|
+
let delegateOpening;
|
|
171
|
+
let delegateClose;
|
|
172
|
+
let delegateExecution;
|
|
173
|
+
let resourcesClosing = false;
|
|
174
|
+
let resourcesClose;
|
|
175
|
+
const sensitiveInputs = new Set();
|
|
176
|
+
const closeProvider = (opened) => providerClose ??= within(Promise.resolve().then(() => opened.close()), providerTimeoutMs, 'holdout provider cleanup was not confirmed');
|
|
177
|
+
const requestProvider = (operation, value, signal) => {
|
|
178
|
+
benchmarkAssert(provider !== undefined && !resourcesClosing && !signal?.aborted, 'holdout provider cannot request after cancellation');
|
|
179
|
+
return withinAbort(Promise.resolve().then(() => provider.request(operation, value, signal)), signal, providerTimeoutMs, `holdout provider ${operation} was not confirmed`);
|
|
180
|
+
};
|
|
181
|
+
const getDelegate = async (signal) => {
|
|
182
|
+
benchmarkAssert(!resourcesClosing && !signal.aborted, 'holdout delegate cannot start after cancellation');
|
|
183
|
+
delegateOpening ??= Promise.resolve(options.openDelegate(signal)).then(validateBinding);
|
|
184
|
+
const opened = await delegateOpening;
|
|
185
|
+
delegate = opened;
|
|
186
|
+
if (resourcesClosing || signal.aborted) {
|
|
187
|
+
delegateClose ??= within(Promise.resolve().then(() => opened.close()), delegateCloseTimeoutMs);
|
|
188
|
+
await delegateClose;
|
|
189
|
+
}
|
|
190
|
+
benchmarkAssert(!resourcesClosing && !signal.aborted, 'holdout delegate opened after cancellation');
|
|
191
|
+
return opened;
|
|
192
|
+
};
|
|
193
|
+
const closeResources = (awaitExecution = true) => resourcesClose ??= (async () => {
|
|
194
|
+
resourcesClosing = true;
|
|
195
|
+
for (const bytes of sensitiveInputs)
|
|
196
|
+
bytes.fill(0);
|
|
197
|
+
const execution = delegateExecution;
|
|
198
|
+
const openingSettlement = (async () => {
|
|
199
|
+
let opened = delegate;
|
|
200
|
+
if (opened === undefined && delegateOpening !== undefined)
|
|
201
|
+
opened = await within(delegateOpening, delegateCloseTimeoutMs);
|
|
202
|
+
return opened;
|
|
203
|
+
})();
|
|
204
|
+
const delegateCloseSettlement = openingSettlement.then(opened => {
|
|
205
|
+
if (opened === undefined)
|
|
206
|
+
return;
|
|
207
|
+
delegateClose ??= within(Promise.resolve().then(() => opened.close()), delegateCloseTimeoutMs);
|
|
208
|
+
return delegateClose;
|
|
209
|
+
});
|
|
210
|
+
const executionSettlement = awaitExecution && execution !== undefined
|
|
211
|
+
? within(execution.then(() => undefined, () => undefined), delegateCloseTimeoutMs)
|
|
212
|
+
: Promise.resolve();
|
|
213
|
+
const providerSettlement = provider === undefined ? Promise.resolve() : closeProvider(provider);
|
|
214
|
+
const settlements = await Promise.allSettled([delegateCloseSettlement, executionSettlement, providerSettlement]);
|
|
215
|
+
const failed = settlements.find((result) => result.status === 'rejected');
|
|
216
|
+
if (failed)
|
|
217
|
+
throw failed.reason;
|
|
218
|
+
})();
|
|
219
|
+
try {
|
|
220
|
+
providerOpening = Promise.resolve().then(() => options.openProvider(options.signal));
|
|
221
|
+
// A startup loser can resolve after the owning Fiber has finished. It must be closed without
|
|
222
|
+
// touching the journal or evidence stores, and its cleanup rejection must remain observed.
|
|
223
|
+
void providerOpening.then(opened => {
|
|
224
|
+
if (resourcesClosing || options.signal?.aborted)
|
|
225
|
+
void closeProvider(opened).catch(() => undefined);
|
|
226
|
+
}, () => undefined);
|
|
227
|
+
const openedProvider = await withinAbort(providerOpening, options.signal, providerTimeoutMs, 'holdout provider startup was not confirmed');
|
|
228
|
+
benchmarkAssert(!resourcesClosing && !options.signal?.aborted, 'holdout provider opened after cancellation');
|
|
229
|
+
provider = openedProvider;
|
|
230
|
+
benchmarkAssert(provider !== null && typeof provider === 'object'
|
|
231
|
+
&& typeof provider.request === 'function' && typeof provider.close === 'function', 'invalid holdout provider binding');
|
|
232
|
+
const manifest = validateManifest(await requestProvider('manifest', { expectedDataset }, options.signal), plan, options.pinnedPublicKey);
|
|
233
|
+
options.evidence.writeManifest({ plan, manifest });
|
|
234
|
+
const verdictEvidenceDigests = [];
|
|
235
|
+
const verdictEnvelopeDigests = [];
|
|
236
|
+
const failureSnapshots = new Map();
|
|
237
|
+
let nextCell = 0;
|
|
238
|
+
const executor = Object.freeze({
|
|
239
|
+
async execute(request) {
|
|
240
|
+
const expectedCell = cells[nextCell];
|
|
241
|
+
benchmarkAssert(expectedCell !== undefined && same(request.cell, expectedCell) && request.planId === plan.id
|
|
242
|
+
&& same(request.dataset, plan.dataset) && same(request.budget, plan.budget), 'holdout runner request order or identity drifted');
|
|
243
|
+
benchmarkAssert(!request.signal.aborted && !resourcesClosing, 'holdout cell was cancelled before input');
|
|
244
|
+
const inputEnvelope = parseSignedHoldoutInput(await requestProvider('input', { plan, cell: request.cell }, request.signal), manifest, planDigest, request.cell, options.pinnedPublicKey);
|
|
245
|
+
const inputBytes = holdoutInputBytes(inputEnvelope);
|
|
246
|
+
sensitiveInputs.add(inputBytes);
|
|
247
|
+
let rawOutputBytes;
|
|
248
|
+
let outputBytes;
|
|
249
|
+
try {
|
|
250
|
+
const binding = await getDelegate(request.signal);
|
|
251
|
+
const execution = Promise.resolve().then(() => binding.execute(Object.freeze({
|
|
252
|
+
planId: plan.id, dataset: plan.dataset, cell: request.cell, task: request.task, variant: request.variant, budget: request.budget,
|
|
253
|
+
input: Object.freeze({ contentType: inputEnvelope.contentType, bytes: inputBytes }), signal: request.signal,
|
|
254
|
+
})));
|
|
255
|
+
delegateExecution = execution;
|
|
256
|
+
const delegateResult = await execution;
|
|
257
|
+
delegateExecution = undefined;
|
|
258
|
+
if (delegateResult !== null && typeof delegateResult === 'object') {
|
|
259
|
+
const candidate = Object.getOwnPropertyDescriptor(delegateResult, 'output')?.value;
|
|
260
|
+
if (candidate !== null && typeof candidate === 'object') {
|
|
261
|
+
const bytes = Object.getOwnPropertyDescriptor(candidate, 'bytes')?.value;
|
|
262
|
+
if (bytes instanceof Uint8Array)
|
|
263
|
+
rawOutputBytes = bytes;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const validated = validateDelegateResult(delegateResult, request, maxOutputBytes);
|
|
267
|
+
rawOutputBytes = validated.rawOutputBytes;
|
|
268
|
+
outputBytes = validated.outputBytes;
|
|
269
|
+
benchmarkAssert(!request.signal.aborted && !resourcesClosing, 'holdout cell was cancelled after delegate settlement');
|
|
270
|
+
const outputDigest = createHash('sha256').update(outputBytes).digest('hex');
|
|
271
|
+
const verdict = parseSignedHoldoutVerdict(await requestProvider('verdict', {
|
|
272
|
+
planDigest, cell: request.cell, inputEnvelopeDigest: holdoutEnvelopeDigest(inputEnvelope),
|
|
273
|
+
output: {
|
|
274
|
+
contentType: validated.outputContentType,
|
|
275
|
+
outputBase64url: Buffer.from(outputBytes.buffer, outputBytes.byteOffset, outputBytes.byteLength).toString('base64url'),
|
|
276
|
+
outputDigest,
|
|
277
|
+
},
|
|
278
|
+
}, request.signal), manifest, planDigest, request.cell, outputDigest, options.pinnedPublicKey);
|
|
279
|
+
benchmarkAssert(!request.signal.aborted && !resourcesClosing, 'holdout cell was cancelled after authority verdict');
|
|
280
|
+
const saved = options.evidence.writeVerdict({
|
|
281
|
+
plan, manifest, cell: request.cell, outputDigest,
|
|
282
|
+
host: { versions: request.variant.versions, hostMetrics: validated.metrics, quiescent: true,
|
|
283
|
+
executionEvidenceDigest: validated.executionEvidenceDigest, outputDigest },
|
|
284
|
+
envelope: verdict,
|
|
285
|
+
});
|
|
286
|
+
const observation = Object.freeze({
|
|
287
|
+
versions: request.variant.versions, inputDigest: inputEnvelope.inputDigest, acceptanceDigest: verdict.acceptanceDigest,
|
|
288
|
+
verdict: verdict.verdict, metrics: validated.metrics, evidenceDigest: saved.digest, quiescent: true,
|
|
289
|
+
});
|
|
290
|
+
if (verdict.verdict === 'unknown') {
|
|
291
|
+
failureSnapshots.set(request.cell.id, observation);
|
|
292
|
+
throw new BenchmarkError('holdout authority returned an unknown verdict');
|
|
293
|
+
}
|
|
294
|
+
verdictEvidenceDigests.push(saved.digest);
|
|
295
|
+
verdictEnvelopeDigests.push(holdoutEnvelopeDigest(verdict));
|
|
296
|
+
nextCell++;
|
|
297
|
+
if (nextCell === cells.length) {
|
|
298
|
+
const finish = parseSignedHoldoutFinish(await requestProvider('finish', {
|
|
299
|
+
planDigest, cells, verdictEnvelopeDigests,
|
|
300
|
+
}, request.signal), manifest, planDigest, cells, verdictEnvelopeDigests, options.pinnedPublicKey);
|
|
301
|
+
benchmarkAssert(finish.complete && !request.signal.aborted, 'holdout authority did not finalize the complete plan');
|
|
302
|
+
// This is the current execution promise; waiting for it here would await ourselves.
|
|
303
|
+
await closeResources(false);
|
|
304
|
+
benchmarkAssert(!request.signal.aborted, 'holdout cell was cancelled while resources were closing');
|
|
305
|
+
options.evidence.writeFinish({ plan, manifest, verdictEvidenceDigests, envelope: finish });
|
|
306
|
+
benchmarkAssert(!request.signal.aborted, 'holdout cell was cancelled while finish evidence was published');
|
|
307
|
+
}
|
|
308
|
+
return observation;
|
|
309
|
+
}
|
|
310
|
+
finally {
|
|
311
|
+
delegateExecution = undefined;
|
|
312
|
+
outputBytes?.fill(0);
|
|
313
|
+
rawOutputBytes?.fill(0);
|
|
314
|
+
inputBytes.fill(0);
|
|
315
|
+
sensitiveInputs.delete(inputBytes);
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
failure(request) {
|
|
319
|
+
return failureSnapshots.get(request.cell.id);
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
const results = await runBenchmark(options.store, plan, executor, options.signal);
|
|
323
|
+
if (results.length === cells.length && results.every(result => result.status === 'completed')) {
|
|
324
|
+
const verified = verifyPinnedRun(options.evidence, plan, results, options.pinnedPublicKey);
|
|
325
|
+
return Object.freeze({ results, completion: verified.completion });
|
|
326
|
+
}
|
|
327
|
+
return Object.freeze({ results });
|
|
328
|
+
}
|
|
329
|
+
finally {
|
|
330
|
+
await closeResources();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Fiber-owned Host entrypoint. Store descriptors and the authority/delegate session belong to the
|
|
335
|
+
* current Cordis Fiber; unloading aborts admission, awaits the run's bounded cleanup, then closes
|
|
336
|
+
* both stores. Calling the plain SDK entrypoint remains explicit and never mounts a plugin.
|
|
337
|
+
*/
|
|
338
|
+
export function runIndependentHoldoutInContext(ctx, options) {
|
|
339
|
+
benchmarkAssert(ctx !== null && typeof ctx === 'object' && typeof ctx.effect === 'function', 'invalid Cordis holdout context');
|
|
340
|
+
let task;
|
|
341
|
+
let closeOwned;
|
|
342
|
+
const disposeEffect = ctx.effect(() => {
|
|
343
|
+
const lifecycle = new AbortController();
|
|
344
|
+
const store = new BenchmarkStore(options.databasePath);
|
|
345
|
+
let evidence;
|
|
346
|
+
try {
|
|
347
|
+
evidence = new HoldoutEvidenceStore({ root: options.evidenceRoot, verifier: createHoldoutEvidenceVerifier(options.pinnedPublicKey) });
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
store.close();
|
|
351
|
+
throw error;
|
|
352
|
+
}
|
|
353
|
+
const signal = options.signal === undefined ? lifecycle.signal : AbortSignal.any([lifecycle.signal, options.signal]);
|
|
354
|
+
task = runIndependentHoldout({ ...options, store, evidence, signal });
|
|
355
|
+
let closePromise;
|
|
356
|
+
closeOwned = () => closePromise ??= (async () => {
|
|
357
|
+
lifecycle.abort();
|
|
358
|
+
try {
|
|
359
|
+
await task;
|
|
360
|
+
}
|
|
361
|
+
catch { /* The caller observes the original run error. */ }
|
|
362
|
+
let firstError;
|
|
363
|
+
try {
|
|
364
|
+
evidence.close();
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
firstError = error;
|
|
368
|
+
}
|
|
369
|
+
try {
|
|
370
|
+
store.close();
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
firstError ??= error;
|
|
374
|
+
}
|
|
375
|
+
if (firstError !== undefined)
|
|
376
|
+
throw firstError;
|
|
377
|
+
})();
|
|
378
|
+
return closeOwned;
|
|
379
|
+
}, 'independent holdout run');
|
|
380
|
+
benchmarkAssert(task !== undefined && closeOwned !== undefined, 'Cordis did not synchronously register the holdout effect');
|
|
381
|
+
const running = task;
|
|
382
|
+
const close = closeOwned;
|
|
383
|
+
return running.finally(async () => {
|
|
384
|
+
await close();
|
|
385
|
+
await disposeEffect();
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
export { HoldoutEvidenceError, HoldoutEvidenceStore } from './holdout-evidence.js';
|
|
389
|
+
export { HoldoutProviderError, openHoldoutProvider } from './holdout-provider.js';
|
|
390
|
+
export { HOLDOUT_PROTOCOL_V1, holdoutAuthorityKeyId, holdoutEnvelopeDigest, holdoutInputBytes, holdoutUnsignedCanonicalJson, holdoutVerdictsDigest, parseSignedHoldoutFinish, parseSignedHoldoutInput, parseSignedHoldoutManifest, parseSignedHoldoutVerdict, verifyHoldoutEnvelopeSignature, } from './holdout-protocol.js';
|
|
391
|
+
//# sourceMappingURL=holdout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holdout.js","sourceRoot":"","sources":["../../src/benchmark/holdout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export { BenchmarkError, benchmarkPlanDigest, benchmarkSchedule, parseBenchmarkPlan } from './schema.js';
|
|
3
|
+
export { BenchmarkStore } from './store.js';
|
|
4
|
+
export { benchmarkReport } from './report.js';
|
|
5
|
+
export { runBenchmark } from './runner.js';
|
|
6
|
+
export type { BenchmarkExecutor, BenchmarkExecutionRequest } from './runner.js';
|
|
7
|
+
export { developmentCorpus, developmentDataset, developmentCases, developmentPrompt, judgeDevelopmentResponse } from './corpus.js';
|
|
8
|
+
export type { DevelopmentTask, BenchmarkJson } from './corpus.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAClI,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export { BenchmarkError, benchmarkPlanDigest, benchmarkSchedule, parseBenchmarkPlan } from './schema.js';
|
|
3
|
+
export { BenchmarkStore } from './store.js';
|
|
4
|
+
export { benchmarkReport } from './report.js';
|
|
5
|
+
export { runBenchmark } from './runner.js';
|
|
6
|
+
export { developmentCorpus, developmentDataset, developmentCases, developmentPrompt, judgeDevelopmentResponse } from './corpus.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { BenchmarkCase, BenchmarkPlan, BenchmarkVerdict, BenchmarkDomain } from './types.js';
|
|
2
|
+
export type MemoryBenchmarkJson = null | boolean | number | string | readonly MemoryBenchmarkJson[] | {
|
|
3
|
+
readonly [key: string]: MemoryBenchmarkJson;
|
|
4
|
+
};
|
|
5
|
+
export type MemoryVisibility = 'visible' | 'other-owner' | 'other-workspace' | 'sensitive' | 'expired' | 'removed';
|
|
6
|
+
export interface MemoryDevelopmentTask {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly domain: BenchmarkDomain;
|
|
9
|
+
readonly objective: string;
|
|
10
|
+
readonly sources: readonly {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly text: string;
|
|
13
|
+
}[];
|
|
14
|
+
readonly memories: readonly {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly visibility: MemoryVisibility;
|
|
17
|
+
readonly entry: {
|
|
18
|
+
readonly kind: 'experience';
|
|
19
|
+
readonly content: string;
|
|
20
|
+
readonly sensitivity: 'private' | 'sensitive';
|
|
21
|
+
readonly trust: 'user-confirmed';
|
|
22
|
+
readonly confidence: number;
|
|
23
|
+
readonly provenance: {
|
|
24
|
+
readonly source: string;
|
|
25
|
+
readonly observedAt: number;
|
|
26
|
+
readonly uri?: string;
|
|
27
|
+
};
|
|
28
|
+
readonly knowledge?: {
|
|
29
|
+
readonly applicability?: readonly string[];
|
|
30
|
+
readonly counterexamples?: readonly string[];
|
|
31
|
+
readonly claim?: {
|
|
32
|
+
readonly key: string;
|
|
33
|
+
readonly value: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
}[];
|
|
38
|
+
readonly snapshotLimit: number;
|
|
39
|
+
readonly acceptance: {
|
|
40
|
+
readonly answer: MemoryBenchmarkJson;
|
|
41
|
+
readonly citations: readonly string[];
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export declare const memoryDevelopmentCorpus: readonly MemoryDevelopmentTask[];
|
|
45
|
+
export declare const memoryDevelopmentCorpusV2: readonly MemoryDevelopmentTask[];
|
|
46
|
+
export declare const memoryDevelopmentDataset: BenchmarkPlan['dataset'];
|
|
47
|
+
export declare const memoryDevelopmentDatasetV2: BenchmarkPlan['dataset'];
|
|
48
|
+
export declare function memoryDevelopmentCases(version?: '1' | '2'): readonly BenchmarkCase[];
|
|
49
|
+
export declare function memoryDevelopmentTask(caseId: string, version?: '1' | '2'): Readonly<MemoryDevelopmentTask>;
|
|
50
|
+
export declare function memoryDevelopmentPrompt(caseId: string, version?: '1' | '2'): string;
|
|
51
|
+
export declare function judgeMemoryDevelopmentResponse(caseId: string, output: string, version?: '1' | '2'): {
|
|
52
|
+
verdict: BenchmarkVerdict;
|
|
53
|
+
evidenceDigest: string;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=memory-corpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-corpus.d.ts","sourceRoot":"","sources":["../../src/benchmark/memory-corpus.ts"],"names":[],"mappings":"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"}
|