@dsh-enhanced/assistant-evaluation 0.1.24 → 0.1.31
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,300 @@
|
|
|
1
|
+
/** Native, intentionally narrow AgentLoop adapter for the public development corpus. */
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { Context } from '@deepseek-ai/cordis';
|
|
7
|
+
import AgentLoop from '@deepseek-ai/dsh-agent-loop';
|
|
8
|
+
import { AgentRegistry } from '@deepseek-ai/dsh-agent';
|
|
9
|
+
import { LlmAdapter, LlmRuntime, createUserMessage, isAgentLoopRequest } from '@deepseek-ai/dsh-llm';
|
|
10
|
+
import { SessionId, SessionStore } from '@deepseek-ai/dsh-session';
|
|
11
|
+
import { SessionProjectionRegistry } from '@deepseek-ai/dsh-session-projection';
|
|
12
|
+
import SystemPrompt from '@deepseek-ai/dsh-system-prompt';
|
|
13
|
+
import ToolRuntime from '@deepseek-ai/dsh-tools';
|
|
14
|
+
import { acceptanceCanonicalJson, acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
|
|
15
|
+
import { developmentCases, developmentDataset, developmentPrompt, judgeDevelopmentResponse } from './corpus.js';
|
|
16
|
+
import { normalizeTokenUsage, tokenUsageCost, tokenUsageReserveCost } from './usage.js';
|
|
17
|
+
import { memoryDevelopmentCases, memoryDevelopmentDataset, memoryDevelopmentDatasetV2, memoryDevelopmentPrompt, memoryDevelopmentTask, judgeMemoryDevelopmentResponse } from './memory-corpus.js';
|
|
18
|
+
import { installBenchmarkMemory, seedBenchmarkMemory, memoryRuntimeConfig } from './memory-runtime.js';
|
|
19
|
+
import {} from './runner.js';
|
|
20
|
+
import { benchmarkObject, benchmarkSnapshot, benchmarkSchedule, parseBenchmarkPlan } from './schema.js';
|
|
21
|
+
const require = createRequire(import.meta.url);
|
|
22
|
+
const EMPTY_DIGEST = acceptanceDigest('native-empty-contract-v1');
|
|
23
|
+
const PROTOCOL = 'dsh-native-agent-loop-benchmark-v2';
|
|
24
|
+
const MAX_RATE = 1_000_000_000;
|
|
25
|
+
const id = (value, field) => {
|
|
26
|
+
if (typeof value !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(value))
|
|
27
|
+
throw new Error(`invalid ${field}`);
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
const routeId = (value, field) => {
|
|
31
|
+
if (typeof value !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/u.test(value))
|
|
32
|
+
throw new Error(`invalid ${field}`);
|
|
33
|
+
return value;
|
|
34
|
+
};
|
|
35
|
+
const sha = (value, field) => {
|
|
36
|
+
if (typeof value !== 'string' || !/^[a-f0-9]{64}$/u.test(value))
|
|
37
|
+
throw new Error(`invalid ${field}`);
|
|
38
|
+
return value;
|
|
39
|
+
};
|
|
40
|
+
const integer = (value, field, min, max) => {
|
|
41
|
+
if (!Number.isSafeInteger(value) || value < min || value > max)
|
|
42
|
+
throw new Error(`invalid ${field}`);
|
|
43
|
+
return value;
|
|
44
|
+
};
|
|
45
|
+
const finite = (value, field, min, max) => {
|
|
46
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < min || value > max)
|
|
47
|
+
throw new Error(`invalid ${field}`);
|
|
48
|
+
return value;
|
|
49
|
+
};
|
|
50
|
+
const isMemorySuite = (input) => input.suite === 'memory-v1' || input.suite === 'memory-v2';
|
|
51
|
+
function nativeObject(value, required, optional) {
|
|
52
|
+
return benchmarkObject(value, [...required, ...optional.filter(key => value !== null && typeof value === 'object' && Object.hasOwn(value, key))]);
|
|
53
|
+
}
|
|
54
|
+
function validate(input) {
|
|
55
|
+
const raw = nativeObject(benchmarkSnapshot(input), ['id', 'cases', 'variants', 'model', 'budget', 'repeats', 'seed'], ['suite']);
|
|
56
|
+
const copy = raw;
|
|
57
|
+
id(copy.id, 'benchmark id');
|
|
58
|
+
if (!Array.isArray(copy.cases) || copy.cases.length === 0 || copy.cases.length > 100)
|
|
59
|
+
throw new Error('invalid cases');
|
|
60
|
+
if (copy.suite !== undefined && copy.suite !== 'research-v1' && copy.suite !== 'memory-v1' && copy.suite !== 'memory-v2')
|
|
61
|
+
throw new Error('invalid native suite');
|
|
62
|
+
const known = new Set((isMemorySuite(copy) ? memoryDevelopmentCases(copy.suite === 'memory-v2' ? '2' : '1') : developmentCases()).map(item => item.id));
|
|
63
|
+
const caseIds = new Set();
|
|
64
|
+
for (const value of copy.cases) {
|
|
65
|
+
id(value, 'case id');
|
|
66
|
+
if (!known.has(value) || caseIds.has(value))
|
|
67
|
+
throw new Error('cases must be unique public development cases');
|
|
68
|
+
caseIds.add(value);
|
|
69
|
+
}
|
|
70
|
+
if (!Array.isArray(copy.variants) || copy.variants.length < 2 || copy.variants.length > 8)
|
|
71
|
+
throw new Error('invalid variants');
|
|
72
|
+
let baseline = 0;
|
|
73
|
+
const variants = new Set();
|
|
74
|
+
for (const variant of copy.variants) {
|
|
75
|
+
nativeObject(variant, ['id', 'role', 'persona'], ['memory']);
|
|
76
|
+
if (variant.memory !== undefined && typeof variant.memory !== 'boolean')
|
|
77
|
+
throw new Error('invalid memory feature');
|
|
78
|
+
id(variant.id, 'variant id');
|
|
79
|
+
if (variants.has(variant.id) || (variant.role !== 'baseline' && variant.role !== 'candidate') || typeof variant.persona !== 'string' || variant.persona.length > 32_768)
|
|
80
|
+
throw new Error('invalid variant');
|
|
81
|
+
variants.add(variant.id);
|
|
82
|
+
if (variant.role === 'baseline')
|
|
83
|
+
baseline++;
|
|
84
|
+
}
|
|
85
|
+
if (baseline !== 1)
|
|
86
|
+
throw new Error('exactly one baseline is required');
|
|
87
|
+
if (isMemorySuite(copy)) {
|
|
88
|
+
if (copy.variants.length !== 2 || copy.variants.some(variant => variant.persona !== copy.variants[0].persona || (variant.memory === true) !== (variant.role === 'candidate')))
|
|
89
|
+
throw new Error('memory comparison requires identical personas and only candidate retrieval enabled');
|
|
90
|
+
}
|
|
91
|
+
else if (copy.variants.some(variant => variant.memory === true))
|
|
92
|
+
throw new Error('memory retrieval requires the memory suite');
|
|
93
|
+
const model = nativeObject(copy.model, ['provider', 'model', 'temperature', 'maxOutputTokens', 'inputUsdMicrosPerMillionTokens', 'outputUsdMicrosPerMillionTokens', 'adapterDigest', 'tokenCounterDigest'], ['inputLimitMode', 'outputLimitMode', 'cacheReadUsdMicrosPerMillionTokens', 'cacheWriteUsdMicrosPerMillionTokens']);
|
|
94
|
+
routeId(model.provider, 'provider');
|
|
95
|
+
routeId(model.model, 'model');
|
|
96
|
+
if (model.temperature !== null)
|
|
97
|
+
finite(model.temperature, 'temperature', 0, 2);
|
|
98
|
+
if (model.inputLimitMode !== undefined && model.inputLimitMode !== 'upper-bound' && model.inputLimitMode !== 'estimate')
|
|
99
|
+
throw new Error('invalid input limit mode');
|
|
100
|
+
if (model.outputLimitMode !== undefined && model.outputLimitMode !== 'provider' && model.outputLimitMode !== 'observed')
|
|
101
|
+
throw new Error('invalid output limit mode');
|
|
102
|
+
integer(model.maxOutputTokens, 'maxOutputTokens', 1, copy.budget.outputTokens);
|
|
103
|
+
if ((model.inputUsdMicrosPerMillionTokens === null) !== (model.outputUsdMicrosPerMillionTokens === null))
|
|
104
|
+
throw new Error('both token rates must be present or absent');
|
|
105
|
+
if (model.inputUsdMicrosPerMillionTokens !== null) {
|
|
106
|
+
integer(model.inputUsdMicrosPerMillionTokens, 'input rate', 0, MAX_RATE);
|
|
107
|
+
integer(model.outputUsdMicrosPerMillionTokens, 'output rate', 0, MAX_RATE);
|
|
108
|
+
}
|
|
109
|
+
for (const field of ['cacheReadUsdMicrosPerMillionTokens', 'cacheWriteUsdMicrosPerMillionTokens']) {
|
|
110
|
+
if (model[field] !== undefined && model[field] !== null)
|
|
111
|
+
integer(model[field], field, 0, MAX_RATE);
|
|
112
|
+
}
|
|
113
|
+
sha(model.adapterDigest, 'adapter digest');
|
|
114
|
+
sha(model.tokenCounterDigest, 'token counter digest');
|
|
115
|
+
const budget = benchmarkObject(copy.budget, ['durationMs', 'inputTokens', 'outputTokens', 'costUsdMicros', 'toolCalls']);
|
|
116
|
+
integer(budget.durationMs, 'durationMs', 1, 86_400_000);
|
|
117
|
+
for (const key of ['inputTokens', 'outputTokens', 'toolCalls'])
|
|
118
|
+
integer(budget[key], key, 0, 1_000_000_000);
|
|
119
|
+
if (budget.costUsdMicros !== null) {
|
|
120
|
+
integer(budget.costUsdMicros, 'costUsdMicros', 0, 1_000_000_000);
|
|
121
|
+
if (model.inputLimitMode === 'estimate' || model.outputLimitMode === 'observed')
|
|
122
|
+
throw new Error('priced budget requires preflight input bound and provider output limit');
|
|
123
|
+
if ([model.inputUsdMicrosPerMillionTokens, model.outputUsdMicrosPerMillionTokens, model.cacheReadUsdMicrosPerMillionTokens, model.cacheWriteUsdMicrosPerMillionTokens].some(rate => rate === null || rate === undefined))
|
|
124
|
+
throw new Error('priced budget requires all input/cache/output token rates');
|
|
125
|
+
}
|
|
126
|
+
integer(copy.repeats, 'repeats', 2, 20);
|
|
127
|
+
integer(copy.seed, 'seed', 0, 0xffffffff);
|
|
128
|
+
return Object.freeze({ ...copy, model, budget });
|
|
129
|
+
}
|
|
130
|
+
function packageVersions(memory) {
|
|
131
|
+
const names = ['@deepseek-ai/cordis', '@deepseek-ai/dsh-llm', '@deepseek-ai/dsh-session', '@deepseek-ai/dsh-session-projection', '@deepseek-ai/dsh-system-prompt', '@deepseek-ai/dsh-tools', '@deepseek-ai/dsh-agent', '@deepseek-ai/dsh-agent-loop'];
|
|
132
|
+
if (memory)
|
|
133
|
+
names.push('@dsh-enhanced/personal-memory', '@dsh-enhanced/assistant-policy');
|
|
134
|
+
return Object.fromEntries(names.map(name => {
|
|
135
|
+
const pkg = require(`${name}/package.json`);
|
|
136
|
+
if (typeof pkg.version !== 'string')
|
|
137
|
+
throw new Error(`unresolved runtime package ${name}`);
|
|
138
|
+
return [name, pkg.version];
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
function versions(input, persona) {
|
|
142
|
+
return Object.freeze({
|
|
143
|
+
model: acceptanceDigest(input.model), prompt: acceptanceDigest({ persona, complete: true }),
|
|
144
|
+
skills: EMPTY_DIGEST, tools: EMPTY_DIGEST, policy: EMPTY_DIGEST,
|
|
145
|
+
runtime: acceptanceDigest({ protocol: PROTOCOL, packages: packageVersions(isMemorySuite(input)), ...(isMemorySuite(input) ? { memory: memoryRuntimeConfig } : {}) }),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
export function nativeBenchmarkPlan(raw) {
|
|
149
|
+
const input = validate(raw);
|
|
150
|
+
const cases = (isMemorySuite(input) ? memoryDevelopmentCases(input.suite === 'memory-v2' ? '2' : '1') : developmentCases()).filter(item => input.cases.includes(item.id));
|
|
151
|
+
const variants = input.variants.map(variant => Object.freeze({ id: variant.id, role: variant.role, versions: versions(input, variant.persona), features: Object.freeze({ memory: variant.memory === true, planning: false, review: false, growth: false }) }));
|
|
152
|
+
return parseBenchmarkPlan({ schemaVersion: 1, id: input.id, dataset: isMemorySuite(input) ? (input.suite === 'memory-v2' ? memoryDevelopmentDatasetV2 : memoryDevelopmentDataset) : developmentDataset, comparison: 'capability', cases, variants, budget: input.budget, repeats: input.repeats, seed: input.seed });
|
|
153
|
+
}
|
|
154
|
+
const same = (a, b) => acceptanceCanonicalJson(a) === acceptanceCanonicalJson(b);
|
|
155
|
+
function assistantText(session) {
|
|
156
|
+
const event = [...session.snapshotEvents()].reverse().find((item) => item?.type === 'assistant/message');
|
|
157
|
+
if (event?.data?.message?.content === undefined)
|
|
158
|
+
return undefined;
|
|
159
|
+
return event.data.message.content.filter((block) => block?.type === 'text').map((block) => block.text).join('');
|
|
160
|
+
}
|
|
161
|
+
export function createNativeBenchmarkExecutor(raw, factory) {
|
|
162
|
+
const input = validate(raw);
|
|
163
|
+
const plan = nativeBenchmarkPlan(input);
|
|
164
|
+
return Object.freeze({ async execute(request) {
|
|
165
|
+
const expected = nativeBenchmarkPlan(input);
|
|
166
|
+
const expectedCell = benchmarkSchedule(expected).find(cell => cell.id === request.cell.id);
|
|
167
|
+
if (!same(plan, expected) || request.planId !== expected.id || !same(request.dataset, expected.dataset) || !same(request.budget, expected.budget)
|
|
168
|
+
|| !same(request.cell, expectedCell) || !same(request.task, expected.cases.find(item => item.id === request.cell.caseId)) || !same(request.variant, expected.variants.find(item => item.id === request.cell.variantId)))
|
|
169
|
+
throw new Error('native benchmark request drift');
|
|
170
|
+
if (request.signal.aborted)
|
|
171
|
+
throw new Error('benchmark aborted');
|
|
172
|
+
const costBudget = request.budget.costUsdMicros;
|
|
173
|
+
if (costBudget !== null && (!Number.isSafeInteger(costBudget) || costBudget < 0))
|
|
174
|
+
throw new Error('invalid native cost budget');
|
|
175
|
+
if (costBudget !== null && input.model.inputUsdMicrosPerMillionTokens === null)
|
|
176
|
+
throw new Error('priced budget requires token rates');
|
|
177
|
+
const workspace = await mkdtemp(join(tmpdir(), 'dsh-native-benchmark-'));
|
|
178
|
+
const ctx = new Context();
|
|
179
|
+
let binding;
|
|
180
|
+
let handle;
|
|
181
|
+
let removeAbort;
|
|
182
|
+
let observation;
|
|
183
|
+
let executionFailed = false;
|
|
184
|
+
let executionError;
|
|
185
|
+
let calls = 0;
|
|
186
|
+
let reserved = false;
|
|
187
|
+
let reservedInput = 0;
|
|
188
|
+
let observedUsage;
|
|
189
|
+
let unexpectedTool = false;
|
|
190
|
+
try {
|
|
191
|
+
const memoryTask = isMemorySuite(input) ? memoryDevelopmentTask(request.cell.caseId, input.suite === 'memory-v2' ? '2' : '1') : undefined;
|
|
192
|
+
await ctx.plugin(LlmRuntime);
|
|
193
|
+
await ctx.plugin(SessionStore);
|
|
194
|
+
new SessionProjectionRegistry(ctx);
|
|
195
|
+
await ctx.plugin(SystemPrompt, { includeHarnessIdentity: false, includeRuntimeContext: memoryTask !== undefined, persona: '' });
|
|
196
|
+
await ctx.plugin(ToolRuntime, { mode: 'native' });
|
|
197
|
+
await ctx.plugin(AgentRegistry);
|
|
198
|
+
await ctx.plugin(AgentLoop, { agents: [] });
|
|
199
|
+
binding = await factory(Object.freeze({ ...input.model }), Object.freeze({ ctx, workspace }));
|
|
200
|
+
const countInput = input.model.inputLimitMode === 'estimate' ? binding?.inputTokenEstimate : binding?.inputTokenUpperBound;
|
|
201
|
+
if (!binding || !(binding.adapter instanceof LlmAdapter) || typeof countInput !== 'function' || typeof binding.dispose !== 'function')
|
|
202
|
+
throw new Error('invalid native adapter binding');
|
|
203
|
+
const persona = input.variants.find(item => item.id === request.variant.id).persona;
|
|
204
|
+
ctx.systemPrompt.section({ name: 'native-benchmark-persona', order: 0, text: persona, complete: true });
|
|
205
|
+
if (memoryTask === undefined)
|
|
206
|
+
ctx.systemPrompt.suppressRuntimeContext();
|
|
207
|
+
const memory = memoryTask === undefined ? undefined : await installBenchmarkMemory(ctx, workspace, memoryTask.snapshotLimit, request.variant.features.memory);
|
|
208
|
+
ctx.on('llm/stream', async function* (options, next) {
|
|
209
|
+
if (!isAgentLoopRequest(options) || calls++ !== 0 || options.provider !== input.model.provider || options.model !== input.model.model || options.temperature !== (input.model.temperature ?? undefined) || options.maxTokens !== (input.model.outputLimitMode === 'observed' ? undefined : input.model.maxOutputTokens) || options.system !== persona || (options.tools?.length ?? 0) !== 0)
|
|
210
|
+
throw new Error('native request contract violation');
|
|
211
|
+
const upper = await countInput.call(binding, options);
|
|
212
|
+
if (!Number.isSafeInteger(upper) || upper < 0 || upper > request.budget.inputTokens)
|
|
213
|
+
throw new Error('input budget preflight failed');
|
|
214
|
+
const reserve = tokenUsageReserveCost(upper, input.model.maxOutputTokens, input.model);
|
|
215
|
+
if (costBudget !== null && (reserve === null || reserve > costBudget))
|
|
216
|
+
throw new Error('cost budget preflight failed');
|
|
217
|
+
reservedInput = upper;
|
|
218
|
+
reserved = true;
|
|
219
|
+
for await (const chunk of next()) {
|
|
220
|
+
if (chunk.type === 'usage')
|
|
221
|
+
observedUsage = chunk.usage;
|
|
222
|
+
if (chunk.type === 'block-end' && chunk.block.type === 'tool-call')
|
|
223
|
+
unexpectedTool = true;
|
|
224
|
+
yield chunk;
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
ctx.llm.registerAdapter([input.model.provider], binding.adapter);
|
|
228
|
+
const sessionId = SessionId(`benchmark-${request.cell.id.slice(0, 48)}`);
|
|
229
|
+
handle = await ctx.agents.create({
|
|
230
|
+
sessionId, meta: { cwd: workspace, ...(memoryTask === undefined ? {} : { agentPreset: 'benchmark-memory' }) },
|
|
231
|
+
agentOptions: { provider: input.model.provider, model: input.model.model, ...(input.model.outputLimitMode === 'observed' ? {} : { maxTokens: input.model.maxOutputTokens }) }, signal: request.signal,
|
|
232
|
+
setup: agentCtx => {
|
|
233
|
+
agentCtx.tools.restrict({ allow: [] });
|
|
234
|
+
agentCtx.on('agent/request', async (_payload, next) => {
|
|
235
|
+
const { temperature: _temperature, maxTokens: _maxTokens, ...rest } = await next();
|
|
236
|
+
return { ...rest, provider: input.model.provider, model: input.model.model,
|
|
237
|
+
...(input.model.temperature === null ? {} : { temperature: input.model.temperature }),
|
|
238
|
+
...(input.model.outputLimitMode === 'observed' ? {} : { maxTokens: input.model.maxOutputTokens }),
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
if (memory !== undefined && memoryTask !== undefined)
|
|
244
|
+
await seedBenchmarkMemory(ctx, memory, handle.agent, workspace, request.cell.id, memoryTask);
|
|
245
|
+
const abort = () => { handle?.agent.cancel({ kind: 'hook', reason: 'benchmark-aborted' }); };
|
|
246
|
+
request.signal.addEventListener('abort', abort, { once: true });
|
|
247
|
+
removeAbort = () => request.signal.removeEventListener('abort', abort);
|
|
248
|
+
handle.agent.followup(createUserMessage({ source: { kind: 'user' }, content: [{ type: 'text', text: memoryTask === undefined ? developmentPrompt(request.cell.caseId) : memoryDevelopmentPrompt(request.cell.caseId, input.suite === 'memory-v2' ? '2' : '1') }] }));
|
|
249
|
+
await handle.agent.whenIdle();
|
|
250
|
+
const output = assistantText(handle.agent.session);
|
|
251
|
+
const usage = observedUsage;
|
|
252
|
+
const terminal = [...handle.agent.session.snapshotEvents()].reverse().find((item) => item?.type === 'turn/end');
|
|
253
|
+
let normalized;
|
|
254
|
+
try {
|
|
255
|
+
normalized = usage === undefined ? undefined : normalizeTokenUsage(usage);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
throw new Error('incomplete native measurement');
|
|
259
|
+
}
|
|
260
|
+
const meteredInput = normalized?.inputTokens ?? 0;
|
|
261
|
+
const meteredOutput = normalized?.outputTokens ?? 0;
|
|
262
|
+
const measuredCost = normalized === undefined ? null : tokenUsageCost(normalized, input.model);
|
|
263
|
+
if (!reserved || calls !== 1 || unexpectedTool || output === undefined || normalized === undefined || request.signal.aborted || terminal?.data?.reason?.kind !== 'completed' || (input.model.inputLimitMode !== 'estimate' && meteredInput > reservedInput) || meteredInput > request.budget.inputTokens || meteredOutput > input.model.maxOutputTokens || meteredOutput > request.budget.outputTokens || (costBudget !== null && (measuredCost === null || measuredCost > costBudget)))
|
|
264
|
+
throw new Error('incomplete native measurement');
|
|
265
|
+
const judged = memoryTask === undefined ? judgeDevelopmentResponse(request.cell.caseId, output) : judgeMemoryDevelopmentResponse(request.cell.caseId, output, input.suite === 'memory-v2' ? '2' : '1');
|
|
266
|
+
observation = { versions: request.variant.versions, inputDigest: request.task.inputDigest, acceptanceDigest: request.task.acceptanceDigest, verdict: judged.verdict, metrics: { inputTokens: meteredInput, outputTokens: meteredOutput, costUsdMicros: measuredCost, toolCalls: 0, rework: null, interventions: null, latencyMs: null }, evidenceDigest: judged.evidenceDigest, quiescent: true };
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
executionFailed = true;
|
|
270
|
+
executionError = error;
|
|
271
|
+
}
|
|
272
|
+
{
|
|
273
|
+
removeAbort?.();
|
|
274
|
+
const cleanups = [];
|
|
275
|
+
if (handle !== undefined)
|
|
276
|
+
cleanups.push(() => handle.dispose());
|
|
277
|
+
cleanups.push(() => ctx.fiber.dispose());
|
|
278
|
+
if (binding !== undefined)
|
|
279
|
+
cleanups.push(() => binding.dispose());
|
|
280
|
+
cleanups.push(() => rm(workspace, { recursive: true, force: true }));
|
|
281
|
+
let cleanupFailed = false;
|
|
282
|
+
for (const cleanup of cleanups) {
|
|
283
|
+
try {
|
|
284
|
+
await cleanup();
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
cleanupFailed = true;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (cleanupFailed)
|
|
291
|
+
throw new Error('native benchmark cleanup failed');
|
|
292
|
+
}
|
|
293
|
+
if (executionFailed)
|
|
294
|
+
throw executionError;
|
|
295
|
+
if (observation === undefined)
|
|
296
|
+
throw new Error('native benchmark observation missing');
|
|
297
|
+
return observation;
|
|
298
|
+
} });
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/benchmark/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BenchmarkPlan, BenchmarkReport, BenchmarkResult } from './types.js';
|
|
2
|
+
/** Produces descriptive, paired benchmark statistics; it never authorizes promotion. */
|
|
3
|
+
export declare function benchmarkReport(input: BenchmarkPlan, inputResults: readonly BenchmarkResult[]): BenchmarkReport;
|
|
4
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/benchmark/report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAoB,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAgDnG,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,CAkG/G"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { benchmarkMetricKeys, benchmarkPlanDigest, benchmarkResultParser, benchmarkSchedule, parseBenchmarkPlan, } from './schema.js';
|
|
2
|
+
function nearestRank(values, percentile) {
|
|
3
|
+
if (values.length === 0)
|
|
4
|
+
return null;
|
|
5
|
+
const sorted = [...values].sort((left, right) => left - right);
|
|
6
|
+
return sorted[Math.max(0, Math.ceil(percentile * sorted.length) - 1)];
|
|
7
|
+
}
|
|
8
|
+
function distribution(values, missing) {
|
|
9
|
+
if (values.length === 0)
|
|
10
|
+
return { measured: 0, missing, mean: null, median: null, p95: null };
|
|
11
|
+
const sorted = [...values].sort((left, right) => left - right);
|
|
12
|
+
const middle = sorted.length / 2;
|
|
13
|
+
const median = sorted.length % 2 === 0 ? (sorted[middle - 1] + sorted[middle]) / 2 : sorted[Math.floor(middle)];
|
|
14
|
+
return {
|
|
15
|
+
measured: values.length,
|
|
16
|
+
missing,
|
|
17
|
+
mean: values.reduce((sum, value) => sum + value, 0) / values.length,
|
|
18
|
+
median,
|
|
19
|
+
p95: nearestRank(sorted, 0.95),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function generator(seed) {
|
|
23
|
+
let state = seed >>> 0;
|
|
24
|
+
return () => {
|
|
25
|
+
state = (state + 0x6d2b79f5) >>> 0;
|
|
26
|
+
let value = state;
|
|
27
|
+
value = Math.imul(value ^ (value >>> 15), value | 1);
|
|
28
|
+
value ^= value + Math.imul(value ^ (value >>> 7), value | 61);
|
|
29
|
+
return ((value ^ (value >>> 14)) >>> 0) / 4294967296;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function clusteredInterval(caseMeans) {
|
|
33
|
+
if (caseMeans.length < 2)
|
|
34
|
+
return null;
|
|
35
|
+
const next = generator(0x4d595df4);
|
|
36
|
+
const samples = [];
|
|
37
|
+
for (let draw = 0; draw < 2_000; draw++) {
|
|
38
|
+
let sum = 0;
|
|
39
|
+
for (let index = 0; index < caseMeans.length; index++)
|
|
40
|
+
sum += caseMeans[Math.floor(next() * caseMeans.length)];
|
|
41
|
+
samples.push(sum / caseMeans.length);
|
|
42
|
+
}
|
|
43
|
+
return [nearestRank(samples, 0.025), nearestRank(samples, 0.975)];
|
|
44
|
+
}
|
|
45
|
+
/** Produces descriptive, paired benchmark statistics; it never authorizes promotion. */
|
|
46
|
+
export function benchmarkReport(input, inputResults) {
|
|
47
|
+
const plan = parseBenchmarkPlan(input);
|
|
48
|
+
const scheduled = benchmarkSchedule(plan);
|
|
49
|
+
const parseResult = benchmarkResultParser(plan);
|
|
50
|
+
const results = new Map();
|
|
51
|
+
for (const inputResult of inputResults) {
|
|
52
|
+
const result = parseResult(inputResult);
|
|
53
|
+
if (results.has(result.cell.id))
|
|
54
|
+
throw new Error(`duplicate benchmark result cell: ${result.cell.id}`);
|
|
55
|
+
results.set(result.cell.id, result);
|
|
56
|
+
}
|
|
57
|
+
const cellKey = (caseId, variantId, repeat) => `${caseId}\u0000${variantId}\u0000${repeat}`;
|
|
58
|
+
const cells = new Map(scheduled.map(cell => [cellKey(cell.caseId, cell.variantId, cell.repeat), cell]));
|
|
59
|
+
const lookup = (caseId, variantId, repeat) => {
|
|
60
|
+
const cell = cells.get(cellKey(caseId, variantId, repeat));
|
|
61
|
+
return cell === undefined ? undefined : results.get(cell.id);
|
|
62
|
+
};
|
|
63
|
+
const complete = results.size === scheduled.length;
|
|
64
|
+
const variants = plan.variants.map(variant => {
|
|
65
|
+
const expectedCells = scheduled.filter(cell => cell.variantId === variant.id);
|
|
66
|
+
const variantResults = expectedCells.map(cell => results.get(cell.id)).filter((result) => result !== undefined);
|
|
67
|
+
const achieved = variantResults.filter(result => result.verdict === 'achieved').length;
|
|
68
|
+
const notAchieved = variantResults.filter(result => result.verdict === 'not-achieved').length;
|
|
69
|
+
const unknown = expectedCells.length - achieved - notAchieved;
|
|
70
|
+
const metrics = Object.fromEntries(benchmarkMetricKeys.map(key => {
|
|
71
|
+
const measured = variantResults.map(result => result.metrics[key]).filter((value) => value !== null);
|
|
72
|
+
return [key, distribution(measured, expectedCells.length - measured.length)];
|
|
73
|
+
}));
|
|
74
|
+
return {
|
|
75
|
+
id: variant.id,
|
|
76
|
+
expected: expectedCells.length,
|
|
77
|
+
recorded: variantResults.length,
|
|
78
|
+
achieved,
|
|
79
|
+
notAchieved,
|
|
80
|
+
unknown,
|
|
81
|
+
successRate: achieved / expectedCells.length,
|
|
82
|
+
successInterval95: !complete || unknown > 0 ? null : clusteredInterval(plan.cases.map(task => {
|
|
83
|
+
let successes = 0;
|
|
84
|
+
for (let repeat = 0; repeat < plan.repeats; repeat++)
|
|
85
|
+
successes += Number(lookup(task.id, variant.id, repeat)?.verdict === 'achieved');
|
|
86
|
+
return successes / plan.repeats;
|
|
87
|
+
})),
|
|
88
|
+
metrics,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
const baseline = plan.variants.find(variant => variant.role === 'baseline');
|
|
92
|
+
const candidate = plan.variants.find(variant => variant.role === 'candidate');
|
|
93
|
+
const comparisons = plan.variants.filter(variant => variant.id !== baseline.id).map(variant => {
|
|
94
|
+
const reference = variant.role === 'ablation' ? candidate : baseline;
|
|
95
|
+
let paired = 0;
|
|
96
|
+
let missingPairs = 0;
|
|
97
|
+
let wins = 0;
|
|
98
|
+
let losses = 0;
|
|
99
|
+
let ties = 0;
|
|
100
|
+
let unknownPairs = 0;
|
|
101
|
+
const deltas = [];
|
|
102
|
+
const byCase = new Map();
|
|
103
|
+
for (const task of plan.cases)
|
|
104
|
+
for (let repeat = 0; repeat < plan.repeats; repeat++) {
|
|
105
|
+
const baselineResult = lookup(task.id, reference.id, repeat);
|
|
106
|
+
const variantResult = lookup(task.id, variant.id, repeat);
|
|
107
|
+
if (baselineResult === undefined || variantResult === undefined) {
|
|
108
|
+
missingPairs++;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const delta = Number(variantResult.verdict === 'achieved') - Number(baselineResult.verdict === 'achieved');
|
|
112
|
+
deltas.push(delta);
|
|
113
|
+
const caseDeltas = byCase.get(task.id) ?? [];
|
|
114
|
+
caseDeltas.push(delta);
|
|
115
|
+
byCase.set(task.id, caseDeltas);
|
|
116
|
+
if (baselineResult.verdict === 'unknown' || variantResult.verdict === 'unknown') {
|
|
117
|
+
unknownPairs++;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
paired++;
|
|
121
|
+
if (delta > 0)
|
|
122
|
+
wins++;
|
|
123
|
+
else if (delta < 0)
|
|
124
|
+
losses++;
|
|
125
|
+
else
|
|
126
|
+
ties++;
|
|
127
|
+
}
|
|
128
|
+
const caseMeans = [...byCase.values()].map(values => values.reduce((sum, value) => sum + value, 0) / values.length);
|
|
129
|
+
return {
|
|
130
|
+
baselineId: reference.id,
|
|
131
|
+
variantId: variant.id,
|
|
132
|
+
paired,
|
|
133
|
+
missingPairs,
|
|
134
|
+
wins,
|
|
135
|
+
losses,
|
|
136
|
+
ties,
|
|
137
|
+
unknownPairs,
|
|
138
|
+
successRateDelta: deltas.length === 0 || missingPairs > 0 || unknownPairs > 0 ? null : deltas.reduce((sum, value) => sum + value, 0) / deltas.length,
|
|
139
|
+
taskBootstrapInterval95: missingPairs > 0 || unknownPairs > 0 ? null : clusteredInterval(caseMeans),
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
schemaVersion: 1,
|
|
144
|
+
planDigest: benchmarkPlanDigest(plan),
|
|
145
|
+
complete,
|
|
146
|
+
expectedCells: scheduled.length,
|
|
147
|
+
recordedCells: results.size,
|
|
148
|
+
variants,
|
|
149
|
+
comparisons,
|
|
150
|
+
promotionAuthorized: false,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/benchmark/report.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AAMpB,SAAS,WAAW,CAAC,MAAyB,EAAE,UAAkB;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAA;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,CAAA;AACxE,CAAC;AAED,SAAS,YAAY,CAAC,MAAyB,EAAE,OAAe;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;IAC7F,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAE,CAAA;IAClH,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;QACnE,MAAM;QACN,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;KAC/B,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAA;IACtB,OAAO,GAAG,EAAE;QACV,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACpD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAA;QAC7D,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAA;IACtD,CAAC,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,SAA4B;IACrD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IAClC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE;YAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAE,CAAA;QAC/G,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAE,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAE,CAAC,CAAA;AACrE,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAAC,KAAoB,EAAE,YAAwC;IAC5F,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAA;IAC/C,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACtG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,MAAM,SAAS,SAAS,SAAS,MAAM,EAAE,CAAA;IACnH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAU,CAAC,CAAC,CAAA;IAChH,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAE,MAAc,EAA4B,EAAE;QAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QAC1D,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAA;IAElD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC3C,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAA;QAC7E,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAA0B,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;QACvI,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,MAAM,CAAA;QACtF,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,MAAM,CAAA;QAC7F,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAA;QAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/D,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;YACrH,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAmD,CAAA;QACrD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ,EAAE,aAAa,CAAC,MAAM;YAC9B,QAAQ,EAAE,cAAc,CAAC,MAAM;YAC/B,QAAQ;YACR,WAAW;YACX,OAAO;YACP,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC,MAAM;YAC5C,iBAAiB,EAAE,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC3F,IAAI,SAAS,GAAG,CAAC,CAAA;gBACjB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;oBAAE,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,UAAU,CAAC,CAAA;gBACtI,OAAO,SAAS,GAAG,IAAI,CAAC,OAAO,CAAA;YACjC,CAAC,CAAC,CAAC;YACH,OAAO;SACR,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,CAAE,CAAA;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;IAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC5F,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;QACrE,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAA;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;gBACpF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBAC5D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBACzD,IAAI,cAAc,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBAAC,YAAY,EAAE,CAAC;oBAAC,SAAQ;gBAAC,CAAC;gBAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,KAAK,UAAU,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,KAAK,UAAU,CAAC,CAAA;gBAC1G,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAClB,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;gBAC5C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;gBAC/B,IAAI,cAAc,CAAC,OAAO,KAAK,SAAS,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAAC,YAAY,EAAE,CAAC;oBAAC,SAAQ;gBAAC,CAAC;gBAC7G,MAAM,EAAE,CAAA;gBACR,IAAI,KAAK,GAAG,CAAC;oBAAE,IAAI,EAAE,CAAA;qBAChB,IAAI,KAAK,GAAG,CAAC;oBAAE,MAAM,EAAE,CAAA;;oBACvB,IAAI,EAAE,CAAA;YACb,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACnH,OAAO;YACL,UAAU,EAAE,SAAS,CAAC,EAAE;YACxB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM;YACN,YAAY;YACZ,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,YAAY;YACZ,gBAAgB,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;YACpJ,uBAAuB,EAAE,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC;SACpG,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC;QACrC,QAAQ;QACR,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,aAAa,EAAE,OAAO,CAAC,IAAI;QAC3B,QAAQ;QACR,WAAW;QACX,mBAAmB,EAAE,KAAK;KAC3B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BenchmarkStore } from './store.js';
|
|
2
|
+
import type { BenchmarkBudget, BenchmarkCase, BenchmarkCell, BenchmarkMetrics, BenchmarkObservation, BenchmarkPlan, BenchmarkResult, BenchmarkVariant } from './types.js';
|
|
3
|
+
export interface BenchmarkExecutionRequest {
|
|
4
|
+
readonly planId: string;
|
|
5
|
+
readonly dataset: BenchmarkPlan['dataset'];
|
|
6
|
+
readonly cell: BenchmarkCell;
|
|
7
|
+
readonly task: BenchmarkCase;
|
|
8
|
+
readonly variant: BenchmarkVariant;
|
|
9
|
+
readonly budget: BenchmarkBudget;
|
|
10
|
+
readonly signal: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Trusted Host integration, not a model-produced result or a general-purpose process command.
|
|
14
|
+
* Implementations must enforce budgets, isolate cells, inspect actually loaded versions and use
|
|
15
|
+
* an independent judge. The controller checks returned evidence; it cannot establish OS isolation.
|
|
16
|
+
*/
|
|
17
|
+
export interface BenchmarkExecutor {
|
|
18
|
+
execute(request: BenchmarkExecutionRequest): Promise<BenchmarkObservation>;
|
|
19
|
+
/** Synchronous Host snapshot after cancellation. Must never wait for possibly live work. */
|
|
20
|
+
failure?(request: BenchmarkExecutionRequest, reason: Exclude<BenchmarkResult['reason'], 'verified'>): BenchmarkObservation | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare const emptyBenchmarkMetrics: () => BenchmarkMetrics;
|
|
23
|
+
/** Serial by design: a cell must settle before another can use the Host resources. */
|
|
24
|
+
export declare function runBenchmark(store: BenchmarkStore, input: BenchmarkPlan, executor: BenchmarkExecutor, signal?: AbortSignal): Promise<readonly BenchmarkResult[]>;
|
|
25
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EACV,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,oBAAoB,EACrF,aAAa,EAAE,eAAe,EAAE,gBAAgB,EACjD,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1E,4FAA4F;IAC5F,OAAO,CAAC,CAAC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,GAAG,oBAAoB,GAAG,SAAS,CAAA;CACvI;AAED,eAAO,MAAM,qBAAqB,QAAO,gBAGvC,CAAA;AAaF,sFAAsF;AACtF,wBAAsB,YAAY,CAChC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,WAAW,GAC7F,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAkFrC"}
|