@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.
Files changed (132) hide show
  1. package/README.md +109 -3
  2. package/bin/dsh-benchmark.js +21 -0
  3. package/lib/benchmark/cli.d.ts +6 -0
  4. package/lib/benchmark/cli.d.ts.map +1 -0
  5. package/lib/benchmark/cli.js +332 -0
  6. package/lib/benchmark/cli.js.map +1 -0
  7. package/lib/benchmark/corpus.d.ts +28 -0
  8. package/lib/benchmark/corpus.d.ts.map +1 -0
  9. package/lib/benchmark/corpus.js +173 -0
  10. package/lib/benchmark/corpus.js.map +1 -0
  11. package/lib/benchmark/deepseek.d.ts +15 -0
  12. package/lib/benchmark/deepseek.d.ts.map +1 -0
  13. package/lib/benchmark/deepseek.js +143 -0
  14. package/lib/benchmark/deepseek.js.map +1 -0
  15. package/lib/benchmark/holdout-evidence.d.ts +126 -0
  16. package/lib/benchmark/holdout-evidence.d.ts.map +1 -0
  17. package/lib/benchmark/holdout-evidence.js +466 -0
  18. package/lib/benchmark/holdout-evidence.js.map +1 -0
  19. package/lib/benchmark/holdout-protocol.d.ts +68 -0
  20. package/lib/benchmark/holdout-protocol.d.ts.map +1 -0
  21. package/lib/benchmark/holdout-protocol.js +271 -0
  22. package/lib/benchmark/holdout-protocol.js.map +1 -0
  23. package/lib/benchmark/holdout-provider.d.ts +26 -0
  24. package/lib/benchmark/holdout-provider.d.ts.map +1 -0
  25. package/lib/benchmark/holdout-provider.js +382 -0
  26. package/lib/benchmark/holdout-provider.js.map +1 -0
  27. package/lib/benchmark/holdout.d.ts +83 -0
  28. package/lib/benchmark/holdout.d.ts.map +1 -0
  29. package/lib/benchmark/holdout.js +391 -0
  30. package/lib/benchmark/holdout.js.map +1 -0
  31. package/lib/benchmark/index.d.ts +9 -0
  32. package/lib/benchmark/index.d.ts.map +1 -0
  33. package/lib/benchmark/index.js +7 -0
  34. package/lib/benchmark/index.js.map +1 -0
  35. package/lib/benchmark/memory-corpus.d.ts +55 -0
  36. package/lib/benchmark/memory-corpus.d.ts.map +1 -0
  37. package/lib/benchmark/memory-corpus.js +153 -0
  38. package/lib/benchmark/memory-corpus.js.map +1 -0
  39. package/lib/benchmark/memory-runtime.d.ts +63 -0
  40. package/lib/benchmark/memory-runtime.d.ts.map +1 -0
  41. package/lib/benchmark/memory-runtime.js +75 -0
  42. package/lib/benchmark/memory-runtime.js.map +1 -0
  43. package/lib/benchmark/native.d.ts +46 -0
  44. package/lib/benchmark/native.d.ts.map +1 -0
  45. package/lib/benchmark/native.js +300 -0
  46. package/lib/benchmark/native.js.map +1 -0
  47. package/lib/benchmark/report.d.ts +4 -0
  48. package/lib/benchmark/report.d.ts.map +1 -0
  49. package/lib/benchmark/report.js +153 -0
  50. package/lib/benchmark/report.js.map +1 -0
  51. package/lib/benchmark/runner.d.ts +25 -0
  52. package/lib/benchmark/runner.d.ts.map +1 -0
  53. package/lib/benchmark/runner.js +119 -0
  54. package/lib/benchmark/runner.js.map +1 -0
  55. package/lib/benchmark/schema.d.ts +20 -0
  56. package/lib/benchmark/schema.d.ts.map +1 -0
  57. package/lib/benchmark/schema.js +183 -0
  58. package/lib/benchmark/schema.js.map +1 -0
  59. package/lib/benchmark/store.d.ts +18 -0
  60. package/lib/benchmark/store.d.ts.map +1 -0
  61. package/lib/benchmark/store.js +321 -0
  62. package/lib/benchmark/store.js.map +1 -0
  63. package/lib/benchmark/strategy-capabilities.d.ts +154 -0
  64. package/lib/benchmark/strategy-capabilities.d.ts.map +1 -0
  65. package/lib/benchmark/strategy-capabilities.js +300 -0
  66. package/lib/benchmark/strategy-capabilities.js.map +1 -0
  67. package/lib/benchmark/strategy-config.d.ts +26 -0
  68. package/lib/benchmark/strategy-config.d.ts.map +1 -0
  69. package/lib/benchmark/strategy-config.js +80 -0
  70. package/lib/benchmark/strategy-config.js.map +1 -0
  71. package/lib/benchmark/strategy-corpus.d.ts +21 -0
  72. package/lib/benchmark/strategy-corpus.d.ts.map +1 -0
  73. package/lib/benchmark/strategy-corpus.js +95 -0
  74. package/lib/benchmark/strategy-corpus.js.map +1 -0
  75. package/lib/benchmark/strategy-evidence.d.ts +161 -0
  76. package/lib/benchmark/strategy-evidence.d.ts.map +1 -0
  77. package/lib/benchmark/strategy-evidence.js +520 -0
  78. package/lib/benchmark/strategy-evidence.js.map +1 -0
  79. package/lib/benchmark/strategy-executor.d.ts +27 -0
  80. package/lib/benchmark/strategy-executor.d.ts.map +1 -0
  81. package/lib/benchmark/strategy-executor.js +178 -0
  82. package/lib/benchmark/strategy-executor.js.map +1 -0
  83. package/lib/benchmark/strategy-goal-runtime.d.ts +78 -0
  84. package/lib/benchmark/strategy-goal-runtime.d.ts.map +1 -0
  85. package/lib/benchmark/strategy-goal-runtime.js +324 -0
  86. package/lib/benchmark/strategy-goal-runtime.js.map +1 -0
  87. package/lib/benchmark/strategy-meter.d.ts +62 -0
  88. package/lib/benchmark/strategy-meter.d.ts.map +1 -0
  89. package/lib/benchmark/strategy-meter.js +236 -0
  90. package/lib/benchmark/strategy-meter.js.map +1 -0
  91. package/lib/benchmark/strategy-owner.d.ts +71 -0
  92. package/lib/benchmark/strategy-owner.d.ts.map +1 -0
  93. package/lib/benchmark/strategy-owner.js +282 -0
  94. package/lib/benchmark/strategy-owner.js.map +1 -0
  95. package/lib/benchmark/strategy-plan.d.ts +51 -0
  96. package/lib/benchmark/strategy-plan.d.ts.map +1 -0
  97. package/lib/benchmark/strategy-plan.js +71 -0
  98. package/lib/benchmark/strategy-plan.js.map +1 -0
  99. package/lib/benchmark/strategy-policy.d.ts +16 -0
  100. package/lib/benchmark/strategy-policy.d.ts.map +1 -0
  101. package/lib/benchmark/strategy-policy.js +77 -0
  102. package/lib/benchmark/strategy-policy.js.map +1 -0
  103. package/lib/benchmark/strategy.d.ts +17 -0
  104. package/lib/benchmark/strategy.d.ts.map +1 -0
  105. package/lib/benchmark/strategy.js +21 -0
  106. package/lib/benchmark/strategy.js.map +1 -0
  107. package/lib/benchmark/types.d.ts +133 -0
  108. package/lib/benchmark/types.d.ts.map +1 -0
  109. package/lib/benchmark/types.js +3 -0
  110. package/lib/benchmark/types.js.map +1 -0
  111. package/lib/benchmark/usage.d.ts +36 -0
  112. package/lib/benchmark/usage.d.ts.map +1 -0
  113. package/lib/benchmark/usage.js +84 -0
  114. package/lib/benchmark/usage.js.map +1 -0
  115. package/lib/service.d.ts +50 -1
  116. package/lib/service.d.ts.map +1 -1
  117. package/lib/service.js +556 -9
  118. package/lib/service.js.map +1 -1
  119. package/lib/sqlite.d.ts +1 -1
  120. package/lib/sqlite.d.ts.map +1 -1
  121. package/lib/sqlite.js +94 -2
  122. package/lib/sqlite.js.map +1 -1
  123. package/lib/store.d.ts +27 -5
  124. package/lib/store.d.ts.map +1 -1
  125. package/lib/store.js +324 -25
  126. package/lib/store.js.map +1 -1
  127. package/lib/types.d.ts +114 -5
  128. package/lib/types.d.ts.map +1 -1
  129. package/lib/types.js.map +1 -1
  130. package/lib/version.d.ts +1 -1
  131. package/lib/version.js +1 -1
  132. 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":"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"}
@@ -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"}