@tangle-network/agent-eval 0.216.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 +137 -57
- package/README.md +2 -2
- package/dist/adapters/http.d.ts +2 -2
- package/dist/{agent-profile-VFcQncbW.d.ts → agent-profile-DTt8uGP9.d.ts} +4 -17
- package/dist/agent-profile-DTt8uGP9.d.ts.map +1 -0
- package/dist/{agent-profile-cell-BK8mlqlq.js → agent-profile-cell-B1V1gUZs.js} +4 -53
- package/dist/agent-profile-cell-B1V1gUZs.js.map +1 -0
- package/dist/{agent-profile-cell-BNp-Js9F.d.ts → agent-profile-cell-BcpFbNd5.d.ts} +2 -22
- package/dist/agent-profile-cell-BcpFbNd5.d.ts.map +1 -0
- package/dist/{agreement-irr-BEWLIF3_.js → agreement-irr-BhAqjluA.js} +5 -5
- package/dist/agreement-irr-BhAqjluA.js.map +1 -0
- package/dist/analyst/index.d.ts +36 -169
- package/dist/analyst/index.d.ts.map +1 -1
- package/dist/analyst/index.js +17 -192
- package/dist/analyst/index.js.map +1 -1
- package/dist/{analyze-runs-D68fd-su.d.ts → analyze-runs-DjlZOVXx.d.ts} +5 -5
- package/dist/{analyze-runs-D68fd-su.d.ts.map → analyze-runs-DjlZOVXx.d.ts.map} +1 -1
- package/dist/{analyze-runs-C84irm4i.js → analyze-runs-DqPJaJ4X.js} +225 -21
- package/dist/analyze-runs-DqPJaJ4X.js.map +1 -0
- package/dist/authenticity/index.d.ts +0 -23
- package/dist/authenticity/index.d.ts.map +1 -1
- package/dist/authenticity/index.js +1 -34
- package/dist/authenticity/index.js.map +1 -1
- package/dist/{benchmark-command-By0vh8q7.js → benchmark-command-BupdHRyf.js} +1225 -661
- package/dist/benchmark-command-BupdHRyf.js.map +1 -0
- package/dist/benchmarks/index.d.ts +5 -6
- package/dist/benchmarks/index.d.ts.map +1 -1
- package/dist/benchmarks/index.js +4 -4
- package/dist/benchmarks/index.js.map +1 -1
- package/dist/builder-eval/index.d.ts +3 -3
- package/dist/builder-eval/index.js +2 -2
- package/dist/builder-eval/index.js.map +1 -1
- package/dist/campaign/index.d.ts +7 -7
- package/dist/campaign/index.js +15 -15
- package/dist/{campaign-BudZ70zo.js → campaign-CGvUTnmc.js} +324 -800
- package/dist/campaign-CGvUTnmc.js.map +1 -0
- package/dist/{campaign-evidence-Clrn4hBV.js → campaign-evidence-DunzcJGv.js} +10 -18
- package/dist/{campaign-evidence-Clrn4hBV.js.map → campaign-evidence-DunzcJGv.js.map} +1 -1
- package/dist/{canonical-B2RqLofv.js → canonical-Dq2hOQ8L.js} +2 -2
- package/dist/{canonical-B2RqLofv.js.map → canonical-Dq2hOQ8L.js.map} +1 -1
- package/dist/cell-spend-DEWR3nj-.js +90 -0
- package/dist/cell-spend-DEWR3nj-.js.map +1 -0
- package/dist/{chat-client-l-MVDlDk.js → chat-client-B2pXlPdx.js} +2 -2
- package/dist/{chat-client-l-MVDlDk.js.map → chat-client-B2pXlPdx.js.map} +1 -1
- package/dist/{chat-json-call-puMArmtW.js → chat-json-call-Dm9c-b41.js} +3 -2
- package/dist/chat-json-call-Dm9c-b41.js.map +1 -0
- package/dist/{claim-q4HQhK1G.js → claim-BPVuyHuy.js} +3 -3
- package/dist/{claim-q4HQhK1G.js.map → claim-BPVuyHuy.js.map} +1 -1
- package/dist/cli.js +113 -12
- package/dist/cli.js.map +1 -1
- package/dist/{client-BzL9niqi.d.ts → client-hwo3cJjR.d.ts} +3 -16
- package/dist/client-hwo3cJjR.d.ts.map +1 -0
- package/dist/{cluster-bootstrap-qcUWYFl-.js → cluster-bootstrap-DEwwhl0C.js} +3 -3
- package/dist/{cluster-bootstrap-qcUWYFl-.js.map → cluster-bootstrap-DEwwhl0C.js.map} +1 -1
- package/dist/{produced-state-BsDmnwxc.js → completion-verifier-DbLVf3i8.js} +9 -64
- package/dist/completion-verifier-DbLVf3i8.js.map +1 -0
- package/dist/contract/index.d.ts +12 -12
- package/dist/contract/index.js +107 -403
- package/dist/contract/index.js.map +1 -1
- package/dist/{cost-ledger-BP8V4kUQ.js → cost-ledger-D0352Z4d.js} +4 -8
- package/dist/cost-ledger-D0352Z4d.js.map +1 -0
- package/dist/dataset-DQqhOCPt.d.ts.map +1 -1
- package/dist/{default-registry-COhk9g36.js → default-registry-BJ-Pq6yL.js} +314 -285
- package/dist/default-registry-BJ-Pq6yL.js.map +1 -0
- package/dist/{default-registry-DzHiGruW.d.ts → default-registry-DXgLmoDI.d.ts} +7 -50
- package/dist/default-registry-DXgLmoDI.d.ts.map +1 -0
- package/dist/{define-agent-eval-CNTPzIkp.js → define-agent-eval-BGdFKlrc.js} +170 -110
- package/dist/define-agent-eval-BGdFKlrc.js.map +1 -0
- package/dist/{define-agent-eval-WSck0CZJ.d.ts → define-agent-eval-BlH10zEw.d.ts} +8 -8
- package/dist/define-agent-eval-BlH10zEw.d.ts.map +1 -0
- package/dist/{descriptive-DboxPZrG.js → descriptive-CVNy48rR.js} +2 -2
- package/dist/{descriptive-DboxPZrG.js.map → descriptive-CVNy48rR.js.map} +1 -1
- package/dist/diagnosis/index.d.ts +4 -14
- package/dist/diagnosis/index.d.ts.map +1 -1
- package/dist/diagnosis/index.js +67 -28
- package/dist/diagnosis/index.js.map +1 -1
- package/dist/{dspy-rlm-engine-LRCu61m5.js → dspy-rlm-engine-CSMwudLO.js} +5 -10
- package/dist/dspy-rlm-engine-CSMwudLO.js.map +1 -0
- package/dist/{emitter-HcCmFQl_.d.ts → emitter-DABYYTcH.d.ts} +5 -5
- package/dist/emitter-DABYYTcH.d.ts.map +1 -0
- package/dist/emitter-DbMXUIVP.js.map +1 -1
- package/dist/{engine-3A_4jOlI.d.ts → engine-BvZ0R-36.d.ts} +17 -21
- package/dist/engine-BvZ0R-36.d.ts.map +1 -0
- package/dist/{equal-terms-BtdXayCJ.js → equal-terms-DbPGcVtI.js} +2 -2
- package/dist/equal-terms-DbPGcVtI.js.map +1 -0
- package/dist/{errors-DVZiqS7K.js → errors-BcOs5MKW.js} +2 -8
- package/dist/{errors-DVZiqS7K.js.map → errors-BcOs5MKW.js.map} +1 -1
- package/dist/eval-campaign-BUMIxKTE.js +393 -0
- package/dist/eval-campaign-BUMIxKTE.js.map +1 -0
- package/dist/{evaluation-6Yoi74gM.d.ts → evaluation-BOZ38vOH.d.ts} +7 -7
- package/dist/evaluation-BOZ38vOH.d.ts.map +1 -0
- package/dist/evaluation.d.ts +2 -2
- package/dist/evaluation.js +1 -1
- package/dist/evaluation.js.map +1 -1
- package/dist/{exact-types-ClugMJfI.d.ts → exact-types-CflbJ9f3.d.ts} +2 -2
- package/dist/{exact-types-ClugMJfI.d.ts.map → exact-types-CflbJ9f3.d.ts.map} +1 -1
- package/dist/{exec-ChJ6d5if.js → exec-CpbtOXVt.js} +2 -24
- package/dist/{exec-ChJ6d5if.js.map → exec-CpbtOXVt.js.map} +1 -1
- package/dist/execution-tracks-CpgFPpS5.js.map +1 -1
- package/dist/experiment/index.d.ts +9 -112
- package/dist/experiment/index.d.ts.map +1 -1
- package/dist/experiment/index.js +258 -311
- package/dist/experiment/index.js.map +1 -1
- package/dist/{exporters-X4xwla8A.js → exporters-DWvM16LE.js} +3 -3
- package/dist/exporters-DWvM16LE.js.map +1 -0
- package/dist/{exporters-ChTnR90l.d.ts → exporters-Dk3oEbK_.d.ts} +2 -4
- package/dist/{exporters-ChTnR90l.d.ts.map → exporters-Dk3oEbK_.d.ts.map} +1 -1
- package/dist/{external-optimizer-process-BjMGUuds.js → external-optimizer-process-C3Wm7Vhn.js} +4 -3
- package/dist/external-optimizer-process-C3Wm7Vhn.js.map +1 -0
- package/dist/{external-optimizer-subprocess-BqW0hHcI.js → external-optimizer-subprocess-B5gdLRZv.js} +9 -11
- package/dist/external-optimizer-subprocess-B5gdLRZv.js.map +1 -0
- package/dist/{extract-usage-BrnzRJ6H.js → extract-usage-BZLU01kR.js} +2 -23
- package/dist/{extract-usage-BrnzRJ6H.js.map → extract-usage-BZLU01kR.js.map} +1 -1
- package/dist/{failure-cluster-CbgEDcFJ.d.ts → failure-cluster-DN0t63Z0.d.ts} +4 -43
- package/dist/failure-cluster-DN0t63Z0.d.ts.map +1 -0
- package/dist/{failure-taxonomy-CjabTATj.js → failure-taxonomy-Bx5oWqaW.js} +2 -19
- package/dist/{failure-taxonomy-CjabTATj.js.map → failure-taxonomy-Bx5oWqaW.js.map} +1 -1
- package/dist/{feedback-trajectory-C4EG0nNH.d.ts → feedback-trajectory-BWmhRBGu.d.ts} +7 -9
- package/dist/feedback-trajectory-BWmhRBGu.d.ts.map +1 -0
- package/dist/{semantic-concept-judge-BQF8te0T.js → findings-store-BtTzPL0d.js} +9 -249
- package/dist/findings-store-BtTzPL0d.js.map +1 -0
- package/dist/fuzz.d.ts +19 -62
- package/dist/fuzz.d.ts.map +1 -1
- package/dist/fuzz.js +62 -108
- package/dist/fuzz.js.map +1 -1
- package/dist/{hf-dataset-BR2yhuNn.js → hf-dataset-CKxIJQba.js} +4 -24
- package/dist/hf-dataset-CKxIJQba.js.map +1 -0
- package/dist/hosted/index.d.ts +2 -2
- package/dist/hosted/index.js +2 -2
- package/dist/{index-CyszSg4O.d.ts → index-B16FNdW5.d.ts} +145 -360
- package/dist/index-B16FNdW5.d.ts.map +1 -0
- package/dist/{index-DV-jSzxF.d.ts → index-BLGqZ81N.d.ts} +10 -15
- package/dist/{index-DV-jSzxF.d.ts.map → index-BLGqZ81N.d.ts.map} +1 -1
- package/dist/{index-BO41eGj5.d.ts → index-CX-GAUpw.d.ts} +3 -7
- package/dist/index-CX-GAUpw.d.ts.map +1 -0
- package/dist/{index-DHKEAv3s.d.ts → index-CalAsXMR.d.ts} +8 -68
- package/dist/index-CalAsXMR.d.ts.map +1 -0
- package/dist/{index-BFRO6chs.d.ts → index-CiRwLv2R.d.ts} +5 -69
- package/dist/index-CiRwLv2R.d.ts.map +1 -0
- package/dist/{index-DPcngtwt.d.ts → index-DbMOXYnP.d.ts} +11 -36
- package/dist/index-DbMOXYnP.d.ts.map +1 -0
- package/dist/index.d.ts +211 -218
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +999 -1714
- package/dist/index.js.map +1 -1
- package/dist/{integrity-dLiDe2kD.js → integrity-C8oUeB0g.js} +326 -203
- package/dist/integrity-C8oUeB0g.js.map +1 -0
- package/dist/{integrity-BXOsAb3i.js → integrity-W4CADcFc.js} +3 -7
- package/dist/{integrity-BXOsAb3i.js.map → integrity-W4CADcFc.js.map} +1 -1
- package/dist/{integrity-DAMEDFaC.d.ts → integrity-_qgZLA5p.d.ts} +4 -6
- package/dist/{integrity-DAMEDFaC.d.ts.map → integrity-_qgZLA5p.d.ts.map} +1 -1
- package/dist/{internal-Epl-YBZW.js → internal-BTK91Bqt.js} +3 -3
- package/dist/{internal-Epl-YBZW.js.map → internal-BTK91Bqt.js.map} +1 -1
- package/dist/{interval-CELpye1n.js → interval-Dq9gt7jx.js} +3 -3
- package/dist/{interval-CELpye1n.js.map → interval-Dq9gt7jx.js.map} +1 -1
- package/dist/{journal-DfRz9kps.js → journal-C7om8Gum.js} +157 -147
- package/dist/journal-C7om8Gum.js.map +1 -0
- package/dist/json-BhdsJaOQ.js +111 -0
- package/dist/json-BhdsJaOQ.js.map +1 -0
- package/dist/{judge-calibration-BpCy5XQl.js → judge-calibration-BkXMIWA4.js} +3 -3
- package/dist/{judge-calibration-BpCy5XQl.js.map → judge-calibration-BkXMIWA4.js.map} +1 -1
- package/dist/{judge-gate-iY9s4L44.js → judge-gate-Co5tuh57.js} +4 -27
- package/dist/{judge-gate-iY9s4L44.js.map → judge-gate-Co5tuh57.js.map} +1 -1
- package/dist/{judge-gate-CE7CQAgt.d.ts → judge-gate-DsL0yFcb.d.ts} +8 -9
- package/dist/judge-gate-DsL0yFcb.d.ts.map +1 -0
- package/dist/{kind-factory-BobI5Jy3.js → kind-factory-Gy4fXixd.js} +88 -17
- package/dist/kind-factory-Gy4fXixd.js.map +1 -0
- package/dist/ledger-core/index.d.ts +2 -2
- package/dist/ledger-core/index.js +4 -4
- 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-Gq7yp8lP.js → ledger-core-CAxUdDk0.js} +5 -84
- package/dist/ledger-core-CAxUdDk0.js.map +1 -0
- package/dist/{llm-client-CyBAoYiX.js → llm-client-_Y6ic-tf.js} +243 -355
- package/dist/llm-client-_Y6ic-tf.js.map +1 -0
- package/dist/{llm-judge-CG12SQJq.js → llm-judge-Djxh-Uhs.js} +662 -482
- 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/index.d.ts +3 -3
- package/dist/matrix/index.js +3 -2
- package/dist/{matrix-Dm0BQW7U.js → matrix-B8l-Nsxd.js} +3 -88
- package/dist/matrix-B8l-Nsxd.js.map +1 -0
- package/dist/{matrix-DSrSxjjy.d.ts → matrix-CCSBna4q.d.ts} +9 -18
- package/dist/matrix-CCSBna4q.d.ts.map +1 -0
- package/dist/{mean-DHoMiudD.js → mean-BbA_JCzW.js} +39 -5
- package/dist/mean-BbA_JCzW.js.map +1 -0
- package/dist/meta-eval/index.d.ts +5 -5
- package/dist/meta-eval/index.js +10 -10
- package/dist/metrics-BKaPBtIG.js.map +1 -1
- package/dist/{mint-DNU8QPG4.d.ts → mint-BRZXuwRi.d.ts} +4 -4
- package/dist/{mint-DNU8QPG4.d.ts.map → mint-BRZXuwRi.d.ts.map} +1 -1
- package/dist/{mint-QaD5cA0u.js → mint-CbdwjTPW.js} +4 -4
- package/dist/{mint-QaD5cA0u.js.map → mint-CbdwjTPW.js.map} +1 -1
- package/dist/{multi-layer-verifier-BUaQ4C17.d.ts → multi-layer-verifier-DEgMUk6v.d.ts} +2 -2
- package/dist/{multi-layer-verifier-BUaQ4C17.d.ts.map → multi-layer-verifier-DEgMUk6v.d.ts.map} +1 -1
- package/dist/{multiplicity-DQUFcbW4.js → multiplicity-Sg0U7h8j.js} +2 -2
- package/dist/{multiplicity-DQUFcbW4.js.map → multiplicity-Sg0U7h8j.js.map} +1 -1
- package/dist/multishot/golden/index.d.ts +1 -23
- package/dist/multishot/golden/index.d.ts.map +1 -1
- package/dist/multishot/golden/index.js +3 -3
- package/dist/multishot/golden/index.js.map +1 -1
- package/dist/multishot/index.d.ts +3 -12
- package/dist/multishot/index.d.ts.map +1 -1
- package/dist/multishot/index.js +4 -3
- package/dist/multishot/index.js.map +1 -1
- package/dist/openapi.json +114 -10
- package/dist/{otel-spans-B9tUXRHF.js → otel-spans-CdN909k1.js} +3 -3
- package/dist/{otel-spans-B9tUXRHF.js.map → otel-spans-CdN909k1.js.map} +1 -1
- package/dist/{paired-arms-CwMGJsrS.js → paired-arms-Ct4LTKc1.js} +32 -9
- package/dist/paired-arms-Ct4LTKc1.js.map +1 -0
- package/dist/{paired-binary-CvpFHfKZ.js → paired-binary-B_nejA44.js} +3 -36
- package/dist/paired-binary-B_nejA44.js.map +1 -0
- package/dist/{paired-promotion-decision-DPKz8ZnF.d.ts → paired-promotion-decision-CQMJ5xGN.d.ts} +2 -34
- package/dist/paired-promotion-decision-CQMJ5xGN.d.ts.map +1 -0
- package/dist/{paired-promotion-decision-DsAPYGCm.js → paired-promotion-decision-D0SHb-ZL.js} +3 -3
- package/dist/{paired-promotion-decision-DsAPYGCm.js.map → paired-promotion-decision-D0SHb-ZL.js.map} +1 -1
- package/dist/{pareto-Cm6ndrWN.js → pareto-CTv8vozZ.js} +11 -11
- package/dist/pareto-CTv8vozZ.js.map +1 -0
- package/dist/pipelines/index.d.ts +16 -19
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +4 -68
- package/dist/pipelines/index.js.map +1 -1
- package/dist/{power-and-mde-Hj2ubb4B.js → power-and-mde-N5nU4_Ly.js} +3 -3
- package/dist/{power-and-mde-Hj2ubb4B.js.map → power-and-mde-N5nU4_Ly.js.map} +1 -1
- package/dist/{prime-protocol-CHKgA3a6.js → prime-protocol-BFgGrEMP.js} +3 -3
- package/dist/prime-protocol-BFgGrEMP.js.map +1 -0
- package/dist/{prime-protocol-HiB9HX7E.d.ts → prime-protocol-BWG2DQIk.d.ts} +3 -21
- package/dist/prime-protocol-BWG2DQIk.d.ts.map +1 -0
- package/dist/profile-cell.d.ts +2 -2
- package/dist/profile-cell.js +2 -2
- package/dist/{promotion-gate-BawrdPYr.d.ts → promotion-gate-CxEHRsZW.d.ts} +7 -8
- package/dist/{promotion-gate-BawrdPYr.d.ts.map → promotion-gate-CxEHRsZW.d.ts.map} +1 -1
- package/dist/{promotion-policy-KO57gbyV.js → promotion-policy-6A8osGr_.js} +4 -4
- package/dist/{promotion-policy-KO57gbyV.js.map → promotion-policy-6A8osGr_.js.map} +1 -1
- package/dist/{proposal-findings-CY1xKn_a.js → proposal-findings-n-5WBbEx.js} +3 -3
- package/dist/proposal-findings-n-5WBbEx.js.map +1 -0
- package/dist/{query-BUCZCK7F.js → query-B_RZ36an.js} +5 -5
- package/dist/query-B_RZ36an.js.map +1 -0
- package/dist/{query-DK1nWcmp.d.ts → query-Cmv_U8vf.d.ts} +4 -24
- package/dist/{query-DK1nWcmp.d.ts.map → query-Cmv_U8vf.d.ts.map} +1 -1
- package/dist/{random-ByUSnV9w.js → random-DDDcC7YU.js} +2 -2
- package/dist/{random-ByUSnV9w.js.map → random-DDDcC7YU.js.map} +1 -1
- package/dist/{raw-provider-sink-DoHz4JNG.js → raw-provider-sink-75w4FWBj.js} +2 -2
- package/dist/{raw-provider-sink-DoHz4JNG.js.map → raw-provider-sink-75w4FWBj.js.map} +1 -1
- package/dist/{redact-mtCCcT8z.d.ts → redact-DXdlFb_U.d.ts} +2 -3
- package/dist/redact-DXdlFb_U.d.ts.map +1 -0
- package/dist/{redact-B5xXKqQ3.js → redact-mtkTiJVk.js} +2 -7
- package/dist/{redact-B5xXKqQ3.js.map → redact-mtkTiJVk.js.map} +1 -1
- package/dist/{registry-D7_hm2fK.d.ts → registry-ssNoHzwD.d.ts} +4 -4
- package/dist/{registry-D7_hm2fK.d.ts.map → registry-ssNoHzwD.d.ts.map} +1 -1
- package/dist/{release-confidence-CpuP65S5.js → release-confidence-CYIFH-fp.js} +6 -11
- package/dist/release-confidence-CYIFH-fp.js.map +1 -0
- package/dist/{report-command-SC9nqb4M.js → render-Cs34y0iX.js} +625 -587
- package/dist/render-Cs34y0iX.js.map +1 -0
- package/dist/reporting.d.ts +6 -6
- package/dist/reporting.js +8 -8
- package/dist/{researcher-CEcfku-T.d.ts → researcher-GU1tV4dn.d.ts} +9 -9
- package/dist/{researcher-CEcfku-T.d.ts.map → researcher-GU1tV4dn.d.ts.map} +1 -1
- package/dist/{reward-CpCmAM8L.d.ts → reward-DrZ71vnf.d.ts} +3 -26
- package/dist/reward-DrZ71vnf.d.ts.map +1 -0
- package/dist/{reward-hacking-E0d-WVcP.js → reward-hacking-ByuETaIb.js} +3 -3
- package/dist/{reward-hacking-E0d-WVcP.js.map → reward-hacking-ByuETaIb.js.map} +1 -1
- package/dist/{reward-hacking-RVdZ6Kkt.d.ts → reward-hacking-E52wq86n.d.ts} +5 -18
- package/dist/reward-hacking-E52wq86n.d.ts.map +1 -0
- package/dist/reward-nw2xZGZG.js.map +1 -1
- package/dist/rl.d.ts +117 -295
- package/dist/rl.d.ts.map +1 -1
- package/dist/rl.js +27 -747
- package/dist/rl.js.map +1 -1
- package/dist/rollout/index.d.ts +5 -5
- package/dist/rollout/index.js +7 -8
- package/dist/{rollout-DZV1t2Wg.js → rollout-Dd1ucT_M.js} +88 -13
- package/dist/rollout-Dd1ucT_M.js.map +1 -0
- package/dist/{rubric-predictive-validity-DaFW70y9.js → rubric-predictive-validity-D3_oI72N.js} +3 -3
- package/dist/{rubric-predictive-validity-DaFW70y9.js.map → rubric-predictive-validity-D3_oI72N.js.map} +1 -1
- package/dist/{rubric-predictive-validity-C03EC7ZE.d.ts → rubric-predictive-validity-DiwT8PbL.d.ts} +2 -2
- package/dist/{rubric-predictive-validity-C03EC7ZE.d.ts.map → rubric-predictive-validity-DiwT8PbL.d.ts.map} +1 -1
- package/dist/{run-record-C1E24G2A.d.ts → run-record-CaxbLq6Y.d.ts} +4 -10
- package/dist/run-record-CaxbLq6Y.d.ts.map +1 -0
- package/dist/{run-record-C5e7FjhJ.js → run-record-CysKLB93.js} +3 -3
- package/dist/run-record-CysKLB93.js.map +1 -0
- package/dist/{run-record-Boc5IUTp.js → run-record-DhEJgoPz.js} +4 -4
- package/dist/{run-record-Boc5IUTp.js.map → run-record-DhEJgoPz.js.map} +1 -1
- package/dist/sandbox-harness-BlSOu4LX.d.ts.map +1 -1
- package/dist/{schema-CSf6qWgZ.js → schema-Bt2vLFm3.js} +2 -14
- package/dist/schema-Bt2vLFm3.js.map +1 -0
- package/dist/schema-C-ziyJD7.d.ts.map +1 -1
- package/dist/{schema-BuiujZ-g.js → schema-CvhfLjtZ.js} +78 -48
- package/dist/schema-CvhfLjtZ.js.map +1 -0
- package/dist/{schema-2g7trUwH.d.ts → schema-D6EVKzTB.d.ts} +4 -5
- package/dist/schema-D6EVKzTB.d.ts.map +1 -0
- package/dist/search/index.d.ts +3 -31
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/{search-kernel-DyNEa6IU.d.ts → search-kernel-p9JB3SmL.d.ts} +10 -27
- package/dist/search-kernel-p9JB3SmL.d.ts.map +1 -0
- package/dist/{search-ledger-CVUGLDZp.js → search-ledger-ClpN4I3e.js} +7 -7
- package/dist/{search-ledger-CVUGLDZp.js.map → search-ledger-ClpN4I3e.js.map} +1 -1
- package/dist/{search-ledger-file-DDQUgvCg.js → search-ledger-file-Bd5Tioq6.js} +4 -4
- package/dist/search-ledger-file-Bd5Tioq6.js.map +1 -0
- package/dist/{search-shipper-BOSD46qv.js → search-shipper-Bg2HW3Uv.js} +4 -4
- package/dist/search-shipper-Bg2HW3Uv.js.map +1 -0
- package/dist/{search-summary-BQCSWf1g.js → search-summary-CrBuvVnf.js} +5 -5
- package/dist/{search-summary-BQCSWf1g.js.map → search-summary-CrBuvVnf.js.map} +1 -1
- package/dist/{sequential-CzK5DarL.js → sequential-BVv1sjsw.js} +2 -32
- package/dist/{sequential-CzK5DarL.js.map → sequential-BVv1sjsw.js.map} +1 -1
- package/dist/{sequential-Bf_pbE50.js → sequential-CimQrbjv.js} +5 -5
- package/dist/sequential-CimQrbjv.js.map +1 -0
- package/dist/{sequential-BhsrMupG.d.ts → sequential-KwGspfeR.d.ts} +2 -9
- package/dist/{sequential-BhsrMupG.d.ts.map → sequential-KwGspfeR.d.ts.map} +1 -1
- package/dist/{sequential-eprocess-DM_qENCl.js → sequential-eprocess-DodI6RoF.js} +2 -2
- package/dist/{sequential-eprocess-DM_qENCl.js.map → sequential-eprocess-DodI6RoF.js.map} +1 -1
- package/dist/{server-e9oWO_bN.js → server-C6M0qR8h.js} +101 -101
- package/dist/server-C6M0qR8h.js.map +1 -0
- package/dist/{single-run-lock-CV9Eyd_q.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-BiwA8nfX.js → skillopt-optimization-method-5dlex7MJ.js} +1386 -1184
- package/dist/skillopt-optimization-method-5dlex7MJ.js.map +1 -0
- package/dist/{spans-BHAUXMGN.d.ts → spans-CVngGij3.d.ts} +2 -2
- package/dist/{spans-BHAUXMGN.d.ts.map → spans-CVngGij3.d.ts.map} +1 -1
- package/dist/{statistical-heldout-CYpGaoDH.d.ts → statistical-heldout-BHfLZHrm.d.ts} +8 -67
- package/dist/statistical-heldout-BHfLZHrm.d.ts.map +1 -0
- package/dist/{statistical-heldout-42NlCNDe.js → statistical-heldout-Bksv92Th.js} +3 -3
- package/dist/statistical-heldout-Bksv92Th.js.map +1 -0
- package/dist/{steps-Bg5-KVx1.d.ts → steps-DlepJPwD.d.ts} +2 -56
- package/dist/steps-DlepJPwD.d.ts.map +1 -0
- package/dist/{store-C4avFjIi.d.ts → store-B3nWRy3B.d.ts} +2 -2
- package/dist/{store-C4avFjIi.d.ts.map → store-B3nWRy3B.d.ts.map} +1 -1
- package/dist/{store-otlp-DJ9dtA5x.js → store-otlp-BteDAbHK.js} +3 -3
- package/dist/{store-otlp-DJ9dtA5x.js.map → store-otlp-BteDAbHK.js.map} +1 -1
- package/dist/{store-tool-spans-CIX5arAG.js → store-tool-spans-D5l_OfTJ.js} +8 -8
- package/dist/store-tool-spans-D5l_OfTJ.js.map +1 -0
- package/dist/{store-tool-spans-DdCSPa7C.d.ts → store-tool-spans-DZS0HWVf.d.ts} +9 -18
- package/dist/store-tool-spans-DZS0HWVf.d.ts.map +1 -0
- package/dist/storyboard/index.d.ts +4 -11
- package/dist/storyboard/index.d.ts.map +1 -1
- package/dist/storyboard/index.js +1 -16
- package/dist/storyboard/index.js.map +1 -1
- package/dist/{summary-report-V_JACR4Y.js → summary-report-BsXJoYX5.js} +88 -10
- package/dist/summary-report-BsXJoYX5.js.map +1 -0
- package/dist/{summary-report-bdFDXq0b.d.ts → summary-report-CkbRcSuu.d.ts} +25 -19
- package/dist/summary-report-CkbRcSuu.d.ts.map +1 -0
- package/dist/supervisor-run/index.d.ts +60 -28
- package/dist/supervisor-run/index.d.ts.map +1 -1
- package/dist/supervisor-run/index.js +4 -458
- package/dist/supervisor-run/index.js.map +1 -1
- package/dist/{systemone-BomhHr2c.d.ts → systemone-BMzDJb1i.d.ts} +5 -5
- package/dist/{systemone-BomhHr2c.d.ts.map → systemone-BMzDJb1i.d.ts.map} +1 -1
- package/dist/systemone-protocol.js +1 -1
- package/dist/{systemone-review-CUVcQJu6.d.ts → systemone-review-CwE6JGIp.d.ts} +2 -2
- package/dist/{systemone-review-CUVcQJu6.d.ts.map → systemone-review-CwE6JGIp.d.ts.map} +1 -1
- package/dist/{systemone-review-D7sXwsqq.js → systemone-review-DzdOJ8I6.js} +3 -3
- package/dist/{systemone-review-D7sXwsqq.js.map → systemone-review-DzdOJ8I6.js.map} +1 -1
- package/dist/systemone.d.ts +5 -5
- package/dist/systemone.js +5 -5
- package/dist/systemone.js.map +1 -1
- package/dist/{task-failure-attributes-hEmASjix.js → task-failure-attributes-BMsblaDh.js} +3 -3
- package/dist/task-failure-attributes-BMsblaDh.js.map +1 -0
- package/dist/{terminal-record-DZyQZ3pz.js → terminal-record-D4Rv-j1W.js} +244 -196
- package/dist/terminal-record-D4Rv-j1W.js.map +1 -0
- package/dist/{tool-groups-C3NEcdCM.d.ts → tool-groups-DyNz2JZ_.d.ts} +3 -3
- package/dist/tool-groups-DyNz2JZ_.d.ts.map +1 -0
- package/dist/{tool-waste-BKgvd-TP.d.ts → tool-waste-CkjzWmeY.d.ts} +25 -28
- package/dist/tool-waste-CkjzWmeY.d.ts.map +1 -0
- package/dist/{tool-waste-BlesqTqW.js → tool-waste-DLsjS_p-.js} +5 -5
- package/dist/{tool-waste-BlesqTqW.js.map → tool-waste-DLsjS_p-.js.map} +1 -1
- package/dist/{trace-questions-CM2CAocU.d.ts → trace-questions-xxwgsuMi.d.ts} +4 -9
- package/dist/{trace-questions-CM2CAocU.d.ts.map → trace-questions-xxwgsuMi.d.ts.map} +1 -1
- package/dist/trace-repair/index.d.ts +14 -211
- package/dist/trace-repair/index.d.ts.map +1 -1
- package/dist/trace-repair/index.js +865 -981
- package/dist/trace-repair/index.js.map +1 -1
- package/dist/traces.d.ts +18 -46
- package/dist/traces.d.ts.map +1 -1
- package/dist/traces.js +13 -13
- package/dist/traces.js.map +1 -1
- package/dist/trajectory-replay/index.d.ts +7 -118
- package/dist/trajectory-replay/index.d.ts.map +1 -1
- package/dist/trajectory-replay/index.js +921 -869
- package/dist/trajectory-replay/index.js.map +1 -1
- package/dist/{tree-C1XYeXvy.js → tree-B5e1uAeL.js} +132 -21
- package/dist/tree-B5e1uAeL.js.map +1 -0
- package/dist/{types-Cbe2fWBa.d.ts → types-BKCzzmit.d.ts} +3 -3
- package/dist/{types-Cbe2fWBa.d.ts.map → types-BKCzzmit.d.ts.map} +1 -1
- package/dist/{types-B3jzCp0p.js → types-BXgASBCL.js} +2 -2
- package/dist/{types-B3jzCp0p.js.map → types-BXgASBCL.js.map} +1 -1
- package/dist/{types-C1tnkEgM.d.ts → types-CW8ewATZ.d.ts} +4 -113
- package/dist/types-CW8ewATZ.d.ts.map +1 -0
- package/dist/{types-BqkVmHfv.d.ts → types-CmXY0PQf.d.ts} +2 -4
- package/dist/types-CmXY0PQf.d.ts.map +1 -0
- package/dist/{types-C02qtnG8.d.ts → types-D-mgRzlh.d.ts} +7 -28
- package/dist/types-D-mgRzlh.d.ts.map +1 -0
- package/dist/{types-IXD2HJzu.js → types-DqFMNTgK.js} +2 -4
- package/dist/types-DqFMNTgK.js.map +1 -0
- package/dist/{types-Cq8mSbq8.d.ts → types-DtkO1G9L.d.ts} +7 -9
- package/dist/{types-Cq8mSbq8.d.ts.map → types-DtkO1G9L.d.ts.map} +1 -1
- package/dist/{verdict-Dl0tiT1X.js → verdict-BGQmxQ8A.js} +3 -3
- package/dist/verdict-BGQmxQ8A.js.map +1 -0
- package/dist/{verdict-E4eRNf7-.d.ts → verdict-C24NELtN.d.ts} +2 -15
- package/dist/{verdict-E4eRNf7-.d.ts.map → verdict-C24NELtN.d.ts.map} +1 -1
- package/dist/{verdict-cache-Bm8EKL2s.js → verdict-cache-CL_7tePD.js} +2 -2
- package/dist/verdict-cache-CL_7tePD.js.map +1 -0
- package/dist/wire/index.d.ts +31 -410
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +2 -2
- package/docs/changes/jev-evidence-review.md +1 -1
- package/docs/changes/jev-product-adoption.md +1 -1
- package/docs/changes/jev-recorded-evidence.md +1 -1
- package/docs/design/statistics-decisions.md +18 -18
- package/docs/design.md +1 -1
- package/docs/eval-surface-map.md +1 -0
- package/docs/evaluation-integrity.md +1 -1
- package/docs/profile-json-identity.md +1 -2
- package/docs/proofs/campaign-attempt-retention-20261001/README.md +2 -2
- package/docs/public-api.md +158 -538
- package/docs/rollout.md +1 -1
- package/docs/trace-repair-admission.md +1 -1
- package/docs/wire-protocol.md +1 -1
- package/package.json +7 -2
- package/dist/active-curriculum-B_Lc9kfO.js +0 -61
- package/dist/active-curriculum-B_Lc9kfO.js.map +0 -1
- package/dist/agent-profile-VFcQncbW.d.ts.map +0 -1
- package/dist/agent-profile-cell-BK8mlqlq.js.map +0 -1
- package/dist/agent-profile-cell-BNp-Js9F.d.ts.map +0 -1
- package/dist/agreement-irr-BEWLIF3_.js.map +0 -1
- package/dist/analyze-runs-C84irm4i.js.map +0 -1
- package/dist/baseline-Udi_PLuT.js +0 -259
- package/dist/baseline-Udi_PLuT.js.map +0 -1
- package/dist/benchmark-CXmVVHH2.js +0 -562
- package/dist/benchmark-CXmVVHH2.js.map +0 -1
- package/dist/benchmark-command-By0vh8q7.js.map +0 -1
- package/dist/campaign-BudZ70zo.js.map +0 -1
- package/dist/chat-json-call-puMArmtW.js.map +0 -1
- package/dist/claude-jsonl-dZir12m6.js +0 -86
- package/dist/claude-jsonl-dZir12m6.js.map +0 -1
- package/dist/client-BzL9niqi.d.ts.map +0 -1
- package/dist/cost-ledger-BP8V4kUQ.js.map +0 -1
- package/dist/counterfactual-CPaWN99-.d.ts +0 -60
- package/dist/counterfactual-CPaWN99-.d.ts.map +0 -1
- package/dist/counterfactual-Dn3veueY.js +0 -98
- package/dist/counterfactual-Dn3veueY.js.map +0 -1
- package/dist/default-registry-COhk9g36.js.map +0 -1
- package/dist/default-registry-DzHiGruW.d.ts.map +0 -1
- package/dist/define-agent-eval-CNTPzIkp.js.map +0 -1
- package/dist/define-agent-eval-WSck0CZJ.d.ts.map +0 -1
- package/dist/dspy-rlm-engine-LRCu61m5.js.map +0 -1
- package/dist/effect-sizes-BhzEpXMc.js +0 -82
- package/dist/effect-sizes-BhzEpXMc.js.map +0 -1
- package/dist/emitter-HcCmFQl_.d.ts.map +0 -1
- package/dist/engine-3A_4jOlI.d.ts.map +0 -1
- package/dist/equal-terms-BtdXayCJ.js.map +0 -1
- package/dist/eval-campaign-90jeaCAI.js +0 -343
- package/dist/eval-campaign-90jeaCAI.js.map +0 -1
- package/dist/evaluation-6Yoi74gM.d.ts.map +0 -1
- package/dist/exporters-X4xwla8A.js.map +0 -1
- package/dist/external-optimizer-process-BjMGUuds.js.map +0 -1
- package/dist/external-optimizer-subprocess-BqW0hHcI.js.map +0 -1
- package/dist/failure-cluster-CbgEDcFJ.d.ts.map +0 -1
- package/dist/feedback-trajectory-C4EG0nNH.d.ts.map +0 -1
- package/dist/hf-dataset-BR2yhuNn.js.map +0 -1
- package/dist/index-BFRO6chs.d.ts.map +0 -1
- package/dist/index-BO41eGj5.d.ts.map +0 -1
- package/dist/index-CyszSg4O.d.ts.map +0 -1
- package/dist/index-DHKEAv3s.d.ts.map +0 -1
- package/dist/index-DPcngtwt.d.ts.map +0 -1
- package/dist/integrity-dLiDe2kD.js.map +0 -1
- package/dist/journal-DfRz9kps.js.map +0 -1
- package/dist/judge-gate-CE7CQAgt.d.ts.map +0 -1
- package/dist/kind-factory-BobI5Jy3.js.map +0 -1
- package/dist/ledger-core-Gq7yp8lP.js.map +0 -1
- package/dist/llm-client-CyBAoYiX.js.map +0 -1
- package/dist/llm-judge-CG12SQJq.js.map +0 -1
- package/dist/matrix-DSrSxjjy.d.ts.map +0 -1
- package/dist/matrix-Dm0BQW7U.js.map +0 -1
- package/dist/mean-DHoMiudD.js.map +0 -1
- package/dist/normal-DsJZtrJc.js +0 -25
- package/dist/normal-DsJZtrJc.js.map +0 -1
- package/dist/paired-arms-CwMGJsrS.js.map +0 -1
- package/dist/paired-binary-CvpFHfKZ.js.map +0 -1
- package/dist/paired-promotion-decision-DPKz8ZnF.d.ts.map +0 -1
- package/dist/pareto-Cm6ndrWN.js.map +0 -1
- package/dist/prime-protocol-CHKgA3a6.js.map +0 -1
- package/dist/prime-protocol-HiB9HX7E.d.ts.map +0 -1
- package/dist/produced-state-BsDmnwxc.js.map +0 -1
- package/dist/proposal-findings-CY1xKn_a.js.map +0 -1
- package/dist/query-BUCZCK7F.js.map +0 -1
- package/dist/redact-mtCCcT8z.d.ts.map +0 -1
- package/dist/release-confidence-CpuP65S5.js.map +0 -1
- package/dist/report-command-SC9nqb4M.js.map +0 -1
- package/dist/reward-CpCmAM8L.d.ts.map +0 -1
- package/dist/reward-hacking-RVdZ6Kkt.d.ts.map +0 -1
- package/dist/rollout-DZV1t2Wg.js.map +0 -1
- package/dist/run-record-C1E24G2A.d.ts.map +0 -1
- package/dist/run-record-C5e7FjhJ.js.map +0 -1
- package/dist/schema-2g7trUwH.d.ts.map +0 -1
- package/dist/schema-BuiujZ-g.js.map +0 -1
- package/dist/schema-CSf6qWgZ.js.map +0 -1
- package/dist/search-kernel-DyNEa6IU.d.ts.map +0 -1
- package/dist/search-ledger-file-DDQUgvCg.js.map +0 -1
- package/dist/search-shipper-BOSD46qv.js.map +0 -1
- package/dist/semantic-concept-judge-BQF8te0T.js.map +0 -1
- package/dist/sequential-Bf_pbE50.js.map +0 -1
- package/dist/server-e9oWO_bN.js.map +0 -1
- package/dist/single-run-lock-CV9Eyd_q.js.map +0 -1
- package/dist/skillopt-optimization-method-BiwA8nfX.js.map +0 -1
- package/dist/statistical-heldout-42NlCNDe.js.map +0 -1
- package/dist/statistical-heldout-CYpGaoDH.d.ts.map +0 -1
- package/dist/steps-Bg5-KVx1.d.ts.map +0 -1
- package/dist/store-tool-spans-CIX5arAG.js.map +0 -1
- package/dist/store-tool-spans-DdCSPa7C.d.ts.map +0 -1
- package/dist/student-t-DVPW7CdL.js +0 -39
- package/dist/student-t-DVPW7CdL.js.map +0 -1
- package/dist/summary-report-V_JACR4Y.js.map +0 -1
- package/dist/summary-report-bdFDXq0b.d.ts.map +0 -1
- package/dist/task-failure-attributes-hEmASjix.js.map +0 -1
- package/dist/terminal-record-DZyQZ3pz.js.map +0 -1
- package/dist/tool-groups-C3NEcdCM.d.ts.map +0 -1
- package/dist/tool-waste-BKgvd-TP.d.ts.map +0 -1
- package/dist/trajectory-Y1fmdlw7.d.ts +0 -24
- package/dist/trajectory-Y1fmdlw7.d.ts.map +0 -1
- package/dist/tree-C1XYeXvy.js.map +0 -1
- package/dist/types-BqkVmHfv.d.ts.map +0 -1
- package/dist/types-C02qtnG8.d.ts.map +0 -1
- package/dist/types-C1tnkEgM.d.ts.map +0 -1
- package/dist/types-IXD2HJzu.js.map +0 -1
- package/dist/usage-receipt-Cx3xNeyB.js +0 -76
- package/dist/usage-receipt-Cx3xNeyB.js.map +0 -1
- package/dist/verdict-Dl0tiT1X.js.map +0 -1
- package/dist/verdict-cache-Bm8EKL2s.js.map +0 -1
- package/docs/design/self-improvement-evidence-audit.md +0 -263
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
import { s as ValidationError } from "./errors-DVZiqS7K.js";
|
|
2
|
-
import { t as interpolatedQuantile } from "./quantile--0yb07pD.js";
|
|
3
|
-
import { c as lnGamma, l as regularizedIncompleteBeta, t as assertFiniteSample$1 } from "./internal-Epl-YBZW.js";
|
|
4
|
-
import { n as cohensD } from "./effect-sizes-BhzEpXMc.js";
|
|
5
|
-
import { t as normalCdf } from "./normal-DsJZtrJc.js";
|
|
6
|
-
import { n as studentTQuantile } from "./student-t-DVPW7CdL.js";
|
|
7
|
-
//#region src/statistics/inference.ts
|
|
8
|
-
/** Two-sided normal tail, evaluated without subtracting a near-one CDF. */
|
|
9
|
-
function normalTwoSidedPValue(z) {
|
|
10
|
-
if (Number.isNaN(z)) throw new ValidationError("normalTwoSidedPValue: z must not be NaN");
|
|
11
|
-
return Math.min(1, 2 * normalCdf(-Math.abs(z)));
|
|
12
|
-
}
|
|
13
|
-
/** Two-sided Student-t tail, preserving small tail probabilities. */
|
|
14
|
-
function studentTTwoSidedPValue(t, df) {
|
|
15
|
-
if (Number.isNaN(t) || !Number.isFinite(df) || df <= 0) throw new ValidationError("studentTTwoSidedPValue: t must not be NaN and df must be positive and finite");
|
|
16
|
-
return regularizedIncompleteBeta(df / (df + t * t), df / 2, .5);
|
|
17
|
-
}
|
|
18
|
-
function table(a, b, c, d) {
|
|
19
|
-
if (![
|
|
20
|
-
a,
|
|
21
|
-
b,
|
|
22
|
-
c,
|
|
23
|
-
d
|
|
24
|
-
].every((value) => Number.isSafeInteger(value) && value >= 0) || !Number.isSafeInteger(a + b + c + d)) throw new ValidationError("contingency table: counts and total must be nonnegative safe integers");
|
|
25
|
-
return a + b + c + d;
|
|
26
|
-
}
|
|
27
|
-
/** Pearson statistic for a 2x2 table; empty or fixed margins have statistic zero. */
|
|
28
|
-
function chiSquared(a, b, c, d) {
|
|
29
|
-
const n = table(a, b, c, d);
|
|
30
|
-
if (!n) return 0;
|
|
31
|
-
const expected = [
|
|
32
|
-
(a + b) * (a + c) / n,
|
|
33
|
-
(a + b) * (b + d) / n,
|
|
34
|
-
(c + d) * (a + c) / n,
|
|
35
|
-
(c + d) * (b + d) / n
|
|
36
|
-
];
|
|
37
|
-
if (expected.some((value) => value === 0)) return 0;
|
|
38
|
-
return [
|
|
39
|
-
a,
|
|
40
|
-
b,
|
|
41
|
-
c,
|
|
42
|
-
d
|
|
43
|
-
].reduce((sum, value, i) => sum + (value - expected[i]) ** 2 / expected[i], 0);
|
|
44
|
-
}
|
|
45
|
-
/** One-degree-of-freedom chi-squared survival probability. */
|
|
46
|
-
function chiSquaredPValue(statistic) {
|
|
47
|
-
if (Number.isNaN(statistic) || statistic < 0) throw new ValidationError("chiSquaredPValue: statistic must be nonnegative and not NaN");
|
|
48
|
-
return normalTwoSidedPValue(Math.sqrt(statistic));
|
|
49
|
-
}
|
|
50
|
-
/** Fisher two-sided probability: sum all fixed-margin tables no likelier than the observed table. */
|
|
51
|
-
function fisherExactTwoSided(a, b, c, d) {
|
|
52
|
-
const n = table(a, b, c, d), row1 = a + b, row2 = c + d, col1 = a + c;
|
|
53
|
-
if (!n || !row1 || !row2 || !col1 || col1 === n) return 1;
|
|
54
|
-
const logChoose = (total, count) => lnGamma(total + 1) - lnGamma(count + 1) - lnGamma(total - count + 1);
|
|
55
|
-
const denominator = logChoose(n, col1);
|
|
56
|
-
const logP = (count) => logChoose(row1, count) + logChoose(row2, col1 - count) - denominator;
|
|
57
|
-
const threshold = logP(a) + 1e-7;
|
|
58
|
-
let p = 0;
|
|
59
|
-
for (let k = Math.max(0, col1 - row2); k <= Math.min(row1, col1); k++) {
|
|
60
|
-
const probability = logP(k);
|
|
61
|
-
if (probability <= threshold) p += Math.exp(probability);
|
|
62
|
-
}
|
|
63
|
-
return Math.min(1, p);
|
|
64
|
-
}
|
|
65
|
-
/** Fisher when any expected count is below five; otherwise Pearson's chi-squared tail. */
|
|
66
|
-
function twoByTwoPValue(a, b, c, d) {
|
|
67
|
-
const n = table(a, b, c, d);
|
|
68
|
-
if (!n) return 1;
|
|
69
|
-
return Math.min((a + b) * (a + c), (a + b) * (b + d), (c + d) * (a + c), (c + d) * (b + d)) / n < 5 ? fisherExactTwoSided(a, b, c, d) : chiSquaredPValue(chiSquared(a, b, c, d));
|
|
70
|
-
}
|
|
71
|
-
/** Centered least-squares slope; null p-value means no slope test was possible. */
|
|
72
|
-
function linearRegressionSlope(points) {
|
|
73
|
-
assertFiniteSample$1("linearRegressionSlope", "x", points.map((point) => point.x));
|
|
74
|
-
assertFiniteSample$1("linearRegressionSlope", "y", points.map((point) => point.y));
|
|
75
|
-
if (points.length < 2) return {
|
|
76
|
-
slope: 0,
|
|
77
|
-
rSquared: 0,
|
|
78
|
-
slopePValue: null
|
|
79
|
-
};
|
|
80
|
-
const n = points.length;
|
|
81
|
-
const meanX = points.reduce((sum, point) => sum + point.x / n, 0);
|
|
82
|
-
const meanY = points.reduce((sum, point) => sum + point.y / n, 0);
|
|
83
|
-
const sxx = points.reduce((sum, point) => sum + (point.x - meanX) ** 2, 0);
|
|
84
|
-
const syy = points.reduce((sum, point) => sum + (point.y - meanY) ** 2, 0);
|
|
85
|
-
const sxy = points.reduce((sum, point) => sum + (point.x - meanX) * (point.y - meanY), 0);
|
|
86
|
-
if (!sxx) return {
|
|
87
|
-
slope: 0,
|
|
88
|
-
rSquared: 0,
|
|
89
|
-
slopePValue: null
|
|
90
|
-
};
|
|
91
|
-
const slope = sxy / sxx;
|
|
92
|
-
const residual = points.reduce((sum, point) => sum + (point.y - meanY - slope * (point.x - meanX)) ** 2, 0);
|
|
93
|
-
if (![
|
|
94
|
-
slope,
|
|
95
|
-
residual,
|
|
96
|
-
sxx,
|
|
97
|
-
sxy,
|
|
98
|
-
syy
|
|
99
|
-
].every(Number.isFinite)) throw new ValidationError("linearRegressionSlope: sample arithmetic exceeded finite range");
|
|
100
|
-
return {
|
|
101
|
-
slope,
|
|
102
|
-
rSquared: syy === 0 ? 0 : Math.max(0, 1 - residual / syy),
|
|
103
|
-
slopePValue: n < 3 ? null : residual === 0 ? slope === 0 ? 1 : 0 : studentTTwoSidedPValue(slope / Math.sqrt(residual / (n - 2) / sxx), n - 2)
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
//#endregion
|
|
107
|
-
//#region src/baseline.ts
|
|
108
|
-
/**
|
|
109
|
-
* Baseline regression detection.
|
|
110
|
-
*
|
|
111
|
-
* Lifted from ADC baseline.ts. Every promotion-blocking signal boils down
|
|
112
|
-
* to: "is this run measurably worse than baseline?" — with enough
|
|
113
|
-
* statistical rigor to distinguish noise from drift.
|
|
114
|
-
*
|
|
115
|
-
* Uses:
|
|
116
|
-
* - Welch's t-test (unequal variance) for per-metric mean comparison
|
|
117
|
-
* - Cohen's d for effect size magnitude
|
|
118
|
-
* - IQR for stability flag (unstable samples can't be trusted for comparisons)
|
|
119
|
-
*
|
|
120
|
-
* Returns a structured verdict: improved | regressed | stable | unstable.
|
|
121
|
-
*/
|
|
122
|
-
/**
|
|
123
|
-
* Compare candidate samples against baseline per metric. Verdict logic:
|
|
124
|
-
* - unstable: IQR/|mean| > threshold on either set — not enough signal
|
|
125
|
-
* - improved: meaningful effect in the "better" direction AND p < alpha
|
|
126
|
-
* - regressed: meaningful effect in the "worse" direction AND p < alpha
|
|
127
|
-
* - stable: otherwise (no significant change)
|
|
128
|
-
*/
|
|
129
|
-
function compareToBaseline(samples, options = {}) {
|
|
130
|
-
const effectThreshold = options.effectThreshold ?? .5;
|
|
131
|
-
const alpha = options.alpha ?? .05;
|
|
132
|
-
const cvThreshold = options.unstableCvThreshold ?? .3;
|
|
133
|
-
const metrics = samples.map((s) => {
|
|
134
|
-
const comparison = welchsTTest(s.baseline, s.candidate);
|
|
135
|
-
if (comparison.status === "insufficient-sample") throw new Error(`compareToBaseline: need ≥2 samples per side for "${s.metric}"`);
|
|
136
|
-
const { meanA: bMean, meanB: cMean, delta, cohensD: d, t, df, p } = comparison;
|
|
137
|
-
const baselineIqr = iqr(s.baseline);
|
|
138
|
-
const candidateIqr = iqr(s.candidate);
|
|
139
|
-
const baselineStable = baselineIqr / Math.max(Math.abs(bMean), 1e-9) <= cvThreshold;
|
|
140
|
-
const candidateStable = candidateIqr / Math.max(Math.abs(cMean), 1e-9) <= cvThreshold;
|
|
141
|
-
const stable = baselineStable && candidateStable;
|
|
142
|
-
const reportedIqr = Math.max(baselineIqr, candidateIqr);
|
|
143
|
-
const effectClears = d === null || Math.abs(d) >= effectThreshold;
|
|
144
|
-
let verdict;
|
|
145
|
-
if (!stable) verdict = "unstable";
|
|
146
|
-
else if (comparison.status === "ok" && p < alpha && effectClears) verdict = (s.higherIsBetter ? delta > 0 : delta < 0) ? "improved" : "regressed";
|
|
147
|
-
else verdict = "stable";
|
|
148
|
-
return {
|
|
149
|
-
metric: s.metric,
|
|
150
|
-
baselineMean: bMean,
|
|
151
|
-
candidateMean: cMean,
|
|
152
|
-
delta,
|
|
153
|
-
cohensD: d,
|
|
154
|
-
welchT: t,
|
|
155
|
-
welchDf: df,
|
|
156
|
-
welchP: p,
|
|
157
|
-
stable,
|
|
158
|
-
iqr: reportedIqr,
|
|
159
|
-
verdict
|
|
160
|
-
};
|
|
161
|
-
});
|
|
162
|
-
return {
|
|
163
|
-
metrics,
|
|
164
|
-
hasRegression: metrics.some((m) => m.verdict === "regressed"),
|
|
165
|
-
hasUnstable: metrics.some((m) => m.verdict === "unstable")
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
function mean(xs) {
|
|
169
|
-
return xs.length ? xs.reduce((sum, value) => sum + value / xs.length, 0) : NaN;
|
|
170
|
-
}
|
|
171
|
-
/** Inter-quartile range; 0 when the sample has no spread. */
|
|
172
|
-
function iqr(xs) {
|
|
173
|
-
if (xs.length === 0) return 0;
|
|
174
|
-
const sorted = [...xs].sort((a, b) => a - b);
|
|
175
|
-
return interpolatedQuantile(sorted, .75) - interpolatedQuantile(sorted, .25);
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Welch's t-test and 95% interval for two independent samples.
|
|
179
|
-
*
|
|
180
|
-
* Uses the Student-t distribution at every finite degree of freedom. Fewer
|
|
181
|
-
* than two observations per side and zero observed standard error cannot
|
|
182
|
-
* define a t reference distribution; those cases return an explicit status,
|
|
183
|
-
* `NaN` inferential fields, and no interval rather than fabricated certainty.
|
|
184
|
-
*/
|
|
185
|
-
function welchsTTest(a, b) {
|
|
186
|
-
assertFiniteSample("a", a);
|
|
187
|
-
assertFiniteSample("b", b);
|
|
188
|
-
const mA = mean(a);
|
|
189
|
-
const mB = mean(b);
|
|
190
|
-
const delta = mB - mA;
|
|
191
|
-
if (a.length && !Number.isFinite(mA) || b.length && !Number.isFinite(mB) || a.length && b.length && !Number.isFinite(delta)) throw new RangeError("welchsTTest: sample arithmetic exceeded finite range");
|
|
192
|
-
if (a.length < 2 || b.length < 2) return {
|
|
193
|
-
status: "insufficient-sample",
|
|
194
|
-
meanA: mA,
|
|
195
|
-
meanB: mB,
|
|
196
|
-
delta,
|
|
197
|
-
standardError: NaN,
|
|
198
|
-
t: NaN,
|
|
199
|
-
df: NaN,
|
|
200
|
-
p: NaN,
|
|
201
|
-
ci95: null,
|
|
202
|
-
cohensD: null
|
|
203
|
-
};
|
|
204
|
-
const vA = variance(a, mA);
|
|
205
|
-
const vB = variance(b, mB);
|
|
206
|
-
const seSquared = vA / a.length + vB / b.length;
|
|
207
|
-
if (!Number.isFinite(seSquared)) throw new RangeError("welchsTTest: sample arithmetic exceeded finite range");
|
|
208
|
-
const d = cohensD(a, b);
|
|
209
|
-
if (seSquared === 0) return {
|
|
210
|
-
status: "zero-variance",
|
|
211
|
-
meanA: mA,
|
|
212
|
-
meanB: mB,
|
|
213
|
-
delta,
|
|
214
|
-
standardError: 0,
|
|
215
|
-
t: delta === 0 ? 0 : Math.sign(delta) * Number.POSITIVE_INFINITY,
|
|
216
|
-
df: NaN,
|
|
217
|
-
p: NaN,
|
|
218
|
-
ci95: null,
|
|
219
|
-
cohensD: null
|
|
220
|
-
};
|
|
221
|
-
const standardError = Math.sqrt(seSquared);
|
|
222
|
-
const t = delta / standardError;
|
|
223
|
-
const fractionA = vA / a.length / seSquared;
|
|
224
|
-
const fractionB = vB / b.length / seSquared;
|
|
225
|
-
const df = 1 / (fractionA ** 2 / (a.length - 1) + fractionB ** 2 / (b.length - 1));
|
|
226
|
-
const p = studentTTwoSidedPValue(t, df);
|
|
227
|
-
if (d === null) throw new Error("welchsTTest: non-zero standard error produced no pooled effect size");
|
|
228
|
-
const halfWidth = studentTQuantile(.975, df) * standardError;
|
|
229
|
-
if (![
|
|
230
|
-
df,
|
|
231
|
-
d,
|
|
232
|
-
halfWidth,
|
|
233
|
-
delta - halfWidth,
|
|
234
|
-
delta + halfWidth
|
|
235
|
-
].every(Number.isFinite)) throw new RangeError("welchsTTest: sample arithmetic exceeded finite range");
|
|
236
|
-
return {
|
|
237
|
-
status: "ok",
|
|
238
|
-
meanA: mA,
|
|
239
|
-
meanB: mB,
|
|
240
|
-
delta,
|
|
241
|
-
standardError,
|
|
242
|
-
t,
|
|
243
|
-
df,
|
|
244
|
-
p,
|
|
245
|
-
ci95: [delta - halfWidth, delta + halfWidth],
|
|
246
|
-
cohensD: d
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
function variance(xs, m) {
|
|
250
|
-
return xs.reduce((acc, x) => acc + (x - m) ** 2, 0) / (xs.length - 1);
|
|
251
|
-
}
|
|
252
|
-
function assertFiniteSample(name, sample) {
|
|
253
|
-
const invalid = sample.find((value) => !Number.isFinite(value));
|
|
254
|
-
if (invalid !== void 0) throw new RangeError(`welchsTTest: sample ${name} must contain only finite values, got ${invalid}`);
|
|
255
|
-
}
|
|
256
|
-
//#endregion
|
|
257
|
-
export { chiSquaredPValue as a, normalTwoSidedPValue as c, chiSquared as i, studentTTwoSidedPValue as l, iqr as n, fisherExactTwoSided as o, welchsTTest as r, linearRegressionSlope as s, compareToBaseline as t, twoByTwoPValue as u };
|
|
258
|
-
|
|
259
|
-
//# sourceMappingURL=baseline-Udi_PLuT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"baseline-Udi_PLuT.js","names":[],"sources":["../src/statistics/inference.ts","../src/baseline.ts"],"sourcesContent":["import { ValidationError } from '../errors'\nimport { normalCdf } from '../math/normal'\nimport { lnGamma, regularizedIncompleteBeta } from '../math/special-functions'\nimport { assertFiniteSample } from './internal'\n\n/** Two-sided normal tail, evaluated without subtracting a near-one CDF. */\nexport function normalTwoSidedPValue(z: number): number {\n if (Number.isNaN(z)) throw new ValidationError('normalTwoSidedPValue: z must not be NaN')\n return Math.min(1, 2 * normalCdf(-Math.abs(z)))\n}\n\n/** Two-sided Student-t tail, preserving small tail probabilities. */\nexport function studentTTwoSidedPValue(t: number, df: number): number {\n if (Number.isNaN(t) || !Number.isFinite(df) || df <= 0) {\n throw new ValidationError(\n 'studentTTwoSidedPValue: t must not be NaN and df must be positive and finite',\n )\n }\n return regularizedIncompleteBeta(df / (df + t * t), df / 2, 0.5)\n}\n\nfunction table(a: number, b: number, c: number, d: number): number {\n if (\n ![a, b, c, d].every((value) => Number.isSafeInteger(value) && value >= 0) ||\n !Number.isSafeInteger(a + b + c + d)\n ) {\n throw new ValidationError(\n 'contingency table: counts and total must be nonnegative safe integers',\n )\n }\n return a + b + c + d\n}\n\n/** Pearson statistic for a 2x2 table; empty or fixed margins have statistic zero. */\nexport function chiSquared(a: number, b: number, c: number, d: number): number {\n const n = table(a, b, c, d)\n if (!n) return 0\n const expected = [\n ((a + b) * (a + c)) / n,\n ((a + b) * (b + d)) / n,\n ((c + d) * (a + c)) / n,\n ((c + d) * (b + d)) / n,\n ]\n if (expected.some((value) => value === 0)) return 0\n return [a, b, c, d].reduce((sum, value, i) => sum + (value - expected[i]!) ** 2 / expected[i]!, 0)\n}\n\n/** One-degree-of-freedom chi-squared survival probability. */\nexport function chiSquaredPValue(statistic: number): number {\n if (Number.isNaN(statistic) || statistic < 0) {\n throw new ValidationError('chiSquaredPValue: statistic must be nonnegative and not NaN')\n }\n return normalTwoSidedPValue(Math.sqrt(statistic))\n}\n\n/** Fisher two-sided probability: sum all fixed-margin tables no likelier than the observed table. */\nexport function fisherExactTwoSided(a: number, b: number, c: number, d: number): number {\n const n = table(a, b, c, d),\n row1 = a + b,\n row2 = c + d,\n col1 = a + c\n if (!n || !row1 || !row2 || !col1 || col1 === n) return 1\n const logChoose = (total: number, count: number) =>\n lnGamma(total + 1) - lnGamma(count + 1) - lnGamma(total - count + 1)\n const denominator = logChoose(n, col1)\n const logP = (count: number) =>\n logChoose(row1, count) + logChoose(row2, col1 - count) - denominator\n const threshold = logP(a) + 1e-7\n let p = 0\n for (let k = Math.max(0, col1 - row2); k <= Math.min(row1, col1); k++) {\n const probability = logP(k)\n if (probability <= threshold) p += Math.exp(probability)\n }\n return Math.min(1, p)\n}\n\n/** Fisher when any expected count is below five; otherwise Pearson's chi-squared tail. */\nexport function twoByTwoPValue(a: number, b: number, c: number, d: number): number {\n const n = table(a, b, c, d)\n if (!n) return 1\n const minimum =\n Math.min((a + b) * (a + c), (a + b) * (b + d), (c + d) * (a + c), (c + d) * (b + d)) / n\n return minimum < 5 ? fisherExactTwoSided(a, b, c, d) : chiSquaredPValue(chiSquared(a, b, c, d))\n}\n\nexport interface LinearRegressionResult {\n slope: number\n rSquared: number\n slopePValue: number | null\n}\n\n/** Centered least-squares slope; null p-value means no slope test was possible. */\nexport function linearRegressionSlope(\n points: readonly { x: number; y: number }[],\n): LinearRegressionResult {\n assertFiniteSample(\n 'linearRegressionSlope',\n 'x',\n points.map((point) => point.x),\n )\n assertFiniteSample(\n 'linearRegressionSlope',\n 'y',\n points.map((point) => point.y),\n )\n if (points.length < 2) return { slope: 0, rSquared: 0, slopePValue: null }\n const n = points.length\n const meanX = points.reduce((sum, point) => sum + point.x / n, 0)\n const meanY = points.reduce((sum, point) => sum + point.y / n, 0)\n const sxx = points.reduce((sum, point) => sum + (point.x - meanX) ** 2, 0)\n const syy = points.reduce((sum, point) => sum + (point.y - meanY) ** 2, 0)\n const sxy = points.reduce((sum, point) => sum + (point.x - meanX) * (point.y - meanY), 0)\n if (!sxx) return { slope: 0, rSquared: 0, slopePValue: null }\n const slope = sxy / sxx\n const residual = points.reduce(\n (sum, point) => sum + (point.y - meanY - slope * (point.x - meanX)) ** 2,\n 0,\n )\n if (![slope, residual, sxx, sxy, syy].every(Number.isFinite)) {\n throw new ValidationError('linearRegressionSlope: sample arithmetic exceeded finite range')\n }\n const rSquared = syy === 0 ? 0 : Math.max(0, 1 - residual / syy)\n const slopePValue =\n n < 3\n ? null\n : residual === 0\n ? slope === 0\n ? 1\n : 0\n : studentTTwoSidedPValue(slope / Math.sqrt(residual / (n - 2) / sxx), n - 2)\n return { slope, rSquared, slopePValue }\n}\n","/**\n * Baseline regression detection.\n *\n * Lifted from ADC baseline.ts. Every promotion-blocking signal boils down\n * to: \"is this run measurably worse than baseline?\" — with enough\n * statistical rigor to distinguish noise from drift.\n *\n * Uses:\n * - Welch's t-test (unequal variance) for per-metric mean comparison\n * - Cohen's d for effect size magnitude\n * - IQR for stability flag (unstable samples can't be trusted for comparisons)\n *\n * Returns a structured verdict: improved | regressed | stable | unstable.\n */\n\nimport { interpolatedQuantile } from './math/quantile'\nimport { studentTQuantile } from './math/student-t'\nimport { cohensD } from './statistics/effect-sizes'\nimport { studentTTwoSidedPValue } from './statistics/inference'\n\nexport interface MetricSamples {\n /** Stable metric key (e.g. \"overallScore\", \"firstTokenMs\"). */\n metric: string\n /** Whether higher values are better. */\n higherIsBetter: boolean\n baseline: number[]\n candidate: number[]\n}\n\nexport interface MetricVerdict {\n metric: string\n baselineMean: number\n candidateMean: number\n delta: number\n /** Null when both samples are constant with unequal means — the\n * standardized effect is unbounded there, not zero. */\n cohensD: number | null\n welchT: number\n welchDf: number\n welchP: number\n stable: boolean\n /** IQR of the combined samples — used as a rough stability indicator. */\n iqr: number\n verdict: 'improved' | 'regressed' | 'stable' | 'unstable'\n}\n\nexport interface BaselineReport {\n metrics: MetricVerdict[]\n /** True if any critical metric regressed. */\n hasRegression: boolean\n /** True if any metric is unstable (too noisy to judge). */\n hasUnstable: boolean\n}\n\nexport interface BaselineOptions {\n /** Effect size threshold for meaningful delta (default 0.5 — medium effect). */\n effectThreshold?: number\n /** p-value threshold for statistical significance (default 0.05). */\n alpha?: number\n /** IQR/mean ratio above which samples are flagged unstable (default 0.30). */\n unstableCvThreshold?: number\n}\n\nexport type WelchTestStatus = 'ok' | 'insufficient-sample' | 'zero-variance'\n\n/**\n * Full unequal-variance comparison for two independent samples.\n *\n * `meanB`, `delta`, `t`, and `cohensD` are oriented as `b - a`. Inferential\n * fields are `NaN` and `ci95` is null when the sample count or observed\n * variance cannot define a Student-t result. `status` makes that state\n * explicit so callers cannot mistake it for evidence of no difference.\n */\ninterface WelchTestResultBase {\n meanA: number\n meanB: number\n delta: number\n}\n\nexport type WelchTestResult =\n | (WelchTestResultBase & {\n status: 'ok'\n standardError: number\n t: number\n df: number\n p: number\n ci95: [number, number]\n cohensD: number\n })\n | (WelchTestResultBase & {\n status: 'insufficient-sample' | 'zero-variance'\n standardError: number\n t: number\n df: number\n p: number\n ci95: null\n cohensD: null\n })\n\n/**\n * Compare candidate samples against baseline per metric. Verdict logic:\n * - unstable: IQR/|mean| > threshold on either set — not enough signal\n * - improved: meaningful effect in the \"better\" direction AND p < alpha\n * - regressed: meaningful effect in the \"worse\" direction AND p < alpha\n * - stable: otherwise (no significant change)\n */\nexport function compareToBaseline(\n samples: MetricSamples[],\n options: BaselineOptions = {},\n): BaselineReport {\n const effectThreshold = options.effectThreshold ?? 0.5\n const alpha = options.alpha ?? 0.05\n const cvThreshold = options.unstableCvThreshold ?? 0.3\n\n const metrics: MetricVerdict[] = samples.map((s) => {\n const comparison = welchsTTest(s.baseline, s.candidate)\n if (comparison.status === 'insufficient-sample') {\n throw new Error(`compareToBaseline: need ≥2 samples per side for \"${s.metric}\"`)\n }\n const { meanA: bMean, meanB: cMean, delta, cohensD: d, t, df, p } = comparison\n // Stability is per-side: a comparison is trustworthy only when BOTH\n // samples are internally consistent. Combining the sides would flag\n // large-but-real deltas as \"unstable\" which is exactly what we want\n // to detect.\n const baselineIqr = iqr(s.baseline)\n const candidateIqr = iqr(s.candidate)\n const baselineStable = baselineIqr / Math.max(Math.abs(bMean), 1e-9) <= cvThreshold\n const candidateStable = candidateIqr / Math.max(Math.abs(cMean), 1e-9) <= cvThreshold\n const stable = baselineStable && candidateStable\n const reportedIqr = Math.max(baselineIqr, candidateIqr)\n\n // Both sides are guaranteed ≥ 2 samples above, so a null d means zero\n // pooled spread across a real mean gap: an unbounded standardized effect,\n // which clears any finite threshold.\n const effectClears = d === null || Math.abs(d) >= effectThreshold\n\n let verdict: MetricVerdict['verdict']\n if (!stable) {\n verdict = 'unstable'\n } else if (comparison.status === 'ok' && p < alpha && effectClears) {\n const candidateIsBetter = s.higherIsBetter ? delta > 0 : delta < 0\n verdict = candidateIsBetter ? 'improved' : 'regressed'\n } else {\n verdict = 'stable'\n }\n\n return {\n metric: s.metric,\n baselineMean: bMean,\n candidateMean: cMean,\n delta,\n cohensD: d,\n welchT: t,\n welchDf: df,\n welchP: p,\n stable,\n iqr: reportedIqr,\n verdict,\n }\n })\n\n return {\n metrics,\n hasRegression: metrics.some((m) => m.verdict === 'regressed'),\n hasUnstable: metrics.some((m) => m.verdict === 'unstable'),\n }\n}\n\nfunction mean(xs: number[]): number {\n return xs.length ? xs.reduce((sum, value) => sum + value / xs.length, 0) : Number.NaN\n}\n\n/** Inter-quartile range; 0 when the sample has no spread. */\nexport function iqr(xs: number[]): number {\n if (xs.length === 0) return 0\n const sorted = [...xs].sort((a, b) => a - b)\n return interpolatedQuantile(sorted, 0.75) - interpolatedQuantile(sorted, 0.25)\n}\n\n/**\n * Welch's t-test and 95% interval for two independent samples.\n *\n * Uses the Student-t distribution at every finite degree of freedom. Fewer\n * than two observations per side and zero observed standard error cannot\n * define a t reference distribution; those cases return an explicit status,\n * `NaN` inferential fields, and no interval rather than fabricated certainty.\n */\nexport function welchsTTest(a: number[], b: number[]): WelchTestResult {\n assertFiniteSample('a', a)\n assertFiniteSample('b', b)\n const mA = mean(a)\n const mB = mean(b)\n const delta = mB - mA\n if (\n (a.length && !Number.isFinite(mA)) ||\n (b.length && !Number.isFinite(mB)) ||\n (a.length && b.length && !Number.isFinite(delta))\n ) {\n throw new RangeError('welchsTTest: sample arithmetic exceeded finite range')\n }\n if (a.length < 2 || b.length < 2) {\n return {\n status: 'insufficient-sample',\n meanA: mA,\n meanB: mB,\n delta,\n standardError: Number.NaN,\n t: Number.NaN,\n df: Number.NaN,\n p: Number.NaN,\n ci95: null,\n cohensD: null,\n }\n }\n\n const vA = variance(a, mA)\n const vB = variance(b, mB)\n const seSquared = vA / a.length + vB / b.length\n if (!Number.isFinite(seSquared)) {\n throw new RangeError('welchsTTest: sample arithmetic exceeded finite range')\n }\n const d = cohensD(a, b)\n if (seSquared === 0) {\n return {\n status: 'zero-variance',\n meanA: mA,\n meanB: mB,\n delta,\n standardError: 0,\n t: delta === 0 ? 0 : Math.sign(delta) * Number.POSITIVE_INFINITY,\n df: Number.NaN,\n p: Number.NaN,\n ci95: null,\n cohensD: null,\n }\n }\n\n const standardError = Math.sqrt(seSquared)\n const t = delta / standardError\n const fractionA = vA / a.length / seSquared\n const fractionB = vB / b.length / seSquared\n const df = 1 / (fractionA ** 2 / (a.length - 1) + fractionB ** 2 / (b.length - 1))\n const p = studentTTwoSidedPValue(t, df)\n if (d === null) {\n throw new Error('welchsTTest: non-zero standard error produced no pooled effect size')\n }\n const halfWidth = studentTQuantile(0.975, df) * standardError\n if (![df, d, halfWidth, delta - halfWidth, delta + halfWidth].every(Number.isFinite)) {\n throw new RangeError('welchsTTest: sample arithmetic exceeded finite range')\n }\n return {\n status: 'ok',\n meanA: mA,\n meanB: mB,\n delta,\n standardError,\n t,\n df,\n p,\n ci95: [delta - halfWidth, delta + halfWidth],\n cohensD: d,\n }\n}\n\nfunction variance(xs: number[], m: number): number {\n return xs.reduce((acc, x) => acc + (x - m) ** 2, 0) / (xs.length - 1)\n}\n\nfunction assertFiniteSample(name: string, sample: readonly number[]): void {\n const invalid = sample.find((value) => !Number.isFinite(value))\n if (invalid !== undefined) {\n throw new RangeError(\n `welchsTTest: sample ${name} must contain only finite values, got ${invalid}`,\n )\n }\n}\n"],"mappings":"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"}
|