peeksafe 0.0.0-stage → 0.2.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/CHANGELOG.md +325 -0
- package/LICENSE +190 -0
- package/NOTICE +78 -0
- package/README.md +490 -2
- package/RESEARCH-NOTES.md +274 -0
- package/dist/baseline.d.ts +45 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +49 -0
- package/dist/baseline.js.map +1 -0
- package/dist/check.d.ts +64 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +172 -0
- package/dist/check.js.map +1 -0
- package/dist/cluster.d.ts +328 -0
- package/dist/cluster.d.ts.map +1 -0
- package/dist/cluster.js +606 -0
- package/dist/cluster.js.map +1 -0
- package/dist/errors.d.ts +108 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +192 -0
- package/dist/errors.js.map +1 -0
- package/dist/evidence.d.ts +15 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +30 -0
- package/dist/evidence.js.map +1 -0
- package/dist/frontier.d.ts +271 -0
- package/dist/frontier.d.ts.map +1 -0
- package/dist/frontier.js +505 -0
- package/dist/frontier.js.map +1 -0
- package/dist/gate.d.ts +175 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +200 -0
- package/dist/gate.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/plan.d.ts +280 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +626 -0
- package/dist/plan.js.map +1 -0
- package/dist/rand.d.ts +17 -0
- package/dist/rand.d.ts.map +1 -0
- package/dist/rand.js +104 -0
- package/dist/rand.js.map +1 -0
- package/dist/stats.d.ts +401 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +1304 -0
- package/dist/stats.js.map +1 -0
- package/dist/stop.d.ts +164 -0
- package/dist/stop.d.ts.map +1 -0
- package/dist/stop.js +270 -0
- package/dist/stop.js.map +1 -0
- package/package.json +62 -3
- package/src/baseline.ts +72 -0
- package/src/check.ts +238 -0
- package/src/cluster.ts +842 -0
- package/src/errors.ts +275 -0
- package/src/evidence.ts +62 -0
- package/src/frontier.ts +837 -0
- package/src/gate.ts +363 -0
- package/src/index.ts +206 -0
- package/src/plan.ts +968 -0
- package/src/rand.ts +137 -0
- package/src/stats.ts +1663 -0
- package/src/stop.ts +464 -0
package/dist/plan.d.ts
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plan.ts: power economics. What will this cost, and can we even detect it?
|
|
3
|
+
*
|
|
4
|
+
* Without a plan, the first sign that a suite cannot be decided is a large bill
|
|
5
|
+
* and no certified case. This module tells you *before* you spend anything, and it will tell you that the honest answer is
|
|
6
|
+
* sometimes "you cannot detect this at any price".
|
|
7
|
+
*
|
|
8
|
+
* The three numbers that matter, per case:
|
|
9
|
+
*
|
|
10
|
+
* 1. **The bar.** e-BH at FDR q over m cases certifies a case on its own only
|
|
11
|
+
* once its e-value clears m/q. That is the target the evidence has to hit.
|
|
12
|
+
*
|
|
13
|
+
* 2. **The ceiling.** `evidenceCeilingLogE`, the limit of the unpaired
|
|
14
|
+
* two-sample e-value as candidate runs go to infinity. Both marginals are
|
|
15
|
+
* the same binomial likelihood under different priors, so everything that
|
|
16
|
+
* grows with n cancels and the Bayes factor converges to the prior density
|
|
17
|
+
* ratio at the observed rate. If the ceiling is under the bar, no number of
|
|
18
|
+
* candidate runs will certify the case. This is not a budget problem and no
|
|
19
|
+
* budget fixes it: **more baseline runs** fix it, by sharpening the null.
|
|
20
|
+
*
|
|
21
|
+
* 3. **The paired alternative.** Re-run the baseline alongside the candidate
|
|
22
|
+
* on the same seed and the null becomes an exact point mass at ½ (a
|
|
23
|
+
* discordant pair points either way with probability exactly one half under
|
|
24
|
+
* "nothing changed"). Nothing is estimated, so nothing caps the evidence:
|
|
25
|
+
* the paired e-value grows linearly in discordant pairs. It costs two runs
|
|
26
|
+
* per observation and it is still, routinely, the cheaper design, and it
|
|
27
|
+
* is the only one that works at all for a case whose ceiling is under the
|
|
28
|
+
* bar.
|
|
29
|
+
*
|
|
30
|
+
* Everything here is a *plan*: it evaluates the mean trajectory (the candidate
|
|
31
|
+
* scores exactly its expected successes). Realised sample counts vary around
|
|
32
|
+
* it.
|
|
33
|
+
*/
|
|
34
|
+
import { type BaselineStat, type CaseRef } from "./baseline.js";
|
|
35
|
+
import { type PairedCounts } from "./stats.js";
|
|
36
|
+
export interface PlanConfig {
|
|
37
|
+
/** the drop we want to be able to detect, in probability units (0.15 = 15 points) */
|
|
38
|
+
mde: number;
|
|
39
|
+
/** suite-level false discovery rate */
|
|
40
|
+
fdr: number;
|
|
41
|
+
/** USD per candidate run */
|
|
42
|
+
costPerRunUsd: number;
|
|
43
|
+
/** milliseconds per run, wall clock, at concurrency 1 */
|
|
44
|
+
msPerRun: number;
|
|
45
|
+
/** how many runs the screening pass spends per case */
|
|
46
|
+
screenRuns: number;
|
|
47
|
+
/**
|
|
48
|
+
* Measured coupling between the paired arms, in [0,1]. 0 means the seeds
|
|
49
|
+
* bought nothing; 1 means perfect common-random-numbers coupling. Measure it
|
|
50
|
+
* with `pairPhi` on a pilot rather than assuming it, and plan at 0 as well
|
|
51
|
+
* so the sensitivity is visible.
|
|
52
|
+
*/
|
|
53
|
+
pairCoupling: number;
|
|
54
|
+
/** how many runs to fan out in parallel, only affects wall time */
|
|
55
|
+
concurrency: number;
|
|
56
|
+
/** beyond this many runs for one case we stop calling it "affordable" */
|
|
57
|
+
runsPerCaseCeiling: number;
|
|
58
|
+
/**
|
|
59
|
+
* Which design the *expected* bill and the screening pass are priced for. A
|
|
60
|
+
* paired observation is two runs, and a paired case's observation count is
|
|
61
|
+
* the pairs `shouldStopPaired` takes to settle it at its coupling; an
|
|
62
|
+
* unpaired case's is the runs `shouldStop` takes to stop it.
|
|
63
|
+
*
|
|
64
|
+
* `undefined` prices each case at its own `PlanCase.design`, and a case with
|
|
65
|
+
* none at the suite's `recommendedDesign`. Setting it prices every case at
|
|
66
|
+
* that one design.
|
|
67
|
+
*/
|
|
68
|
+
design?: "unpaired" | "paired";
|
|
69
|
+
alpha: number;
|
|
70
|
+
beta: number;
|
|
71
|
+
minTrials: number;
|
|
72
|
+
maxTrials: number;
|
|
73
|
+
batchSize: number;
|
|
74
|
+
nullQuantile: number;
|
|
75
|
+
/**
|
|
76
|
+
* The `futilityConfidence` you run `shouldStop` and `shouldStopPaired` at.
|
|
77
|
+
* The expected bill counts the runs or pairs a case takes to stop at this
|
|
78
|
+
* level, so a higher one prices more. `undefined` takes the stopping rules'
|
|
79
|
+
* own default.
|
|
80
|
+
*/
|
|
81
|
+
futilityConfidence?: number;
|
|
82
|
+
}
|
|
83
|
+
export declare const DEFAULT_PLAN: PlanConfig;
|
|
84
|
+
export type Detectability =
|
|
85
|
+
/** the unpaired sequential test can certify this case within the run ceiling */
|
|
86
|
+
"UNPAIRED"
|
|
87
|
+
/** only the paired design can certify it, the unpaired evidence ceiling is under the bar */
|
|
88
|
+
| "PAIRED_ONLY"
|
|
89
|
+
/** the run count is finite but past the ceiling: technically possible, practically not */
|
|
90
|
+
| "TOO_EXPENSIVE"
|
|
91
|
+
/** the case cannot lose `mde` points at all, its baseline rate is not that high */
|
|
92
|
+
| "IMPOSSIBLE";
|
|
93
|
+
export interface PlanCase {
|
|
94
|
+
caseId: string;
|
|
95
|
+
suite: string;
|
|
96
|
+
baseline: {
|
|
97
|
+
successes: number;
|
|
98
|
+
trials: number;
|
|
99
|
+
rate: number;
|
|
100
|
+
};
|
|
101
|
+
/** the rate the alternative sits at: baseline − mde, floored at 0 */
|
|
102
|
+
alternativeRate: number;
|
|
103
|
+
/** log of the e-value a case must reach to be certified on its own evidence */
|
|
104
|
+
barLogE: number;
|
|
105
|
+
/** the limit of the unpaired log e-value as runs → ∞ */
|
|
106
|
+
ceilingLogE: number;
|
|
107
|
+
unpaired: {
|
|
108
|
+
runs: number;
|
|
109
|
+
costUsd: number;
|
|
110
|
+
wallMs: number;
|
|
111
|
+
};
|
|
112
|
+
paired: {
|
|
113
|
+
pairs: number;
|
|
114
|
+
runs: number;
|
|
115
|
+
costUsd: number;
|
|
116
|
+
wallMs: number;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* The coupling `paired` is priced at: `pairPhi` of this case's pilot when
|
|
120
|
+
* `makePlan` was given one, floored at 0, otherwise `config.pairCoupling`.
|
|
121
|
+
*/
|
|
122
|
+
pairCoupling: number;
|
|
123
|
+
detectability: Detectability;
|
|
124
|
+
/**
|
|
125
|
+
* The design to run this case with: of the designs that decide it within
|
|
126
|
+
* `runsPerCaseCeiling`, the one that needs fewer runs, unpaired on a tie.
|
|
127
|
+
* Null when neither does.
|
|
128
|
+
*/
|
|
129
|
+
design: "unpaired" | "paired" | null;
|
|
130
|
+
/**
|
|
131
|
+
* How many baseline runs this case would need for the *unpaired* design to
|
|
132
|
+
* work, or null if it already works. This is the actionable half of an
|
|
133
|
+
* "undetectable" verdict.
|
|
134
|
+
*/
|
|
135
|
+
baselineRunsNeeded: number | null;
|
|
136
|
+
/** what a fixed-N two-proportion design would spend per arm, for comparison */
|
|
137
|
+
fixedNPerArm: number;
|
|
138
|
+
reason: string;
|
|
139
|
+
}
|
|
140
|
+
export interface PlanTotals {
|
|
141
|
+
cases: number;
|
|
142
|
+
/** how many cases each design can actually certify */
|
|
143
|
+
decidableUnpaired: number;
|
|
144
|
+
decidableBest: number;
|
|
145
|
+
/** every case run to certification, unpaired */
|
|
146
|
+
unpairedRuns: number;
|
|
147
|
+
unpairedCostUsd: number;
|
|
148
|
+
/** every case run to certification, paired */
|
|
149
|
+
pairedRuns: number;
|
|
150
|
+
pairedCostUsd: number;
|
|
151
|
+
/** per case, the cheaper of the two designs that can decide it */
|
|
152
|
+
bestRuns: number;
|
|
153
|
+
bestCostUsd: number;
|
|
154
|
+
/** screen everything cheaply, then pay only for what the screen keeps */
|
|
155
|
+
screenedRuns: number;
|
|
156
|
+
screenedCostUsd: number;
|
|
157
|
+
/** the fixed-N design with the same nominal guarantees */
|
|
158
|
+
fixedNRuns: number;
|
|
159
|
+
fixedNCostUsd: number;
|
|
160
|
+
wallMsUnpaired: number;
|
|
161
|
+
wallMsPaired: number;
|
|
162
|
+
wallMsBest: number;
|
|
163
|
+
wallMsScreened: number;
|
|
164
|
+
/** fraction of cases the screen is budgeted to carry through to the full test */
|
|
165
|
+
screenContinueFraction: number;
|
|
166
|
+
/**
|
|
167
|
+
* What one observation of the expected bill costs in runs, averaged over its
|
|
168
|
+
* cases: 1 when every case runs unpaired, 2 when every case is paired, and in
|
|
169
|
+
* between for a suite that mixes the two.
|
|
170
|
+
*/
|
|
171
|
+
runsPerObservation: number;
|
|
172
|
+
/** expected *runs* (not observations) for a pull request in which nothing moved */
|
|
173
|
+
typicalRuns: number;
|
|
174
|
+
typicalCostUsd: number;
|
|
175
|
+
wallMsTypical: number;
|
|
176
|
+
/** the same, with a screening pass in front */
|
|
177
|
+
typicalScreenedRuns: number;
|
|
178
|
+
typicalScreenedCostUsd: number;
|
|
179
|
+
}
|
|
180
|
+
export interface Plan {
|
|
181
|
+
config: PlanConfig;
|
|
182
|
+
cases: PlanCase[];
|
|
183
|
+
totals: PlanTotals;
|
|
184
|
+
/** cases no budget can decide with the current baseline */
|
|
185
|
+
undecidable: PlanCase[];
|
|
186
|
+
/** cases only the paired design can reach */
|
|
187
|
+
pairedOnly: PlanCase[];
|
|
188
|
+
/** cases whose baseline rate is too low to lose `mde` points at all */
|
|
189
|
+
impossible: PlanCase[];
|
|
190
|
+
/**
|
|
191
|
+
* The design the recommendation names: paired when more than a quarter of
|
|
192
|
+
* the suite is `PAIRED_ONLY` or most decidable cases' own `design` is
|
|
193
|
+
* paired. `expectedCostUsd` prices each case at
|
|
194
|
+
* its own `design` and falls back to this one only for a case with none,
|
|
195
|
+
* unless `config.design` fixes one design for the whole suite.
|
|
196
|
+
*/
|
|
197
|
+
recommendedDesign: "unpaired" | "paired";
|
|
198
|
+
/** the cheapest design that decides every decidable case */
|
|
199
|
+
recommendation: string;
|
|
200
|
+
/** honest one-liner about affordability at the configured cost per run */
|
|
201
|
+
verdict: string;
|
|
202
|
+
/**
|
|
203
|
+
* What a *typical* pull request costs, one in which nothing moved, so most
|
|
204
|
+
* cases stop at the H₀ wall. This is the headline number.
|
|
205
|
+
*/
|
|
206
|
+
expectedCostUsd: number;
|
|
207
|
+
/**
|
|
208
|
+
* What a pull request in which *every* case regressed would cost.
|
|
209
|
+
*
|
|
210
|
+
* Not an upper bound on `expectedCostUsd`, despite running every case to
|
|
211
|
+
* certification: the sequential test stops a case as soon as it clears the
|
|
212
|
+
* bar, so an all-regressed suite can finish cheaper than one that did not
|
|
213
|
+
* move and ran its full schedule. `verdict` says which way round they came
|
|
214
|
+
* out rather than presenting this as the worst case.
|
|
215
|
+
*/
|
|
216
|
+
ceilingCostUsd: number;
|
|
217
|
+
}
|
|
218
|
+
export declare function planCase(c: CaseRef, b: BaselineStat | undefined, cfg: PlanConfig, m: number): PlanCase;
|
|
219
|
+
/**
|
|
220
|
+
* Expected total samples for the sequential design, priced under Wald's
|
|
221
|
+
* expected sample number at a supplied "true" rate per case, and clamped into
|
|
222
|
+
* the gate's own [minTrials, maxTrials] batch grid.
|
|
223
|
+
*
|
|
224
|
+
* `makePlan` no longer bills from it: an unpaired case there is counted in
|
|
225
|
+
* the runs `shouldStop` takes, which this figure misses either way (#105).
|
|
226
|
+
* `samplesForEvidence`, the one behind `PlanCase.unpaired.runs`, answers a
|
|
227
|
+
* different question: how many runs it takes to *certify a regression*. A case
|
|
228
|
+
* that did not regress never gets there; it hits the H₀ wall in a few batches
|
|
229
|
+
* and stops. Pricing every case at the certification cost over-predicts the
|
|
230
|
+
* bill.
|
|
231
|
+
*
|
|
232
|
+
* `trueRate` defaults to the case's own baseline rate, i.e. "nothing moved", * which is what almost every pull request looks like.
|
|
233
|
+
*/
|
|
234
|
+
export declare function expectedSequentialSamples(cases: Array<CaseRef>, baseline: Map<string, BaselineStat>, cfg: PlanConfig, trueRate?: (caseId: string, b: BaselineStat) => number): {
|
|
235
|
+
samples: number;
|
|
236
|
+
perCase: Map<string, number>;
|
|
237
|
+
};
|
|
238
|
+
type TrialGrid = Pick<PlanConfig, "minTrials" | "maxTrials" | "batchSize">;
|
|
239
|
+
/** Refuses a set `futilityConfidence` outside (0, 1), where the settle bar is 0 or Infinity. */
|
|
240
|
+
export declare function requireSettleConfidence(cfg: Pick<PlanConfig, "futilityConfidence">, where: string): void;
|
|
241
|
+
/**
|
|
242
|
+
* Expected pairs for a paired case that did not move: the first pair count at
|
|
243
|
+
* which `shouldStopPaired`'s settle e-value, on the mean trajectory at coupling
|
|
244
|
+
* `rho` and `cfg.futilityConfidence` (the stopping rule's default when unset),
|
|
245
|
+
* rules out a drop of `mde`, on the same batch grid as
|
|
246
|
+
* `expectedSequentialSamples`, and `maxTrials` when it never does. The
|
|
247
|
+
* unpaired SPRT figure knows nothing of this rule or of the coupling, which
|
|
248
|
+
* sets how often an unmoved pair disagrees.
|
|
249
|
+
*/
|
|
250
|
+
export declare function expectedSettlePairs(rate: number, rho: number, mde: number, cfg: TrialGrid & Pick<PlanConfig, "futilityConfidence">): number;
|
|
251
|
+
/**
|
|
252
|
+
* Plan a suite. `pilots` holds a pair table per case from a pilot run of the
|
|
253
|
+
* paired design, ideally with both arms on the same revision; a case with one
|
|
254
|
+
* prices pairing at its measured `pairPhi` instead of `cfg.pairCoupling`, so
|
|
255
|
+
* its `design` is chosen from a coupling the runner actually delivers.
|
|
256
|
+
*/
|
|
257
|
+
export declare function makePlan(cases: Array<CaseRef>, baseline: Map<string, BaselineStat>, cfg?: PlanConfig, pilots?: Map<string, PairedCounts>): Plan;
|
|
258
|
+
/**
|
|
259
|
+
* The suite size / MDE combinations that *are* affordable at a given per-run
|
|
260
|
+
* cost and budget. This is the honest answer to "is this usable for a
|
|
261
|
+
* coding-agent benchmark at $1 a run?", usually "not at 200 cases and 15
|
|
262
|
+
* points, but yes at 20 cases and 25 points".
|
|
263
|
+
*/
|
|
264
|
+
export interface AffordabilityCell {
|
|
265
|
+
cases: number;
|
|
266
|
+
mde: number;
|
|
267
|
+
/** runs to certify every case, the ceiling */
|
|
268
|
+
runs: number;
|
|
269
|
+
costUsd: number;
|
|
270
|
+
/** runs a pull request that moved nothing actually spends, the expected bill */
|
|
271
|
+
typicalRuns: number;
|
|
272
|
+
typicalCostUsd: number;
|
|
273
|
+
/** does the *ceiling* fit the budget? */
|
|
274
|
+
affordable: boolean;
|
|
275
|
+
/** does the *expected* cost fit the budget? */
|
|
276
|
+
typicallyAffordable: boolean;
|
|
277
|
+
}
|
|
278
|
+
export declare function affordabilityGrid(baselineRate: number, baselineTrials: number, cfg: PlanConfig, budgetUsd: number, caseCounts?: number[], mdes?: number[]): AffordabilityCell[];
|
|
279
|
+
export {};
|
|
280
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|