@tangle-network/agent-eval 0.217.1 → 0.218.1
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 +36 -1
- package/dist/adapters/http.d.ts +2 -2
- package/dist/analyst/index.d.ts +1 -1
- package/dist/analyst/index.d.ts.map +1 -1
- package/dist/analyst/index.js +9 -9
- package/dist/analyst/index.js.map +1 -1
- package/dist/{analyze-runs-DyeNcenW.d.ts → analyze-runs-DjlZOVXx.d.ts} +2 -2
- package/dist/{analyze-runs-DyeNcenW.d.ts.map → analyze-runs-DjlZOVXx.d.ts.map} +1 -1
- package/dist/{benchmark-command-xQK8nOI6.js → benchmark-command-BupdHRyf.js} +661 -562
- package/dist/benchmark-command-BupdHRyf.js.map +1 -0
- package/dist/benchmarks/index.d.ts +4 -4
- package/dist/benchmarks/index.js +3 -3
- package/dist/campaign/index.d.ts +4 -4
- package/dist/campaign/index.js +10 -10
- package/dist/{campaign-CJGkxAQ6.js → campaign-CGvUTnmc.js} +312 -281
- package/dist/{campaign-CJGkxAQ6.js.map → campaign-CGvUTnmc.js.map} +1 -1
- package/dist/{campaign-evidence-CQYw8_0H.js → campaign-evidence-DunzcJGv.js} +2 -2
- package/dist/{campaign-evidence-CQYw8_0H.js.map → campaign-evidence-DunzcJGv.js.map} +1 -1
- package/dist/{chat-client-ldqxYYTN.js → chat-client-B2pXlPdx.js} +2 -2
- package/dist/{chat-client-ldqxYYTN.js.map → chat-client-B2pXlPdx.js.map} +1 -1
- package/dist/{chat-json-call-DavzexSp.js → chat-json-call-Dm9c-b41.js} +2 -2
- package/dist/{chat-json-call-DavzexSp.js.map → chat-json-call-Dm9c-b41.js.map} +1 -1
- package/dist/cli.js +10 -10
- package/dist/{completion-verifier-B_jw6C9p.js → completion-verifier-DbLVf3i8.js} +4 -4
- package/dist/{completion-verifier-B_jw6C9p.js.map → completion-verifier-DbLVf3i8.js.map} +1 -1
- package/dist/contract/index.d.ts +7 -7
- package/dist/contract/index.js +90 -10
- package/dist/contract/index.js.map +1 -1
- package/dist/{default-registry-ClYjq3QE.js → default-registry-BJ-Pq6yL.js} +309 -277
- package/dist/{default-registry-ClYjq3QE.js.map → default-registry-BJ-Pq6yL.js.map} +1 -1
- package/dist/{define-agent-eval-BDxNlP3D.js → define-agent-eval-BGdFKlrc.js} +165 -105
- package/dist/define-agent-eval-BGdFKlrc.js.map +1 -0
- package/dist/{define-agent-eval-BIkH_gAR.d.ts → define-agent-eval-BlH10zEw.d.ts} +6 -6
- package/dist/{define-agent-eval-BIkH_gAR.d.ts.map → define-agent-eval-BlH10zEw.d.ts.map} +1 -1
- package/dist/diagnosis/index.d.ts +1 -1
- package/dist/{dspy-rlm-engine-DhdCr1Dc.js → dspy-rlm-engine-CSMwudLO.js} +2 -2
- package/dist/{dspy-rlm-engine-DhdCr1Dc.js.map → dspy-rlm-engine-CSMwudLO.js.map} +1 -1
- package/dist/eval-campaign-BUMIxKTE.js +393 -0
- package/dist/eval-campaign-BUMIxKTE.js.map +1 -0
- package/dist/{evaluation-jTjC_QQD.d.ts → evaluation-BOZ38vOH.d.ts} +2 -2
- package/dist/{evaluation-jTjC_QQD.d.ts.map → evaluation-BOZ38vOH.d.ts.map} +1 -1
- package/dist/evaluation.d.ts +1 -1
- package/dist/experiment/index.d.ts +1 -1
- package/dist/experiment/index.d.ts.map +1 -1
- package/dist/experiment/index.js +110 -71
- package/dist/experiment/index.js.map +1 -1
- package/dist/{exporters-Cl6IeNAu.js → exporters-DWvM16LE.js} +2 -2
- package/dist/{exporters-Cl6IeNAu.js.map → exporters-DWvM16LE.js.map} +1 -1
- package/dist/{external-optimizer-process-KVFGvYX1.js → external-optimizer-process-C3Wm7Vhn.js} +2 -2
- package/dist/{external-optimizer-process-KVFGvYX1.js.map → external-optimizer-process-C3Wm7Vhn.js.map} +1 -1
- package/dist/{external-optimizer-subprocess-XIHBOSKt.js → external-optimizer-subprocess-B5gdLRZv.js} +3 -3
- package/dist/{external-optimizer-subprocess-XIHBOSKt.js.map → external-optimizer-subprocess-B5gdLRZv.js.map} +1 -1
- package/dist/{findings-store-BMVQtEsm.js → findings-store-BtTzPL0d.js} +5 -5
- package/dist/{findings-store-BMVQtEsm.js.map → findings-store-BtTzPL0d.js.map} +1 -1
- package/dist/{hf-dataset-D9f7-oX7.js → hf-dataset-CKxIJQba.js} +3 -3
- package/dist/{hf-dataset-D9f7-oX7.js.map → hf-dataset-CKxIJQba.js.map} +1 -1
- package/dist/hosted/index.js +1 -1
- package/dist/{index-ZuWx52WG.d.ts → index-B16FNdW5.d.ts} +34 -17
- package/dist/index-B16FNdW5.d.ts.map +1 -0
- package/dist/{index-9jJ2fKSX.d.ts → index-CalAsXMR.d.ts} +7 -5
- package/dist/index-CalAsXMR.d.ts.map +1 -0
- package/dist/{index-BiT6RtNH.d.ts → index-DbMOXYnP.d.ts} +6 -6
- package/dist/{index-BiT6RtNH.d.ts.map → index-DbMOXYnP.d.ts.map} +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +611 -688
- package/dist/index.js.map +1 -1
- package/dist/{integrity-DOd9Q86O.js → integrity-C8oUeB0g.js} +322 -197
- package/dist/integrity-C8oUeB0g.js.map +1 -0
- package/dist/{journal-CR4QikYp.js → journal-C7om8Gum.js} +48 -38
- package/dist/journal-C7om8Gum.js.map +1 -0
- package/dist/ledger-core/index.d.ts +1 -1
- package/dist/ledger-core/index.js +2 -2
- package/dist/ledger-core/lock-holder.d.ts +2 -0
- package/dist/ledger-core/lock-holder.js +181 -0
- package/dist/ledger-core/lock-holder.js.map +1 -0
- package/dist/{ledger-core-DrJhbms9.js → ledger-core-CAxUdDk0.js} +2 -2
- package/dist/{ledger-core-DrJhbms9.js.map → ledger-core-CAxUdDk0.js.map} +1 -1
- package/dist/{llm-client-BshCREn6.js → llm-client-_Y6ic-tf.js} +238 -248
- package/dist/llm-client-_Y6ic-tf.js.map +1 -0
- package/dist/{llm-judge-C8jMTNNG.js → llm-judge-Djxh-Uhs.js} +646 -458
- package/dist/llm-judge-Djxh-Uhs.js.map +1 -0
- package/dist/lock-holder-DaJbfpci.d.ts +86 -0
- package/dist/lock-holder-DaJbfpci.d.ts.map +1 -0
- package/dist/{matrix-DHe-dwVJ.d.ts → matrix-CCSBna4q.d.ts} +2 -2
- package/dist/{matrix-DHe-dwVJ.d.ts.map → matrix-CCSBna4q.d.ts.map} +1 -1
- package/dist/{mint-zszyYlpA.js → mint-CbdwjTPW.js} +2 -2
- package/dist/{mint-zszyYlpA.js.map → mint-CbdwjTPW.js.map} +1 -1
- package/dist/multishot/golden/index.d.ts +1 -1
- package/dist/multishot/index.d.ts +2 -2
- package/dist/openapi.json +1 -1
- package/dist/{pareto-BzsxidFD.js → pareto-CTv8vozZ.js} +4 -4
- package/dist/{pareto-BzsxidFD.js.map → pareto-CTv8vozZ.js.map} +1 -1
- package/dist/{promotion-gate-DaY95yU6.d.ts → promotion-gate-CxEHRsZW.d.ts} +2 -2
- package/dist/{promotion-gate-DaY95yU6.d.ts.map → promotion-gate-CxEHRsZW.d.ts.map} +1 -1
- package/dist/{proposal-findings-BbWidvUk.js → proposal-findings-n-5WBbEx.js} +2 -2
- package/dist/{proposal-findings-BbWidvUk.js.map → proposal-findings-n-5WBbEx.js.map} +1 -1
- package/dist/{render-C-w2EZ6p.js → render-Cs34y0iX.js} +404 -208
- package/dist/render-Cs34y0iX.js.map +1 -0
- package/dist/reporting.d.ts +2 -2
- package/dist/{researcher-0ABVIdGa.d.ts → researcher-GU1tV4dn.d.ts} +2 -2
- package/dist/{researcher-0ABVIdGa.d.ts.map → researcher-GU1tV4dn.d.ts.map} +1 -1
- package/dist/rl.d.ts +2 -2
- package/dist/rl.js +4 -4
- package/dist/rollout/index.js +5 -5
- package/dist/{rollout-D6C50mfA.js → rollout-Dd1ucT_M.js} +5 -5
- package/dist/{rollout-D6C50mfA.js.map → rollout-Dd1ucT_M.js.map} +1 -1
- package/dist/schema-C-ziyJD7.d.ts.map +1 -1
- package/dist/{schema-DxcKTzbi.js → schema-CvhfLjtZ.js} +77 -47
- package/dist/schema-CvhfLjtZ.js.map +1 -0
- package/dist/search/index.d.ts +2 -2
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +2 -2
- package/dist/{search-kernel-DxqjBxA-.d.ts → search-kernel-p9JB3SmL.d.ts} +3 -3
- package/dist/{search-kernel-DxqjBxA-.d.ts.map → search-kernel-p9JB3SmL.d.ts.map} +1 -1
- package/dist/{search-ledger-TUvB5gWH.js → search-ledger-ClpN4I3e.js} +4 -4
- package/dist/{search-ledger-TUvB5gWH.js.map → search-ledger-ClpN4I3e.js.map} +1 -1
- package/dist/{search-ledger-file-UKCO2r8a.js → search-ledger-file-Bd5Tioq6.js} +3 -3
- package/dist/{search-ledger-file-UKCO2r8a.js.map → search-ledger-file-Bd5Tioq6.js.map} +1 -1
- package/dist/{search-shipper-Cw2z3-td.js → search-shipper-Bg2HW3Uv.js} +3 -3
- package/dist/{search-shipper-Cw2z3-td.js.map → search-shipper-Bg2HW3Uv.js.map} +1 -1
- package/dist/{search-summary-DQIvJsSB.js → search-summary-CrBuvVnf.js} +3 -3
- package/dist/{search-summary-DQIvJsSB.js.map → search-summary-CrBuvVnf.js.map} +1 -1
- package/dist/{server-DoVbqqtJ.js → server-C6M0qR8h.js} +2 -2
- package/dist/{server-DoVbqqtJ.js.map → server-C6M0qR8h.js.map} +1 -1
- package/dist/{single-run-lock-U58yf8N6.js → single-run-lock-Dekd8_Wv.js} +7 -7
- package/dist/single-run-lock-Dekd8_Wv.js.map +1 -0
- package/dist/{skillopt-optimization-method-kyL94-ri.js → skillopt-optimization-method-5dlex7MJ.js} +1339 -1059
- package/dist/skillopt-optimization-method-5dlex7MJ.js.map +1 -0
- package/dist/{statistical-heldout-C9AbgREN.d.ts → statistical-heldout-BHfLZHrm.d.ts} +2 -2
- package/dist/{statistical-heldout-C9AbgREN.d.ts.map → statistical-heldout-BHfLZHrm.d.ts.map} +1 -1
- package/dist/{summary-report-DM7tlml1.d.ts → summary-report-CkbRcSuu.d.ts} +16 -1
- package/dist/summary-report-CkbRcSuu.d.ts.map +1 -0
- package/dist/supervisor-run/index.d.ts.map +1 -1
- package/dist/supervisor-run/index.js +3 -3
- package/dist/{systemone-Bp_Ac0p1.d.ts → systemone-BMzDJb1i.d.ts} +3 -3
- package/dist/{systemone-Bp_Ac0p1.d.ts.map → systemone-BMzDJb1i.d.ts.map} +1 -1
- package/dist/systemone.d.ts +2 -2
- package/dist/{terminal-record-78g6E4vh.js → terminal-record-D4Rv-j1W.js} +241 -193
- package/dist/{terminal-record-78g6E4vh.js.map → terminal-record-D4Rv-j1W.js.map} +1 -1
- package/dist/trajectory-replay/index.d.ts +4 -1
- package/dist/trajectory-replay/index.d.ts.map +1 -1
- package/dist/trajectory-replay/index.js +834 -824
- package/dist/trajectory-replay/index.js.map +1 -1
- package/dist/{tree-BGRglkKd.js → tree-B5e1uAeL.js} +122 -14
- package/dist/tree-B5e1uAeL.js.map +1 -0
- package/dist/{types-DtMbFw6U.d.ts → types-BKCzzmit.d.ts} +2 -2
- package/dist/{types-DtMbFw6U.d.ts.map → types-BKCzzmit.d.ts.map} +1 -1
- package/dist/{types-D8GhJoHk.d.ts → types-DtkO1G9L.d.ts} +2 -2
- package/dist/{types-D8GhJoHk.d.ts.map → types-DtkO1G9L.d.ts.map} +1 -1
- package/dist/wire/index.js +1 -1
- package/docs/design/statistics-decisions.md +1 -1
- package/docs/eval-surface-map.md +1 -0
- package/docs/profile-json-identity.md +1 -2
- package/docs/public-api.md +27 -16
- package/package.json +7 -2
- package/dist/benchmark-command-xQK8nOI6.js.map +0 -1
- package/dist/define-agent-eval-BDxNlP3D.js.map +0 -1
- package/dist/eval-campaign-BLEfBGbA.js +0 -343
- package/dist/eval-campaign-BLEfBGbA.js.map +0 -1
- package/dist/index-9jJ2fKSX.d.ts.map +0 -1
- package/dist/index-ZuWx52WG.d.ts.map +0 -1
- package/dist/integrity-DOd9Q86O.js.map +0 -1
- package/dist/journal-CR4QikYp.js.map +0 -1
- package/dist/llm-client-BshCREn6.js.map +0 -1
- package/dist/llm-judge-C8jMTNNG.js.map +0 -1
- package/dist/render-C-w2EZ6p.js.map +0 -1
- package/dist/schema-DxcKTzbi.js.map +0 -1
- package/dist/single-run-lock-U58yf8N6.js.map +0 -1
- package/dist/skillopt-optimization-method-kyL94-ri.js.map +0 -1
- package/dist/summary-report-DM7tlml1.d.ts.map +0 -1
- package/dist/tree-BGRglkKd.js.map +0 -1
package/dist/contract/index.js
CHANGED
|
@@ -4,20 +4,20 @@ import { r as summarizeExecution, t as analyzeRuns } from "../analyze-runs-DqPJa
|
|
|
4
4
|
import { i as pairedBootstrap } from "../mean-BbA_JCzW.js";
|
|
5
5
|
import { t as decidePairedPromotion } from "../paired-promotion-decision-D0SHb-ZL.js";
|
|
6
6
|
import { a as heldoutSignificance } from "../statistical-heldout-Bksv92Th.js";
|
|
7
|
-
import { B as defaultProductionGate, Q as runCampaign, Z as runEval, i as transientDispatchFailure, o as clamp01, p as runImprovementLoop, t as llmJudge } from "../llm-judge-
|
|
7
|
+
import { B as defaultProductionGate, Q as runCampaign, Z as runEval, i as transientDispatchFailure, o as clamp01, p as runImprovementLoop, t as llmJudge } from "../llm-judge-Djxh-Uhs.js";
|
|
8
8
|
import { i as isModelPriced, n as estimateCost } from "../metrics-BKaPBtIG.js";
|
|
9
9
|
import { t as CostLedger } from "../cost-ledger-D0352Z4d.js";
|
|
10
|
-
import { z as campaignSplitDigest } from "../campaign-evidence-
|
|
11
|
-
import { o as mapConcurrentRange } from "../journal-
|
|
12
|
-
import { M as fsCampaignStorage, N as inMemoryCampaignStorage } from "../external-optimizer-subprocess-
|
|
10
|
+
import { z as campaignSplitDigest } from "../campaign-evidence-DunzcJGv.js";
|
|
11
|
+
import { o as mapConcurrentRange } from "../journal-C7om8Gum.js";
|
|
12
|
+
import { M as fsCampaignStorage, N as inMemoryCampaignStorage } from "../external-optimizer-subprocess-B5gdLRZv.js";
|
|
13
13
|
import { a as makeProposalFinding } from "../types-DqFMNTgK.js";
|
|
14
14
|
import { n as isRecord } from "../json-BhdsJaOQ.js";
|
|
15
|
-
import { n as SelfImproveRunError, r as selfImprove, t as defineAgentEval } from "../define-agent-eval-
|
|
16
|
-
import { t as buildDefaultAnalystRegistry } from "../default-registry-
|
|
15
|
+
import { n as SelfImproveRunError, r as selfImprove, t as defineAgentEval } from "../define-agent-eval-BGdFKlrc.js";
|
|
16
|
+
import { t as buildDefaultAnalystRegistry } from "../default-registry-BJ-Pq6yL.js";
|
|
17
17
|
import { t as extractUsage } from "../extract-usage-BZLU01kR.js";
|
|
18
|
-
import { t as createChatClient } from "../chat-client-
|
|
18
|
+
import { t as createChatClient } from "../chat-client-B2pXlPdx.js";
|
|
19
19
|
import { n as InMemoryOutcomeStore, t as FileSystemOutcomeStore } from "../outcome-store-DUcMj-3D.js";
|
|
20
|
-
import { c as composeGate, l as externalTextOptimizationMethod, n as compareOptimizationMethods, r as gepaOptimizationMethod, s as heldOutGate, t as skillOptOptimizationMethod } from "../skillopt-optimization-method-
|
|
20
|
+
import { c as composeGate, l as externalTextOptimizationMethod, n as compareOptimizationMethods, r as gepaOptimizationMethod, s as heldOutGate, t as skillOptOptimizationMethod } from "../skillopt-optimization-method-5dlex7MJ.js";
|
|
21
21
|
import { n as paretoPolicy, r as paretoSignificanceGate, t as buildEvidenceVector } from "../promotion-policy-6A8osGr_.js";
|
|
22
22
|
import { t as fromOtelSpans } from "../otel-spans-CdN909k1.js";
|
|
23
23
|
import { createHash } from "node:crypto";
|
|
@@ -369,6 +369,11 @@ function assertKnownCost(cost, label) {
|
|
|
369
369
|
* only validates the projected measurements and derives their shared decision.
|
|
370
370
|
*/
|
|
371
371
|
function evaluatePairedMeasurements(options) {
|
|
372
|
+
return pairedVerdict(budgetAndChecks(runTotals(dimensionRegressions(pairedEstimates(validatePairedInput({ options }))))));
|
|
373
|
+
}
|
|
374
|
+
/** The checked policy and measurements, their cell ids, shared dimensions and score arrays. */
|
|
375
|
+
function validatePairedInput(prev) {
|
|
376
|
+
const { options } = prev;
|
|
372
377
|
if (options.measurements.length === 0) throw new Error("paired measurement evaluation requires at least one paired cell");
|
|
373
378
|
const preparationCost = options.preparationCost ?? {
|
|
374
379
|
usd: 0,
|
|
@@ -384,6 +389,28 @@ function evaluatePairedMeasurements(options) {
|
|
|
384
389
|
const baselineScores = measurements.map((measurement) => measurement.baseline.score);
|
|
385
390
|
const candidateScores = measurements.map((measurement) => measurement.candidate.score);
|
|
386
391
|
const { confidenceLevel: confidence, resamples, bootstrapSeed, deltaThreshold, minProductiveRuns, budgetUsd, criticalDimensions, regressionTolerance } = policy;
|
|
392
|
+
return {
|
|
393
|
+
...prev,
|
|
394
|
+
preparationCost,
|
|
395
|
+
policy,
|
|
396
|
+
measurements,
|
|
397
|
+
cellIds,
|
|
398
|
+
dimensions,
|
|
399
|
+
baselineScores,
|
|
400
|
+
candidateScores,
|
|
401
|
+
confidence,
|
|
402
|
+
resamples,
|
|
403
|
+
bootstrapSeed,
|
|
404
|
+
deltaThreshold,
|
|
405
|
+
minProductiveRuns,
|
|
406
|
+
budgetUsd,
|
|
407
|
+
criticalDimensions,
|
|
408
|
+
regressionTolerance
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/** Held-out significance, the overall, cost and latency estimates, and the observed power. */
|
|
412
|
+
function pairedEstimates(prev) {
|
|
413
|
+
const { options, measurements, cellIds, dimensions, baselineScores, candidateScores, confidence, resamples, bootstrapSeed, deltaThreshold, minProductiveRuns } = prev;
|
|
387
414
|
const significance = heldoutSignificance({
|
|
388
415
|
before: baselineScores,
|
|
389
416
|
after: candidateScores,
|
|
@@ -456,6 +483,19 @@ function evaluatePairedMeasurements(options) {
|
|
|
456
483
|
confidence,
|
|
457
484
|
sharedScorerChannel: options.sharedScorerChannel
|
|
458
485
|
});
|
|
486
|
+
return {
|
|
487
|
+
...prev,
|
|
488
|
+
significance,
|
|
489
|
+
overall,
|
|
490
|
+
objectives,
|
|
491
|
+
cost,
|
|
492
|
+
latency,
|
|
493
|
+
power
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
/** Critical dimensions that regressed, on either burden of proof. */
|
|
497
|
+
function dimensionRegressions(prev) {
|
|
498
|
+
const { measurements, dimensions, confidence, resamples, bootstrapSeed, minProductiveRuns, criticalDimensions, regressionTolerance, objectives, power } = prev;
|
|
459
499
|
const powerSufficient = power.sufficient;
|
|
460
500
|
const guardedDimensions = new Set(criticalDimensions);
|
|
461
501
|
const missingCriticalDimensions = criticalDimensions.filter((dimension) => !dimensions.includes(dimension));
|
|
@@ -473,9 +513,22 @@ function evaluatePairedMeasurements(options) {
|
|
|
473
513
|
}).promote;
|
|
474
514
|
}));
|
|
475
515
|
const regressions = objectives.filter((objective) => objective.kind === "dimension" && guardedDimensions.has(objective.name) && objective.availability === "measured" && (objective.confidenceInterval.lower < -regressionTolerance || regressionProven.has(objective.name)));
|
|
516
|
+
return {
|
|
517
|
+
...prev,
|
|
518
|
+
powerSufficient,
|
|
519
|
+
guardedDimensions,
|
|
520
|
+
missingCriticalDimensions,
|
|
521
|
+
regressionProven,
|
|
522
|
+
regressions
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
/** Run completion, per-task regressions and the measurement cost. */
|
|
526
|
+
function runTotals(prev) {
|
|
527
|
+
const { options, measurements } = prev;
|
|
476
528
|
const measurementCostUsd = measurements.reduce((sum, measurement) => sum + measurement.baseline.costUsd + measurement.candidate.costUsd, 0);
|
|
477
529
|
const measurementWorkDurationMs = measurements.reduce((sum, measurement) => sum + measurement.baseline.latencyMs + measurement.candidate.latencyMs, 0);
|
|
478
|
-
const
|
|
530
|
+
const completedRuns = measurements.flatMap((measurement) => [measurement.baseline, measurement.candidate]);
|
|
531
|
+
const incompleteRuns = completedRuns.filter((run) => !run.completed);
|
|
479
532
|
const regressedTasks = measurements.filter((measurement) => !measurement.candidate.passed && measurement.baseline.passed);
|
|
480
533
|
const sharedTaskFailures = measurements.filter((measurement) => !measurement.candidate.passed && !measurement.baseline.passed);
|
|
481
534
|
const repairedTasks = measurements.filter((measurement) => measurement.candidate.passed && !measurement.baseline.passed);
|
|
@@ -484,7 +537,22 @@ function evaluatePairedMeasurements(options) {
|
|
|
484
537
|
provenance: measurements.every((measurement) => measurement.baseline.costProvenance === "observed" && measurement.candidate.costProvenance === "observed") ? "observed" : "estimated"
|
|
485
538
|
};
|
|
486
539
|
const measurementCost = options.measurementCost ?? derivedMeasurementCost;
|
|
487
|
-
|
|
540
|
+
return {
|
|
541
|
+
...prev,
|
|
542
|
+
measurementCostUsd,
|
|
543
|
+
measurementWorkDurationMs,
|
|
544
|
+
completedRuns,
|
|
545
|
+
incompleteRuns,
|
|
546
|
+
regressedTasks,
|
|
547
|
+
sharedTaskFailures,
|
|
548
|
+
repairedTasks,
|
|
549
|
+
derivedMeasurementCost,
|
|
550
|
+
measurementCost
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
/** Total cost against the budget, and the checks the verdict is drawn from. */
|
|
554
|
+
function budgetAndChecks(prev) {
|
|
555
|
+
const { options, preparationCost, budgetUsd, significance, powerSufficient, missingCriticalDimensions, regressions, incompleteRuns, regressedTasks, derivedMeasurementCost, measurementCost } = prev;
|
|
488
556
|
if (options.measurementCost !== void 0 && (measurementCost.provenance !== derivedMeasurementCost.provenance || !numbersApproximatelyEqual(measurementCost.usd, derivedMeasurementCost.usd))) throw new Error("paired measurement cost does not match its signed receipts");
|
|
489
557
|
const totalCost = {
|
|
490
558
|
usd: preparationCost.usd + measurementCost.usd,
|
|
@@ -519,6 +587,18 @@ function evaluatePairedMeasurements(options) {
|
|
|
519
587
|
];
|
|
520
588
|
const shipped = checks.every((check) => check.passed);
|
|
521
589
|
const hardFailure = incompleteRuns.length > 0 || regressedTasks.length > 0 || regressions.length > 0 || missingCriticalDimensions.length > 0 || !budgetPassed;
|
|
590
|
+
return {
|
|
591
|
+
...prev,
|
|
592
|
+
totalCost,
|
|
593
|
+
budgetPassed,
|
|
594
|
+
checks,
|
|
595
|
+
shipped,
|
|
596
|
+
hardFailure
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
/** The verdict, its reasons and the evaluation record. */
|
|
600
|
+
function pairedVerdict(prev) {
|
|
601
|
+
const { options, baselineScores, confidence, deltaThreshold, budgetUsd, significance, overall, objectives, power, powerSufficient, missingCriticalDimensions, regressions, measurementWorkDurationMs, incompleteRuns, regressedTasks, sharedTaskFailures, repairedTasks, measurementCost, totalCost, budgetPassed, checks, shipped, hardFailure } = prev;
|
|
522
602
|
const reasons = [
|
|
523
603
|
...significance.significant ? [] : [significanceReason(significance, deltaThreshold)],
|
|
524
604
|
...powerSufficient || significance.fewRuns ? [] : [power.reason],
|