benchmark-latency-budget 0.0.0-stage → 0.1.0

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/AGENTS.md ADDED
@@ -0,0 +1,17 @@
1
+ # Working on benchmark-latency-budget
2
+
3
+ ## Commands
4
+
5
+ - Install with `npm ci`.
6
+ - Run the full gate with `npm run ci:local`.
7
+ - Generate tasks with `npm run generate:tasks`.
8
+ - Generate provenance after building with `npm run provenance`.
9
+ - Add no unit tests. Extend `scripts/e2e.mjs` through a public surface.
10
+
11
+ ## Contracts
12
+
13
+ Keep tasks, deterministic grading, and provenance in sync. Episode environments must be seeded. Grade episode traces by replaying their tool log against a fresh simulator. Time is virtual: scheduled charge per call plus model turn time (measured wall-clock from the environment, or declared thinkMs per turn when the clock is declared). Write the failure modes in docs/grading.md before changing grader code.
14
+
15
+ Never read provider keys from repository files. OpenRouter uses `OPENROUTER_API_KEY`. OpenAI-compatible providers use `OPENAI_BASE_URL` and `OPENAI_API_KEY`.
16
+
17
+ Open an issue before a branch. Use `blbd-<issue>-<slug>` and `[blbd-<issue>] Imperative subject`. Keep pull requests below 500 counted lines. Do not merge your own pull request or push `release`.
package/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-10-16
4
+
5
+ Initial alpha release.
6
+
7
+ - 36 seeded episode tasks across voice, UI, and background deadline
8
+ classes; each deadline is set at 1.5-2x the task's shortest correct path
9
+ (voice 447-641 ms, UI 875-1494 ms, background 2025-3714 ms).
10
+ - Deterministic `qualityWithinBudget` grader: the answer must name exactly
11
+ one candidate value, be grounded in replayed tool output, and arrive
12
+ inside the deadline.
13
+ - Virtual clock: scheduled per-tool latencies plus model turn time,
14
+ measured wall-clock by default or declared `thinkMs` per turn
15
+ (`--clock declared`, `LATENCY_BUDGET_CLOCK=declared`).
16
+ - SDK, CLI (`--tasks`, `--clock`), MCP stdio server, and fetch-style HTTP
17
+ API from one `defineBenchmark` package.
18
+ - Run reports carry a `latency` block: p50/p95 billed time,
19
+ `lateButCorrect`, clock counts, and the 0.5x-4x deadline curve. MCP
20
+ `run_benchmark` returns the same block; `POST /v1/score` and MCP
21
+ `score_answer` return a per-submission `latency` block and bill
22
+ submitted traces at the declared rate.
23
+ - Hidden split generation (`--split hidden`) derives prompts and answers
24
+ from a transformed seed and prefixes task ids with `h-`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pooria Arab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,302 @@
1
- # Temporary Holding Version
1
+ # benchmark-latency-budget
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm](https://img.shields.io/npm/v/benchmark-latency-budget)](https://www.npmjs.com/package/benchmark-latency-budget) [![downloads](https://img.shields.io/npm/dm/benchmark-latency-budget)](https://www.npmjs.com/package/benchmark-latency-budget) [![license](https://img.shields.io/npm/l/benchmark-latency-budget)](./LICENSE) [![types](https://img.shields.io/badge/TypeScript-types-3178c6)](#sdk)
4
+
5
+ [AI Benchmark Index](https://aibenchmarkindex.com/benchmarks/benchmark-latency-budget) · [npm](https://www.npmjs.com/package/benchmark-latency-budget) · [API](#http-api) · [MCP](#model-context-protocol)
6
+
7
+ A right answer that arrives too late is a wrong answer in a voice call or a
8
+ busy UI. benchmark-latency-budget checks whether an agent gives the correct
9
+ answer before its deadline. Tasks come in voice, UI, and background classes,
10
+ and each deadline is set at 1.5-2x the shortest correct path, so chatty
11
+ agents run out of time. The agent sees its deadline in the system text and
12
+ can audit tool costs with a `describe_tools` call.
13
+
14
+ ```bash
15
+ npx benchmark-latency-budget run --model offline --provider mock
16
+ ```
17
+
18
+ ```text
19
+ # Latency Budget
20
+
21
+ - Model: `mock:1`
22
+ - Score: **47.2%**
23
+ - 95% CI: 30.6%–63.9%
24
+ - Tasks: 36
25
+
26
+ | Task | Score | Reason |
27
+ | --- | ---: | --- |
28
+ | voice-01 | 0.0% | No candidate value found in the answer; 0ms against a 641ms deadline. |
29
+ | voice-02 | 100.0% | Correct answer in 121ms, within the 484ms deadline. |
30
+ ```
31
+
32
+ The tasks are seeded synthetic directory, calendar, and doc lookups. Seed
33
+ 20261015 reproduces the public set; a hidden split derives from a
34
+ transformed seed, so its prompts and answers never repeat the public one
35
+ and its task ids carry an `h-` prefix.
36
+
37
+ ## Install
38
+
39
+ benchmark-latency-budget requires Node.js 20 or newer.
40
+
41
+ ```bash
42
+ npm install benchmark-latency-budget
43
+ ```
44
+
45
+ ## Run your first benchmark
46
+
47
+ The mock provider needs no key or network access.
48
+
49
+ ```bash
50
+ npx benchmark-latency-budget run --model offline --provider mock
51
+ ```
52
+
53
+ About half the mock answers are right and on time; the rest are wrong, so
54
+ expect a mean near 50%. A successful run prints 36 scored rows and a mean
55
+ with a bootstrap 95% confidence interval.
56
+
57
+ ## Run on a real model
58
+
59
+ Point the runner at OpenRouter with any chat model:
60
+
61
+ ```bash
62
+ OPENROUTER_API_KEY=sk-or-... npx benchmark-latency-budget run --model openai/gpt-4o-mini --provider openrouter
63
+ ```
64
+
65
+ Any OpenAI-compatible endpoint works too:
66
+
67
+ ```bash
68
+ OPENAI_BASE_URL=https://my-proxy/v1 OPENAI_API_KEY=... npx benchmark-latency-budget run --model my-model --provider openai
69
+ ```
70
+
71
+ Never put keys in repo files; the runner reads them from the environment.
72
+
73
+ ## How to read the score
74
+
75
+ The headline is `qualityWithinBudget`: 1 only for a correct answer whose
76
+ total time fits the deadline, else 0. Totals add model turn time to every
77
+ scheduled tool charge. Turn time is measured wall-clock by default, or the
78
+ declared `thinkMs` (80 ms) per turn when the clock is declared
79
+ (`--clock declared` or `LATENCY_BUDGET_CLOCK=declared`) for repeatable
80
+ runs. A correct answer past the deadline scores 0 on the headline and is
81
+ counted as `lateButCorrect`, so you can tell slowness apart from
82
+ wrongness. Every run report also carries a `latency` block with p50/p95
83
+ total time, the `lateButCorrect` count, and a quality-vs-deadline curve
84
+ at 0.5x, 1x, 2x, and 4x each deadline.
85
+
86
+ Measured mode bills real wall-clock turn time, and the deadlines assume
87
+ about 80 ms of model time per turn (the declared `thinkMs`). A hosted chat
88
+ model that needs a second or more per turn will therefore score near 0 in
89
+ measured mode on voice and UI tasks — that is what the benchmark is
90
+ measuring. For cross-model comparisons where raw speed should not
91
+ dominate, run `--clock declared` so every model is billed the same 80 ms
92
+ per turn.
93
+
94
+ ## How it works
95
+
96
+ ```text
97
+ seeded tasks -> agent tools (lookup, calendar_get, search_docs, describe_tools)
98
+ -> virtual clock (model turn time + scheduled ms per call)
99
+ -> deterministic grader (one candidate + grounded + on time)
100
+ -> CLI / SDK / MCP / HTTP API
101
+ ```
102
+
103
+ The runner keeps task order and records score, reason, latency, retries,
104
+ usage, and cost when available. Model turn time is billed from the
105
+ environment's wall-clock record; run with a declared clock when results
106
+ must repeat bit for bit across machines.
107
+
108
+ ## Why it exists
109
+
110
+ General model leaderboards do not isolate agents behavior under time
111
+ pressure. This package keeps the task data, grading rules, and provenance
112
+ together for inspection.
113
+
114
+ ## Compare
115
+
116
+ Checked on 2026-10-16.
117
+
118
+ | Property | benchmark-latency-budget | General chat leaderboard | Ad hoc prompt test |
119
+ | --- | --- | --- | --- |
120
+ | Target | Correct answers inside voice, UI, and background deadlines. | Broad model quality | One local example |
121
+ | Grading | Deterministic code | Varies | Manual |
122
+ | Offline run | Mock provider | Varies | Varies |
123
+ | Provenance | Package record | Varies | Usually absent |
124
+
125
+ ## Coverage
126
+
127
+ | Surface | Status |
128
+ | --- | --- |
129
+ | episode tasks | Included (36: 12 voice, 12 UI, 12 background) |
130
+ | SDK | Included |
131
+ | CLI | Included |
132
+ | MCP server | Included |
133
+ | HTTP API | Included |
134
+
135
+ The E2E gate checks every listed surface against the package source.
136
+
137
+ ## Deadlines
138
+
139
+ Each task sets `deadlineMs` at 1.5-2x its shortest correct path (declared
140
+ turn time plus scheduled call charges), so slower schedules get wider
141
+ budgets and nothing is loose enough to hide wasted calls. The shipped data
142
+ spans voice 447-641 ms, UI 875-1494 ms, background 2025-3714 ms.
143
+
144
+ | Class | Minimal calls | Deadline range | What burns the budget |
145
+ | --- | --- | --- | --- |
146
+ | voice | 1 | 447-641 ms | A repeat lookup or a wrong first guess |
147
+ | UI | 2 | 875-1494 ms | Redundant searches before the follow-up call |
148
+ | background | 3 | 2025-3714 ms | Long chains of speculative calls |
149
+
150
+ Per-call charges range from 100 ms (voice lookup) to 700 ms (background
151
+ search). Retrying a failed call costs the full charge again, and the
152
+ read-only `describe_tools` audit costs a flat 25 ms.
153
+
154
+ ## Common use cases
155
+
156
+ 1. **Model developers:** compare adapters with the same seeded tasks.
157
+ 2. **Agent developers:** inspect task-level failures before changing prompts.
158
+ 3. **Release teams:** run the mock gate before publishing a data update.
159
+ 4. **Researchers:** export per-task scores for a reproducible analysis.
160
+
161
+ ## Features
162
+
163
+ - **Deterministic grading:** Each row includes a score and reason.
164
+ - **Reproducible data:** A committed seeded script creates the public tasks.
165
+ - **Virtual clock:** Tool time is scheduled and model turns are measured or declared, so runs are fair and can repeat exactly.
166
+ - **Share cards:** The `card` command writes a 1200×630 SVG with the benchmark name, the model, and the score.
167
+ - **Provenance:** Code and Markdown carry the same source record.
168
+
169
+ ## SDK
170
+
171
+ ```ts
172
+ import { benchmark, run, score } from "benchmark-latency-budget";
173
+ import { createLatencyBenchmark, latencyReport } from "benchmark-latency-budget";
174
+ ```
175
+
176
+ `run(adapter, options)` creates a report with a `latency` summary block.
177
+ `score(taskId, submission)` grades one trace. `totalTimeMs(task, submission)`
178
+ returns the billed total and `sweepDeadlines(task, submission)` returns the
179
+ 0.5x–4x curve. `createLatencyBenchmark({ tasksPath, clock })` builds a
180
+ benchmark over a different tasks file or clock mode, and
181
+ `latencyReport(report)` adds the summary to any stored run report.
182
+
183
+ ## CLI
184
+
185
+ Commands are `list`, `show`, `run`, `score`, `card`, `provenance`,
186
+ `index-entry`, `serve`, and `mcp`. Pass `--json` for machine-readable output.
187
+ Two flags work on every command: `--tasks <path>` swaps the packaged task set
188
+ for another JSONL file (for example a generated hidden split), and
189
+ `--clock measured|declared` picks measured wall-clock turns or the repeatable
190
+ declared `thinkMs` per turn.
191
+
192
+ ## Model Context Protocol
193
+
194
+ Start the MCP stdio server:
195
+
196
+ ```bash
197
+ npx benchmark-latency-budget mcp
198
+ ```
199
+
200
+ Tools are `list_tasks`, `get_task`, `score_answer`, `run_benchmark`, and
201
+ `get_provenance`. `run_benchmark` returns the report with the `latency`
202
+ summary and accepts `provider: "mock"` for offline runs; `score_answer`
203
+ replies with a per-submission `latency` timing block.
204
+
205
+ ## HTTP API
206
+
207
+ Import `handler` from `benchmark-latency-budget/api`, or run
208
+ `npx benchmark-latency-budget serve`. Routes are `GET /health`,
209
+ `GET /v1/tasks`, `GET /v1/tasks/:id`, `POST /v1/score`,
210
+ `GET /v1/provenance`, and `GET /v1/index-entry`. `POST /v1/score` returns
211
+ the score plus a `latency` timing block (deadline, billed total, clock
212
+ mode, on-time flag). Server surfaces ignore self-reported measured turn
213
+ times — a caller cannot prove them — so submitted traces are billed at the
214
+ declared rate.
215
+
216
+ ## Data provenance
217
+
218
+ `data/tasks.jsonl` contains the 36 public tasks. `data/PROVENANCE.md` names
219
+ the generator, seed, licence, cutoff, and refresh steps. Run
220
+ `npm run generate:tasks` to rebuild the public set and
221
+ `node scripts/gen-tasks.mjs --seed <n> --split hidden` for a hidden split
222
+ (written to gitignored `artifacts/`, never published).
223
+
224
+ ## Limits and known weaknesses
225
+
226
+ No public leaderboard yet: only the mock provider has been run here, so the
227
+ sample table above shows mock behavior, not model rankings. Declared mode
228
+ cannot see where turns broke in a flat tool log, so each recorded call is
229
+ billed as its own turn; measured mode fixes that but depends on the machine.
230
+ Synthetic fixtures are small, so agents can look faster than on messy real
231
+ tools. Public tasks can enter training data; keep a separately seeded hidden
232
+ split for final comparisons. Remote providers can add cost and retain
233
+ prompts under their own policies.
234
+
235
+ ## Prior art
236
+
237
+ There is no single prior benchmark this copies. The episode simulator
238
+ pattern follows `benchmark-core`'s seeded `OrderLookupEnvironment`, and the
239
+ deadline framing follows the conversational-systems practice of treating a
240
+ late reply as a failure. The difference here is the virtual clock: tool time
241
+ is scheduled per call and model turn time is recorded by the environment or
242
+ declared, so nothing depends on per-call wall-clock jitter.
243
+
244
+ ## Integration guides
245
+
246
+ - [TypeScript SDK integration](#sdk)
247
+ - [Model Context Protocol integration](#model-context-protocol)
248
+ - [HTTP API integration](#http-api)
249
+
250
+ ## Status
251
+
252
+ Version 0.1.0 is alpha, saturation unknown. Task schemas and grading may
253
+ change before 1.0. Report defects through the GitHub issue tracker. Public
254
+ case studies are not yet published.
255
+
256
+ ## FAQ
257
+
258
+ ### What does benchmark-latency-budget measure?
259
+
260
+ Whether an agent answers correctly before a voice, UI, or background
261
+ deadline. The committed grader defines the exact pass conditions.
262
+
263
+ ### Can benchmark-latency-budget run offline?
264
+
265
+ It runs end to end with the mock provider and no key. Real model runs need
266
+ a configured provider.
267
+
268
+ ### Which providers work?
269
+
270
+ OpenRouter, an OpenAI-compatible base URL, and the offline mock adapter
271
+ through benchmark-core.
272
+
273
+ ### Does benchmark-latency-budget provide a hosted service?
274
+
275
+ It provides a server you run. It does not provide a managed benchmark
276
+ service.
277
+
278
+ ### Where do the tasks come from?
279
+
280
+ Seeded synthetic directory, calendar, and doc fixtures. The provenance file
281
+ explains how to reproduce and refresh them.
282
+
283
+ ### How are answers graded?
284
+
285
+ The answer must name exactly one of the task's candidate values
286
+ (case-insensitive, word-bounded) and a replayed tool result must ground it,
287
+ then the total time must fit the deadline. Model judging is off.
288
+
289
+ ### How is this different from a general leaderboard?
290
+
291
+ It measures one named behavior with inspectable tasks and grading. General
292
+ leaderboards combine broader capabilities.
293
+
294
+ ### Can I use a hidden split?
295
+
296
+ Yes. Generate one with `--split hidden` into `artifacts/` and run it with
297
+ `--tasks artifacts/tasks.hidden.jsonl`. Keep it out of the npm package and
298
+ the public repository.
299
+
300
+ ## License
301
+
302
+ [MIT](LICENSE) © Pooria Arab
@@ -0,0 +1,13 @@
1
+ # Latency Budget provenance
2
+
3
+ This file is generated from the benchmark definition.
4
+
5
+ ## Seeded latency-budget task generator
6
+
7
+ - Kind: `synthetic`
8
+ - URL: https://github.com/pooriaarab/benchmark-latency-budget/blob/main/scripts/gen-tasks.mjs
9
+ - Licence: `MIT`
10
+ - Retrieved: 2026-10-15T00:00:00.000Z
11
+ - How to get it: Run `node scripts/gen-tasks.mjs --seed 20261015` for the public tasks, or `node scripts/gen-tasks.mjs --seed <n> --split hidden` for a hidden split (written to gitignored artifacts/ with h- prefixed task ids).
12
+ - Contamination notes: Public tasks generated with seed 20261015, benchmark cutoff 2026-10-15. Public tasks may enter training data; use a separately seeded hidden split for final comparisons.
13
+ - Refresh: Pick a new seed, run the generator, review the JSONL diff. Regenerate quarterly or when saturation is shown.
@@ -0,0 +1,36 @@
1
+ {"id":"voice-01","kind":"episode","prompt":"What is the phone extension for Lina Haddad?","expected":"8929","metadata":{"budgetClass":"voice","deadlineMs":641,"thinkMs":80,"latencyMs":{"lookup":220,"calendar_get":176,"search_docs":202},"fixtures":{"directory":{"Lina Haddad":{"extension":"8929","room":"Atrium-1"},"Sofia Marchetti":{"extension":"1196","room":"Atrium-1"},"David Kim":{"extension":"9549","room":"West-3"},"Omar Farouk":{"extension":"7198","room":"Atrium-1"}}},"minimalCalls":[{"name":"lookup","args":{"key":"Lina Haddad"}}],"candidates":["8929","1196","9549","7198"],"seed":20261395}}
2
+ {"id":"voice-02","kind":"episode","prompt":"Which room is Demo Friday on 2026-11-09?","expected":"Garden-A","metadata":{"budgetClass":"voice","deadlineMs":484,"thinkMs":80,"latencyMs":{"lookup":106,"calendar_get":121,"search_docs":207},"fixtures":{"directory":{"Grace Mwangi":{"extension":"7778","room":"Focus-4"},"Sofia Marchetti":{"extension":"2475","room":"North-2"},"Amara Okafor":{"extension":"2688","room":"West-3"},"David Kim":{"extension":"6041","room":"Garden-A"}},"calendar":{"2026-11-09":[{"event":"Demo Friday","room":"Garden-A","organizer":"Grace Mwangi"},{"event":"Release train","room":"1D","organizer":"Sofia Marchetti"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-09"}}],"candidates":["Garden-A","1D"],"seed":20261296}}
3
+ {"id":"voice-03","kind":"episode","prompt":"What internal doc covers parental leave?","expected":"Parental leave, step by step","metadata":{"budgetClass":"voice","deadlineMs":447,"thinkMs":80,"latencyMs":{"lookup":102,"calendar_get":151,"search_docs":109},"fixtures":{"directory":{"Amara Okafor":{"extension":"7208","room":"Focus-4"},"Lina Haddad":{"extension":"9106","room":"Focus-4"},"Ana Petrova":{"extension":"4400","room":"Atrium-1"},"Tomas Ribeiro":{"extension":"1443","room":"West-3"}},"docs":[{"title":"Parental leave, step by step","topic":"parental leave","author":"Amara Okafor"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Lina Haddad"},{"title":"Where each team sits","topic":"seating plan","author":"Lina Haddad"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"parental leave"}}],"candidates":["Parental leave, step by step","Ten shortcuts for the editor","Where each team sits"],"seed":20261284}}
4
+ {"id":"voice-04","kind":"episode","prompt":"Give me Yuki Tanaka's phone extension.","expected":"5747","metadata":{"budgetClass":"voice","deadlineMs":476,"thinkMs":80,"latencyMs":{"lookup":156,"calendar_get":118,"search_docs":210},"fixtures":{"directory":{"Yuki Tanaka":{"extension":"5747","room":"1D"},"Ana Petrova":{"extension":"9989","room":"Garden-A"},"Grace Mwangi":{"extension":"3594","room":"Atrium-1"},"Ella Novak":{"extension":"8494","room":"3B"}}},"minimalCalls":[{"name":"lookup","args":{"key":"Yuki Tanaka"}}],"candidates":["5747","9989","3594","8494"],"seed":20261331}}
5
+ {"id":"voice-05","kind":"episode","prompt":"Which room is Roadmap sync on 2026-11-10?","expected":"West-3","metadata":{"budgetClass":"voice","deadlineMs":517,"thinkMs":80,"latencyMs":{"lookup":122,"calendar_get":102,"search_docs":188},"fixtures":{"directory":{"David Kim":{"extension":"1247","room":"Atrium-1"},"Grace Mwangi":{"extension":"4988","room":"3B"},"Omar Farouk":{"extension":"6395","room":"Atrium-1"},"Marco Silva":{"extension":"3831","room":"Garden-A"}},"calendar":{"2026-11-10":[{"event":"Roadmap sync","room":"West-3","organizer":"David Kim"},{"event":"Release train","room":"3B","organizer":"Grace Mwangi"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-10"}}],"candidates":["West-3","3B"],"seed":20261277}}
6
+ {"id":"voice-06","kind":"episode","prompt":"What internal doc covers parental leave?","expected":"Parental leave, step by step","metadata":{"budgetClass":"voice","deadlineMs":579,"thinkMs":80,"latencyMs":{"lookup":114,"calendar_get":139,"search_docs":214},"fixtures":{"directory":{"Yuki Tanaka":{"extension":"3094","room":"2C"},"Amara Okafor":{"extension":"9840","room":"Garden-A"},"Omar Farouk":{"extension":"3245","room":"North-2"},"David Kim":{"extension":"1512","room":"3B"}},"docs":[{"title":"Parental leave, step by step","topic":"parental leave","author":"Yuki Tanaka"},{"title":"Refunds within 14 days","topic":"refund window","author":"Amara Okafor"},{"title":"Where each team sits","topic":"seating plan","author":"Amara Okafor"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"parental leave"}}],"candidates":["Parental leave, step by step","Refunds within 14 days","Where each team sits"],"seed":20261389}}
7
+ {"id":"voice-07","kind":"episode","prompt":"Give me Ravi Menon's phone extension.","expected":"4292","metadata":{"budgetClass":"voice","deadlineMs":619,"thinkMs":80,"latencyMs":{"lookup":197,"calendar_get":146,"search_docs":163},"fixtures":{"directory":{"Ravi Menon":{"extension":"4292","room":"North-2"},"Marco Silva":{"extension":"5312","room":"North-2"},"David Kim":{"extension":"1945","room":"Atrium-1"},"Grace Mwangi":{"extension":"2394","room":"West-3"}}},"minimalCalls":[{"name":"lookup","args":{"key":"Ravi Menon"}}],"candidates":["4292","5312","1945","2394"],"seed":20261372}}
8
+ {"id":"voice-08","kind":"episode","prompt":"Where does Demo Friday take place on 2026-11-03?","expected":"Focus-4","metadata":{"budgetClass":"voice","deadlineMs":488,"thinkMs":80,"latencyMs":{"lookup":164,"calendar_get":123,"search_docs":172},"fixtures":{"directory":{"Priya Nair":{"extension":"7888","room":"West-3"},"Sofia Marchetti":{"extension":"2382","room":"Focus-4"},"Jonas Lindqvist":{"extension":"1333","room":"1D"},"Fatima Diallo":{"extension":"9373","room":"West-3"}},"calendar":{"2026-11-03":[{"event":"Demo Friday","room":"Focus-4","organizer":"Priya Nair"},{"event":"Sprint review","room":"West-3","organizer":"Sofia Marchetti"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-03"}}],"candidates":["Focus-4","West-3"],"seed":20261298}}
9
+ {"id":"voice-09","kind":"episode","prompt":"What internal doc covers expense policy?","expected":"Expensing travel the simple way","metadata":{"budgetClass":"voice","deadlineMs":488,"thinkMs":80,"latencyMs":{"lookup":115,"calendar_get":187,"search_docs":131},"fixtures":{"directory":{"Amara Okafor":{"extension":"9110","room":"West-3"},"David Kim":{"extension":"2811","room":"3B"},"Yuki Tanaka":{"extension":"7127","room":"2C"},"Tomas Ribeiro":{"extension":"6577","room":"2C"}},"docs":[{"title":"Expensing travel the simple way","topic":"expense policy","author":"Amara Okafor"},{"title":"Parental leave, step by step","topic":"parental leave","author":"David Kim"},{"title":"Refunds within 14 days","topic":"refund window","author":"David Kim"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"expense policy"}}],"candidates":["Expensing travel the simple way","Parental leave, step by step","Refunds within 14 days"],"seed":20261306}}
10
+ {"id":"voice-10","kind":"episode","prompt":"Give me Sofia Marchetti's phone extension.","expected":"5040","metadata":{"budgetClass":"voice","deadlineMs":536,"thinkMs":80,"latencyMs":{"lookup":188,"calendar_get":104,"search_docs":180},"fixtures":{"directory":{"Sofia Marchetti":{"extension":"5040","room":"West-3"},"Fatima Diallo":{"extension":"5537","room":"2C"},"Amara Okafor":{"extension":"5363","room":"1D"},"Marco Silva":{"extension":"3288","room":"Atrium-1"}}},"minimalCalls":[{"name":"lookup","args":{"key":"Sofia Marchetti"}}],"candidates":["5040","5537","5363","3288"],"seed":20261363}}
11
+ {"id":"voice-11","kind":"episode","prompt":"Where does Onboarding take place on 2026-11-09?","expected":"West-3","metadata":{"budgetClass":"voice","deadlineMs":544,"thinkMs":80,"latencyMs":{"lookup":124,"calendar_get":198,"search_docs":206},"fixtures":{"directory":{"Marco Silva":{"extension":"2401","room":"Atrium-1"},"Yuki Tanaka":{"extension":"6430","room":"West-3"},"Sofia Marchetti":{"extension":"1424","room":"West-3"},"Grace Mwangi":{"extension":"1225","room":"Garden-A"}},"calendar":{"2026-11-09":[{"event":"Onboarding","room":"West-3","organizer":"Marco Silva"},{"event":"Demo Friday","room":"Focus-4","organizer":"Yuki Tanaka"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-09"}}],"candidates":["West-3","Focus-4"],"seed":20261373}}
12
+ {"id":"voice-12","kind":"episode","prompt":"Which internal doc explains data retention?","expected":"Keeping customer data for 30 days","metadata":{"budgetClass":"voice","deadlineMs":625,"thinkMs":80,"latencyMs":{"lookup":105,"calendar_get":176,"search_docs":219},"fixtures":{"directory":{"Ravi Menon":{"extension":"3802","room":"1D"},"Fatima Diallo":{"extension":"2164","room":"3B"},"Sofia Marchetti":{"extension":"7996","room":"1D"},"Ella Novak":{"extension":"2209","room":"1D"}},"docs":[{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Ravi Menon"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Fatima Diallo"},{"title":"Who to page when prod is down","topic":"incident response","author":"Fatima Diallo"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"data retention"}}],"candidates":["Keeping customer data for 30 days","Parental leave, step by step","Who to page when prod is down"],"seed":20261394}}
13
+ {"id":"ui-01","kind":"episode","prompt":"Who organizes Onboarding on 2026-11-06, and what is their extension?","expected":"1266","metadata":{"budgetClass":"ui","deadlineMs":1316,"thinkMs":80,"latencyMs":{"lookup":211,"calendar_get":249,"search_docs":285},"fixtures":{"directory":{"David Kim":{"extension":"1266","room":"West-3"},"Marco Silva":{"extension":"3310","room":"North-2"},"Priya Nair":{"extension":"9542","room":"Focus-4"},"Tomas Ribeiro":{"extension":"4706","room":"Garden-A"},"Ella Novak":{"extension":"9239","room":"Garden-A"}},"calendar":{"2026-11-06":[{"event":"Onboarding","room":"2C","organizer":"David Kim"},{"event":"Support handoff","room":"3B","organizer":"Marco Silva"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-06"}},{"name":"lookup","args":{"key":"David Kim"}}],"candidates":["1266","3310","9542","4706","9239"],"seed":20261715}}
14
+ {"id":"ui-02","kind":"episode","prompt":"What is the phone extension of the author of the doc about vpn setup?","expected":"2662","metadata":{"budgetClass":"ui","deadlineMs":1342,"thinkMs":80,"latencyMs":{"lookup":243,"calendar_get":261,"search_docs":255},"fixtures":{"directory":{"Tomas Ribeiro":{"extension":"2662","room":"West-3"},"Lina Haddad":{"extension":"2518","room":"3B"},"Grace Mwangi":{"extension":"4649","room":"1D"},"Ravi Menon":{"extension":"6593","room":"3B"},"Marco Silva":{"extension":"9973","room":"Atrium-1"}},"docs":[{"title":"Connect to the office VPN","topic":"vpn setup","author":"Tomas Ribeiro"},{"title":"Who to page when prod is down","topic":"incident response","author":"Lina Haddad"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Grace Mwangi"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Ravi Menon"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"vpn setup"}},{"name":"lookup","args":{"key":"Tomas Ribeiro"}}],"candidates":["2662","2518","4649","6593","9973"],"seed":20261753}}
15
+ {"id":"ui-03","kind":"episode","prompt":"What is the phone extension of the organizer of Sprint review on 2026-11-11?","expected":"5181","metadata":{"budgetClass":"ui","deadlineMs":1494,"thinkMs":80,"latencyMs":{"lookup":246,"calendar_get":308,"search_docs":194},"fixtures":{"directory":{"Amara Okafor":{"extension":"5181","room":"Garden-A"},"Jonas Lindqvist":{"extension":"2517","room":"2C"},"Ella Novak":{"extension":"1853","room":"North-2"},"Kenji Sato":{"extension":"1622","room":"3B"},"Omar Farouk":{"extension":"5971","room":"1D"}},"calendar":{"2026-11-11":[{"event":"Sprint review","room":"3B","organizer":"Amara Okafor"},{"event":"Support handoff","room":"Garden-A","organizer":"Jonas Lindqvist"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-11"}},{"name":"lookup","args":{"key":"Amara Okafor"}}],"candidates":["5181","2517","1853","1622","5971"],"seed":20261809}}
16
+ {"id":"ui-04","kind":"episode","prompt":"What extension does the author of the doc on editor shortcuts have?","expected":"8030","metadata":{"budgetClass":"ui","deadlineMs":1341,"thinkMs":80,"latencyMs":{"lookup":245,"calendar_get":257,"search_docs":314},"fixtures":{"directory":{"Omar Farouk":{"extension":"8030","room":"Atrium-1"},"Ana Petrova":{"extension":"9942","room":"3B"},"Yuki Tanaka":{"extension":"2814","room":"Garden-A"},"Ravi Menon":{"extension":"3104","room":"2C"},"Priya Nair":{"extension":"4677","room":"West-3"}},"docs":[{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Omar Farouk"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Ana Petrova"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Yuki Tanaka"},{"title":"Who to page when prod is down","topic":"incident response","author":"Ravi Menon"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"editor shortcuts"}},{"name":"lookup","args":{"key":"Omar Farouk"}}],"candidates":["8030","9942","2814","3104","4677"],"seed":20261814}}
17
+ {"id":"ui-05","kind":"episode","prompt":"Extension of the organizer for Design crit on 2026-11-05?","expected":"7295","metadata":{"budgetClass":"ui","deadlineMs":938,"thinkMs":80,"latencyMs":{"lookup":140,"calendar_get":159,"search_docs":325},"fixtures":{"directory":{"Omar Farouk":{"extension":"7295","room":"North-2"},"Lina Haddad":{"extension":"9044","room":"3B"},"Tomas Ribeiro":{"extension":"8311","room":"Focus-4"},"Ana Petrova":{"extension":"5214","room":"North-2"},"Kenji Sato":{"extension":"5035","room":"1D"}},"calendar":{"2026-11-05":[{"event":"Design crit","room":"North-2","organizer":"Omar Farouk"},{"event":"Support handoff","room":"Focus-4","organizer":"Lina Haddad"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-05"}},{"name":"lookup","args":{"key":"Omar Farouk"}}],"candidates":["7295","9044","8311","5214","5035"],"seed":20261554}}
18
+ {"id":"ui-06","kind":"episode","prompt":"What extension does the author of the doc on vpn setup have?","expected":"9013","metadata":{"budgetClass":"ui","deadlineMs":1475,"thinkMs":80,"latencyMs":{"lookup":269,"calendar_get":314,"search_docs":341},"fixtures":{"directory":{"Omar Farouk":{"extension":"9013","room":"Focus-4"},"Ana Petrova":{"extension":"5344","room":"West-3"},"Lina Haddad":{"extension":"3785","room":"Atrium-1"},"Yuki Tanaka":{"extension":"3368","room":"3B"},"Amara Okafor":{"extension":"4626","room":"Garden-A"}},"docs":[{"title":"Connect to the office VPN","topic":"vpn setup","author":"Omar Farouk"},{"title":"Who to page when prod is down","topic":"incident response","author":"Ana Petrova"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Lina Haddad"},{"title":"Where each team sits","topic":"seating plan","author":"Yuki Tanaka"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"vpn setup"}},{"name":"lookup","args":{"key":"Omar Farouk"}}],"candidates":["9013","5344","3785","3368","4626"],"seed":20261865}}
19
+ {"id":"ui-07","kind":"episode","prompt":"What is the phone extension of the organizer of Roadmap sync on 2026-11-02?","expected":"1660","metadata":{"budgetClass":"ui","deadlineMs":1396,"thinkMs":80,"latencyMs":{"lookup":239,"calendar_get":275,"search_docs":240},"fixtures":{"directory":{"Marco Silva":{"extension":"1660","room":"1D"},"Priya Nair":{"extension":"8499","room":"1D"},"Kenji Sato":{"extension":"2413","room":"3B"},"Sofia Marchetti":{"extension":"7259","room":"2C"},"Ana Petrova":{"extension":"1763","room":"Focus-4"}},"calendar":{"2026-11-02":[{"event":"Roadmap sync","room":"Atrium-1","organizer":"Marco Silva"},{"event":"Retro","room":"3B","organizer":"Priya Nair"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-02"}},{"name":"lookup","args":{"key":"Marco Silva"}}],"candidates":["1660","8499","2413","7259","1763"],"seed":20261769}}
20
+ {"id":"ui-08","kind":"episode","prompt":"Who wrote the doc about parental leave, and what is their extension?","expected":"9594","metadata":{"budgetClass":"ui","deadlineMs":1439,"thinkMs":80,"latencyMs":{"lookup":292,"calendar_get":246,"search_docs":359},"fixtures":{"directory":{"Priya Nair":{"extension":"9594","room":"Atrium-1"},"Grace Mwangi":{"extension":"7922","room":"Atrium-1"},"Jonas Lindqvist":{"extension":"4334","room":"Focus-4"},"Lina Haddad":{"extension":"7324","room":"1D"},"Ella Novak":{"extension":"7817","room":"2C"}},"docs":[{"title":"Parental leave, step by step","topic":"parental leave","author":"Priya Nair"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Grace Mwangi"},{"title":"Refunds within 14 days","topic":"refund window","author":"Jonas Lindqvist"},{"title":"Connect to the office VPN","topic":"vpn setup","author":"Lina Haddad"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"parental leave"}},{"name":"lookup","args":{"key":"Priya Nair"}}],"candidates":["9594","7922","4334","7324","7817"],"seed":20261906}}
21
+ {"id":"ui-09","kind":"episode","prompt":"Who organizes Sprint review on 2026-11-12, and what is their extension?","expected":"6017","metadata":{"budgetClass":"ui","deadlineMs":1244,"thinkMs":80,"latencyMs":{"lookup":286,"calendar_get":187,"search_docs":319},"fixtures":{"directory":{"Fatima Diallo":{"extension":"6017","room":"3B"},"David Kim":{"extension":"5238","room":"North-2"},"Ella Novak":{"extension":"9856","room":"3B"},"Tomas Ribeiro":{"extension":"7970","room":"2C"},"Ana Petrova":{"extension":"3179","room":"2C"}},"calendar":{"2026-11-12":[{"event":"Sprint review","room":"Garden-A","organizer":"Fatima Diallo"},{"event":"Sprint review","room":"Garden-A","organizer":"David Kim"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-12"}},{"name":"lookup","args":{"key":"Fatima Diallo"}}],"candidates":["6017","5238","9856","7970","3179"],"seed":20261728}}
22
+ {"id":"ui-10","kind":"episode","prompt":"What extension does the author of the doc on seating plan have?","expected":"4532","metadata":{"budgetClass":"ui","deadlineMs":875,"thinkMs":80,"latencyMs":{"lookup":159,"calendar_get":215,"search_docs":181},"fixtures":{"directory":{"Marco Silva":{"extension":"4532","room":"West-3"},"Sofia Marchetti":{"extension":"6640","room":"3B"},"Priya Nair":{"extension":"1403","room":"3B"},"Ravi Menon":{"extension":"6378","room":"3B"},"Ella Novak":{"extension":"7344","room":"1D"}},"docs":[{"title":"Where each team sits","topic":"seating plan","author":"Marco Silva"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Sofia Marchetti"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Priya Nair"},{"title":"Who to page when prod is down","topic":"incident response","author":"Ravi Menon"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"seating plan"}},{"name":"lookup","args":{"key":"Marco Silva"}}],"candidates":["4532","6640","1403","6378","7344"],"seed":20261595}}
23
+ {"id":"ui-11","kind":"episode","prompt":"Who organizes Onboarding on 2026-11-04, and what is their extension?","expected":"7666","metadata":{"budgetClass":"ui","deadlineMs":1129,"thinkMs":80,"latencyMs":{"lookup":182,"calendar_get":167,"search_docs":265},"fixtures":{"directory":{"Amara Okafor":{"extension":"7666","room":"Focus-4"},"David Kim":{"extension":"5885","room":"Atrium-1"},"Sofia Marchetti":{"extension":"9879","room":"2C"},"Marco Silva":{"extension":"4579","room":"Atrium-1"},"Ana Petrova":{"extension":"8225","room":"Atrium-1"}},"calendar":{"2026-11-04":[{"event":"Onboarding","room":"Atrium-1","organizer":"Amara Okafor"},{"event":"Onboarding","room":"2C","organizer":"David Kim"}]}},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-04"}},{"name":"lookup","args":{"key":"Amara Okafor"}}],"candidates":["7666","5885","9879","4579","8225"],"seed":20261604}}
24
+ {"id":"ui-12","kind":"episode","prompt":"What extension does the author of the doc on data retention have?","expected":"4055","metadata":{"budgetClass":"ui","deadlineMs":1036,"thinkMs":80,"latencyMs":{"lookup":214,"calendar_get":161,"search_docs":214},"fixtures":{"directory":{"Priya Nair":{"extension":"4055","room":"West-3"},"Yuki Tanaka":{"extension":"3883","room":"1D"},"Kenji Sato":{"extension":"1212","room":"Garden-A"},"Sofia Marchetti":{"extension":"5327","room":"West-3"},"Ravi Menon":{"extension":"5357","room":"1D"}},"docs":[{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Priya Nair"},{"title":"Where each team sits","topic":"seating plan","author":"Yuki Tanaka"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Kenji Sato"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Sofia Marchetti"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"data retention"}},{"name":"lookup","args":{"key":"Priya Nair"}}],"candidates":["4055","3883","1212","5327","5357"],"seed":20261683}}
25
+ {"id":"bg-01","kind":"episode","prompt":"Find the internal doc covering Roadmap sync on 2026-11-04; what extension does its author have?","expected":"8751","metadata":{"budgetClass":"background","deadlineMs":3446,"thinkMs":80,"latencyMs":{"lookup":660,"calendar_get":493,"search_docs":615},"fixtures":{"directory":{"Ella Novak":{"extension":"8751","room":"Atrium-1"},"Ravi Menon":{"extension":"2293","room":"1D"},"Priya Nair":{"extension":"5114","room":"North-2"},"Ana Petrova":{"extension":"2495","room":"2C"},"Grace Mwangi":{"extension":"9915","room":"3B"},"Yuki Tanaka":{"extension":"4887","room":"Garden-A"}},"calendar":{"2026-11-04":[{"event":"Roadmap sync","room":"Atrium-1","organizer":"Ravi Menon","topic":"parental leave"}]},"docs":[{"title":"Parental leave, step by step","topic":"parental leave","author":"Ella Novak"},{"title":"Refunds within 14 days","topic":"refund window","author":"Ravi Menon"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Priya Nair"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Ana Petrova"},{"title":"Who to page when prod is down","topic":"incident response","author":"Grace Mwangi"}]},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-04"}},{"name":"search_docs","args":{"query":"parental leave"}},{"name":"lookup","args":{"key":"Ella Novak"}}],"candidates":["8751","2293","5114","2495","9915","4887"],"seed":20263103}}
26
+ {"id":"bg-02","kind":"episode","prompt":"A doc about vpn setup mentions an event. What is the phone extension of that event's organizer?","expected":"9366","metadata":{"budgetClass":"background","deadlineMs":2644,"thinkMs":80,"latencyMs":{"lookup":466,"calendar_get":275,"search_docs":599},"fixtures":{"directory":{"David Kim":{"extension":"9366","room":"1D"},"Kenji Sato":{"extension":"1742","room":"West-3"},"Ana Petrova":{"extension":"6007","room":"3B"},"Yuki Tanaka":{"extension":"7712","room":"Garden-A"},"Amara Okafor":{"extension":"7969","room":"Focus-4"},"Marco Silva":{"extension":"4085","room":"Atrium-1"}},"calendar":{"2026-11-12":[{"event":"Release train","room":"2C","organizer":"David Kim"}]},"docs":[{"title":"Connect to the office VPN","topic":"vpn setup","author":"Kenji Sato","event":"Release train","date":"2026-11-12"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Ana Petrova"},{"title":"Refunds within 14 days","topic":"refund window","author":"Yuki Tanaka"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Amara Okafor"},{"title":"Who to page when prod is down","topic":"incident response","author":"Marco Silva"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"vpn setup"}},{"name":"calendar_get","args":{"date":"2026-11-12"}},{"name":"lookup","args":{"key":"David Kim"}}],"candidates":["9366","1742","6007","7712","7969","4085"],"seed":20262675}}
27
+ {"id":"bg-03","kind":"episode","prompt":"The internal doc on Sprint review for 2026-11-02 has an author. What is their extension?","expected":"7214","metadata":{"budgetClass":"background","deadlineMs":3194,"thinkMs":80,"latencyMs":{"lookup":604,"calendar_get":352,"search_docs":660},"fixtures":{"directory":{"Priya Nair":{"extension":"7214","room":"2C"},"Ella Novak":{"extension":"2303","room":"West-3"},"Fatima Diallo":{"extension":"9946","room":"West-3"},"Kenji Sato":{"extension":"6705","room":"3B"},"David Kim":{"extension":"3324","room":"West-3"},"Tomas Ribeiro":{"extension":"3774","room":"Garden-A"}},"calendar":{"2026-11-02":[{"event":"Sprint review","room":"3B","organizer":"Ella Novak","topic":"incident response"}]},"docs":[{"title":"Who to page when prod is down","topic":"incident response","author":"Priya Nair"},{"title":"Where each team sits","topic":"seating plan","author":"Ella Novak"},{"title":"Refunds within 14 days","topic":"refund window","author":"Fatima Diallo"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Kenji Sato"},{"title":"Parental leave, step by step","topic":"parental leave","author":"David Kim"}]},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-02"}},{"name":"search_docs","args":{"query":"incident response"}},{"name":"lookup","args":{"key":"Priya Nair"}}],"candidates":["7214","2303","9946","6705","3324","3774"],"seed":20262951}}
28
+ {"id":"bg-04","kind":"episode","prompt":"A doc about vpn setup mentions an event. What is the phone extension of that event's organizer?","expected":"3734","metadata":{"budgetClass":"background","deadlineMs":2991,"thinkMs":80,"latencyMs":{"lookup":493,"calendar_get":608,"search_docs":295},"fixtures":{"directory":{"Jonas Lindqvist":{"extension":"3734","room":"2C"},"Ella Novak":{"extension":"8869","room":"3B"},"Ravi Menon":{"extension":"4808","room":"2C"},"Yuki Tanaka":{"extension":"4756","room":"1D"},"Omar Farouk":{"extension":"5119","room":"2C"},"Tomas Ribeiro":{"extension":"4530","room":"North-2"}},"calendar":{"2026-11-04":[{"event":"Roadmap sync","room":"Garden-A","organizer":"Jonas Lindqvist"}]},"docs":[{"title":"Connect to the office VPN","topic":"vpn setup","author":"Ella Novak","event":"Roadmap sync","date":"2026-11-04"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Ravi Menon"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Yuki Tanaka"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Omar Farouk"},{"title":"Where each team sits","topic":"seating plan","author":"Tomas Ribeiro"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"vpn setup"}},{"name":"calendar_get","args":{"date":"2026-11-04"}},{"name":"lookup","args":{"key":"Jonas Lindqvist"}}],"candidates":["3734","8869","4808","4756","5119","4530"],"seed":20262731}}
29
+ {"id":"bg-05","kind":"episode","prompt":"The internal doc on Design crit for 2026-11-06 has an author. What is their extension?","expected":"4320","metadata":{"budgetClass":"background","deadlineMs":3589,"thinkMs":80,"latencyMs":{"lookup":638,"calendar_get":513,"search_docs":658},"fixtures":{"directory":{"Kenji Sato":{"extension":"4320","room":"2C"},"Grace Mwangi":{"extension":"4496","room":"Focus-4"},"David Kim":{"extension":"7927","room":"Garden-A"},"Marco Silva":{"extension":"7650","room":"1D"},"Tomas Ribeiro":{"extension":"5400","room":"Garden-A"},"Jonas Lindqvist":{"extension":"3954","room":"Atrium-1"}},"calendar":{"2026-11-06":[{"event":"Design crit","room":"Atrium-1","organizer":"Grace Mwangi","topic":"data retention"}]},"docs":[{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Kenji Sato"},{"title":"Where each team sits","topic":"seating plan","author":"Grace Mwangi"},{"title":"Connect to the office VPN","topic":"vpn setup","author":"David Kim"},{"title":"Refunds within 14 days","topic":"refund window","author":"Marco Silva"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Tomas Ribeiro"}]},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-06"}},{"name":"search_docs","args":{"query":"data retention"}},{"name":"lookup","args":{"key":"Kenji Sato"}}],"candidates":["4320","4496","7927","7650","5400","3954"],"seed":20263144}}
30
+ {"id":"bg-06","kind":"episode","prompt":"The doc on vpn setup names an event. What extension does its organizer have?","expected":"3488","metadata":{"budgetClass":"background","deadlineMs":3283,"thinkMs":80,"latencyMs":{"lookup":600,"calendar_get":508,"search_docs":602},"fixtures":{"directory":{"Marco Silva":{"extension":"3488","room":"Atrium-1"},"David Kim":{"extension":"1277","room":"West-3"},"Ella Novak":{"extension":"7560","room":"North-2"},"Amara Okafor":{"extension":"8306","room":"1D"},"Grace Mwangi":{"extension":"2593","room":"Focus-4"},"Omar Farouk":{"extension":"4143","room":"Focus-4"}},"calendar":{"2026-11-13":[{"event":"Support handoff","room":"Atrium-1","organizer":"Marco Silva"}]},"docs":[{"title":"Connect to the office VPN","topic":"vpn setup","author":"David Kim","event":"Support handoff","date":"2026-11-13"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Ella Novak"},{"title":"Refunds within 14 days","topic":"refund window","author":"Amara Okafor"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Grace Mwangi"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Omar Farouk"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"vpn setup"}},{"name":"calendar_get","args":{"date":"2026-11-13"}},{"name":"lookup","args":{"key":"Marco Silva"}}],"candidates":["3488","1277","7560","8306","2593","4143"],"seed":20263045}}
31
+ {"id":"bg-07","kind":"episode","prompt":"Find the internal doc covering Roadmap sync on 2026-11-09; what extension does its author have?","expected":"2253","metadata":{"budgetClass":"background","deadlineMs":2553,"thinkMs":80,"latencyMs":{"lookup":366,"calendar_get":641,"search_docs":293},"fixtures":{"directory":{"Grace Mwangi":{"extension":"2253","room":"North-2"},"Sofia Marchetti":{"extension":"5927","room":"North-2"},"Priya Nair":{"extension":"2524","room":"North-2"},"David Kim":{"extension":"2314","room":"2C"},"Lina Haddad":{"extension":"3363","room":"2C"},"Jonas Lindqvist":{"extension":"6368","room":"Atrium-1"}},"calendar":{"2026-11-09":[{"event":"Roadmap sync","room":"3B","organizer":"Sofia Marchetti","topic":"incident response"}]},"docs":[{"title":"Who to page when prod is down","topic":"incident response","author":"Grace Mwangi"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Sofia Marchetti"},{"title":"Where each team sits","topic":"seating plan","author":"Priya Nair"},{"title":"Connect to the office VPN","topic":"vpn setup","author":"David Kim"},{"title":"Refunds within 14 days","topic":"refund window","author":"Lina Haddad"}]},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-09"}},{"name":"search_docs","args":{"query":"incident response"}},{"name":"lookup","args":{"key":"Grace Mwangi"}}],"candidates":["2253","5927","2524","2314","3363","6368"],"seed":20262635}}
32
+ {"id":"bg-08","kind":"episode","prompt":"Read the doc about parental leave and give me the extension of the organizer of the event it mentions.","expected":"5055","metadata":{"budgetClass":"background","deadlineMs":2606,"thinkMs":80,"latencyMs":{"lookup":415,"calendar_get":531,"search_docs":263},"fixtures":{"directory":{"Grace Mwangi":{"extension":"5055","room":"North-2"},"Jonas Lindqvist":{"extension":"7862","room":"1D"},"Kenji Sato":{"extension":"1601","room":"Focus-4"},"Lina Haddad":{"extension":"9378","room":"2C"},"Amara Okafor":{"extension":"3632","room":"Garden-A"},"Ana Petrova":{"extension":"1714","room":"1D"}},"calendar":{"2026-11-09":[{"event":"Sprint review","room":"West-3","organizer":"Grace Mwangi"}]},"docs":[{"title":"Parental leave, step by step","topic":"parental leave","author":"Jonas Lindqvist","event":"Sprint review","date":"2026-11-09"},{"title":"Refunds within 14 days","topic":"refund window","author":"Kenji Sato"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Lina Haddad"},{"title":"Who to page when prod is down","topic":"incident response","author":"Amara Okafor"},{"title":"Connect to the office VPN","topic":"vpn setup","author":"Ana Petrova"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"parental leave"}},{"name":"calendar_get","args":{"date":"2026-11-09"}},{"name":"lookup","args":{"key":"Grace Mwangi"}}],"candidates":["5055","7862","1601","9378","3632","1714"],"seed":20262544}}
33
+ {"id":"bg-09","kind":"episode","prompt":"Find the internal doc covering Demo Friday on 2026-11-02; what extension does its author have?","expected":"1111","metadata":{"budgetClass":"background","deadlineMs":3714,"thinkMs":80,"latencyMs":{"lookup":459,"calendar_get":694,"search_docs":676},"fixtures":{"directory":{"Grace Mwangi":{"extension":"1111","room":"Garden-A"},"Omar Farouk":{"extension":"5932","room":"Atrium-1"},"Sofia Marchetti":{"extension":"8536","room":"Focus-4"},"Yuki Tanaka":{"extension":"6542","room":"Atrium-1"},"Ella Novak":{"extension":"3877","room":"West-3"},"Fatima Diallo":{"extension":"2253","room":"Garden-A"}},"calendar":{"2026-11-02":[{"event":"Demo Friday","room":"3B","organizer":"Omar Farouk","topic":"refund window"}]},"docs":[{"title":"Refunds within 14 days","topic":"refund window","author":"Grace Mwangi"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Omar Farouk"},{"title":"Connect to the office VPN","topic":"vpn setup","author":"Sofia Marchetti"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Yuki Tanaka"},{"title":"Where each team sits","topic":"seating plan","author":"Ella Novak"}]},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-02"}},{"name":"search_docs","args":{"query":"refund window"}},{"name":"lookup","args":{"key":"Grace Mwangi"}}],"candidates":["1111","5932","8536","6542","3877","2253"],"seed":20263164}}
34
+ {"id":"bg-10","kind":"episode","prompt":"Read the doc about incident response and give me the extension of the organizer of the event it mentions.","expected":"3903","metadata":{"budgetClass":"background","deadlineMs":2025,"thinkMs":80,"latencyMs":{"lookup":270,"calendar_get":458,"search_docs":279},"fixtures":{"directory":{"Jonas Lindqvist":{"extension":"3903","room":"Atrium-1"},"Omar Farouk":{"extension":"2713","room":"2C"},"Yuki Tanaka":{"extension":"5153","room":"1D"},"Priya Nair":{"extension":"7887","room":"2C"},"Kenji Sato":{"extension":"7610","room":"3B"},"Tomas Ribeiro":{"extension":"3129","room":"1D"}},"calendar":{"2026-11-03":[{"event":"Sprint review","room":"2C","organizer":"Jonas Lindqvist"}]},"docs":[{"title":"Who to page when prod is down","topic":"incident response","author":"Omar Farouk","event":"Sprint review","date":"2026-11-03"},{"title":"Parental leave, step by step","topic":"parental leave","author":"Yuki Tanaka"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Priya Nair"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Kenji Sato"},{"title":"Connect to the office VPN","topic":"vpn setup","author":"Tomas Ribeiro"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"incident response"}},{"name":"calendar_get","args":{"date":"2026-11-03"}},{"name":"lookup","args":{"key":"Jonas Lindqvist"}}],"candidates":["3903","2713","5153","7887","7610","3129"],"seed":20262342}}
35
+ {"id":"bg-11","kind":"episode","prompt":"What is the phone extension of the author of the internal doc covering the topic of Sprint review on 2026-11-03?","expected":"9967","metadata":{"budgetClass":"background","deadlineMs":3070,"thinkMs":80,"latencyMs":{"lookup":518,"calendar_get":335,"search_docs":637},"fixtures":{"directory":{"Marco Silva":{"extension":"9967","room":"2C"},"Ravi Menon":{"extension":"5377","room":"2C"},"Fatima Diallo":{"extension":"3773","room":"Garden-A"},"Ella Novak":{"extension":"5883","room":"West-3"},"Priya Nair":{"extension":"6786","room":"1D"},"Grace Mwangi":{"extension":"3887","room":"Atrium-1"}},"calendar":{"2026-11-03":[{"event":"Sprint review","room":"1D","organizer":"Ravi Menon","topic":"vpn setup"}]},"docs":[{"title":"Connect to the office VPN","topic":"vpn setup","author":"Marco Silva"},{"title":"Refunds within 14 days","topic":"refund window","author":"Ravi Menon"},{"title":"Ten shortcuts for the editor","topic":"editor shortcuts","author":"Fatima Diallo"},{"title":"Where each team sits","topic":"seating plan","author":"Ella Novak"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Priya Nair"}]},"minimalCalls":[{"name":"calendar_get","args":{"date":"2026-11-03"}},{"name":"search_docs","args":{"query":"vpn setup"}},{"name":"lookup","args":{"key":"Marco Silva"}}],"candidates":["9967","5377","3773","5883","6786","3887"],"seed":20262825}}
36
+ {"id":"bg-12","kind":"episode","prompt":"A doc about parental leave mentions an event. What is the phone extension of that event's organizer?","expected":"8843","metadata":{"budgetClass":"background","deadlineMs":3476,"thinkMs":80,"latencyMs":{"lookup":546,"calendar_get":588,"search_docs":635},"fixtures":{"directory":{"David Kim":{"extension":"8843","room":"West-3"},"Ella Novak":{"extension":"1641","room":"Atrium-1"},"Omar Farouk":{"extension":"7356","room":"Atrium-1"},"Lina Haddad":{"extension":"6821","room":"Garden-A"},"Ana Petrova":{"extension":"8391","room":"3B"},"Ravi Menon":{"extension":"9405","room":"Focus-4"}},"calendar":{"2026-11-11":[{"event":"Design crit","room":"2C","organizer":"David Kim"}]},"docs":[{"title":"Parental leave, step by step","topic":"parental leave","author":"Ella Novak","event":"Design crit","date":"2026-11-11"},{"title":"Keeping customer data for 30 days","topic":"data retention","author":"Omar Farouk"},{"title":"Where each team sits","topic":"seating plan","author":"Lina Haddad"},{"title":"Refunds within 14 days","topic":"refund window","author":"Ana Petrova"},{"title":"Expensing travel the simple way","topic":"expense policy","author":"Ravi Menon"}]},"minimalCalls":[{"name":"search_docs","args":{"query":"parental leave"}},{"name":"calendar_get","args":{"date":"2026-11-11"}},{"name":"lookup","args":{"key":"David Kim"}}],"candidates":["8843","1641","7356","6821","8391","9405"],"seed":20263104}}
package/dist/api.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { Benchmark, Task } from 'benchmark-core';
2
+
3
+ /**
4
+ * Fetch-style handler over the core routes. For `POST /v1/score` the
5
+ * submission's self-reported measured clock is stripped before grading (a
6
+ * caller cannot prove its wall-clock turn times) and the response gains a
7
+ * `latency` timing block: deadlineMs, totalTimeMs, modelMs, toolMs,
8
+ * modelTurns, clock, onTime, lateButCorrect.
9
+ */
10
+ declare function createApi(bench?: Benchmark<Task>): (request: Request) => Promise<Response>;
11
+ declare const handler: (request: Request) => Promise<Response>;
12
+
13
+ export { createApi, handler };
package/dist/api.js ADDED
@@ -0,0 +1,10 @@
1
+ import {
2
+ createApi,
3
+ handler
4
+ } from "./chunk-65SHHDK7.js";
5
+ import "./chunk-MRKAHJN3.js";
6
+ export {
7
+ createApi,
8
+ handler
9
+ };
10
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}