reeval 0.11.0 → 0.12.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/README.md +3 -1
- package/bin/mcp-timer.cjs +224 -0
- package/dist/{adapter-Bwy3QxAK.js → adapter-DigeVFWC.js} +3 -3
- package/dist/{adapter-Bwy3QxAK.js.map → adapter-DigeVFWC.js.map} +1 -1
- package/dist/{agent-DpE80WPz.js → agent-CatUEo5h.js} +21 -6
- package/dist/{agent-DpE80WPz.js.map → agent-CatUEo5h.js.map} +1 -1
- package/dist/{assemble-D9GWr-HS.js → assemble-CF063ms6.js} +19 -17
- package/dist/assemble-CF063ms6.js.map +1 -0
- package/dist/assemble-CJoD_Rzr.js +1 -0
- package/dist/bridge/index.mjs +2 -1
- package/dist/{capture-BQlGHiMC.js → capture-BiD7lVaM.js} +25 -17
- package/dist/{capture-BQlGHiMC.js.map → capture-BiD7lVaM.js.map} +1 -1
- package/dist/capture-Dp3q7K7Y.js +1 -0
- package/dist/{cli-ClpPT8kn.js → cli-B5zQCR2r.js} +161 -116
- package/dist/cli-B5zQCR2r.js.map +1 -0
- package/dist/{cli-spec-qmEnQ25_.js → cli-spec-BXIBUlaK.js} +34 -15
- package/dist/cli-spec-BXIBUlaK.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{command-TgbzPizb.js → command-BMHXHqMT.js} +15 -14
- package/dist/command-BMHXHqMT.js.map +1 -0
- package/dist/command-C94CQNh8.js +91 -0
- package/dist/command-C94CQNh8.js.map +1 -0
- package/dist/command-CVtgyqlM.js +335 -0
- package/dist/command-CVtgyqlM.js.map +1 -0
- package/dist/{command-DbAe1Rzb.js → command-CaZgCTIw.js} +14 -17
- package/dist/command-CaZgCTIw.js.map +1 -0
- package/dist/{command-BlM0y8jN.js → command-DTgBZR0k.js} +6 -6
- package/dist/{command-BlM0y8jN.js.map → command-DTgBZR0k.js.map} +1 -1
- package/dist/{commands-CthqwkAn.js → commands-BXzIDB3X.js} +1 -1
- package/dist/commands-CjpGBUWr.js +666 -0
- package/dist/commands-CjpGBUWr.js.map +1 -0
- package/dist/{config-DrVSEVN0.js → config-Dv5MG7Rp.js} +27 -48
- package/dist/config-Dv5MG7Rp.js.map +1 -0
- package/dist/{context-C1mxXh80.js → context-Dgn48BqT.js} +13 -2
- package/dist/context-Dgn48BqT.js.map +1 -0
- package/dist/{contrasts-5zsj32gk.js → contrasts-CcoMLC_y.js} +3 -3
- package/dist/{contrasts-5zsj32gk.js.map → contrasts-CcoMLC_y.js.map} +1 -1
- package/dist/db-BeqRiWLl.js +602 -0
- package/dist/db-BeqRiWLl.js.map +1 -0
- package/dist/db-CJDRVQal.js +2 -0
- package/dist/{dist-CuY4ehEk.js → dist-CMjp3qqF.js} +2 -2
- package/dist/{dist-CuY4ehEk.js.map → dist-CMjp3qqF.js.map} +1 -1
- package/dist/{docker-DOvjji9I.js → docker-BbTlMmYi.js} +2 -2
- package/dist/{docker-DOvjji9I.js.map → docker-BbTlMmYi.js.map} +1 -1
- package/dist/{docker-D1HZDS6q.js → docker-CCXdbREk.js} +20 -4
- package/dist/{docker-D1HZDS6q.js.map → docker-CCXdbREk.js.map} +1 -1
- package/dist/{docker-DNmMPOBb.js → docker-DC69dKxB.js} +1 -1
- package/dist/{doctor-D2MbNO8L.js → doctor-CqttrZcs.js} +57 -22
- package/dist/doctor-CqttrZcs.js.map +1 -0
- package/dist/{egress-2-qzPvGi.js → egress-BfK_O9ce.js} +435 -30
- package/dist/egress-BfK_O9ce.js.map +1 -0
- package/dist/env-BQqj93gu.js +21 -0
- package/dist/env-BQqj93gu.js.map +1 -0
- package/dist/{environment-Cca6a4wB.js → environment-BBz1Yes9.js} +224 -10
- package/dist/environment-BBz1Yes9.js.map +1 -0
- package/dist/{evaluate-DKIl54Hb.js → evaluate-CXQ1o-pd.js} +539 -559
- package/dist/evaluate-CXQ1o-pd.js.map +1 -0
- package/dist/{evaluate-DMyaGQEj.d.ts → evaluate-yjZKUexW.d.ts} +2 -2
- package/dist/facts-DtENlf9s.js +898 -0
- package/dist/facts-DtENlf9s.js.map +1 -0
- package/dist/{files-BpUYBwGu.js → files-B-eUpCZ1.js} +30 -7
- package/dist/files-B-eUpCZ1.js.map +1 -0
- package/dist/files-BsQbYz2i.js +65 -0
- package/dist/files-BsQbYz2i.js.map +1 -0
- package/dist/{files-BXHZFWmx.js → files-COHQLEHE.js} +6 -17
- package/dist/files-COHQLEHE.js.map +1 -0
- package/dist/files-DqCBW7i8.js +1 -0
- package/dist/files-Ha-jsQXf.js +1 -0
- package/dist/generate-Cs2TMH_k.js +1647 -0
- package/dist/generate-Cs2TMH_k.js.map +1 -0
- package/dist/{git-Crl3b87o.js → git-DhykwgKF.js} +2 -2
- package/dist/{git-Crl3b87o.js.map → git-DhykwgKF.js.map} +1 -1
- package/dist/{harness-CEuntrla.js → harness-BAjw1fcr.js} +2 -2
- package/dist/{harness-CEuntrla.js.map → harness-BAjw1fcr.js.map} +1 -1
- package/dist/harness.d.ts +1 -1
- package/dist/harness.js +1 -1
- package/dist/{header-DHQv_ZrF.js → header-kSmWatcO.js} +10 -3
- package/dist/{header-DHQv_ZrF.js.map → header-kSmWatcO.js.map} +1 -1
- package/dist/{images-Bi3aGxb9.js → images-BmJRuTpm.js} +61 -13
- package/dist/images-BmJRuTpm.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/dist/init-Bwc9byQr.js +543 -0
- package/dist/init-Bwc9byQr.js.map +1 -0
- package/dist/init-D7Y1ny1z.js +1 -0
- package/dist/insights-B2Xmhz9o.js +64 -0
- package/dist/insights-B2Xmhz9o.js.map +1 -0
- package/dist/{invocations-BYDPe3fV.js → invocations-CQTbP092.js} +3 -3
- package/dist/{invocations-BYDPe3fV.js.map → invocations-CQTbP092.js.map} +1 -1
- package/dist/{judge-DW_GDOmB.js → judge-Dt6KW6_O.js} +5 -3
- package/dist/judge-Dt6KW6_O.js.map +1 -0
- package/dist/judge.d.ts +7 -6
- package/dist/judge.js +8 -7
- package/dist/judge.js.map +1 -1
- package/dist/{live-jlfszAbb.js → live-DYd2QEyR.js} +2 -2
- package/dist/{live-jlfszAbb.js.map → live-DYd2QEyR.js.map} +1 -1
- package/dist/{model-D0IcOQao.js → model-B-mel-Gv.js} +43 -18
- package/dist/model-B-mel-Gv.js.map +1 -0
- package/dist/model-BGKYVpoj.js +1 -0
- package/dist/{model-DaVCY3rb.js → model-C7tSwT7f.js} +2 -2
- package/dist/{model-DaVCY3rb.js.map → model-C7tSwT7f.js.map} +1 -1
- package/dist/{model-DaX4bNLZ.js → model-CWlAqmbU.js} +135 -40
- package/dist/model-CWlAqmbU.js.map +1 -0
- package/dist/model-DHY-dfoO.js +1 -0
- package/dist/{node-B3ydHo6t.js → node-D0mtjRAO.js} +3 -3
- package/dist/{node-B3ydHo6t.js.map → node-D0mtjRAO.js.map} +1 -1
- package/dist/{options-C0d0AzeR.js → options-CPUW97_7.js} +7 -9
- package/dist/options-CPUW97_7.js.map +1 -0
- package/dist/{pairs-CnInRu-G.js → pairs-DP6XOJby.js} +2 -2
- package/dist/{pairs-CnInRu-G.js.map → pairs-DP6XOJby.js.map} +1 -1
- package/dist/{patch-B1bnfhN-.js → patch-D4oluWzH.js} +2 -2
- package/dist/{patch-B1bnfhN-.js.map → patch-D4oluWzH.js.map} +1 -1
- package/dist/{plan-DgQxp9yy.js → plan-OkwUcJQ9.js} +21 -8
- package/dist/plan-OkwUcJQ9.js.map +1 -0
- package/dist/plugins-CUWMnSNb.js +654 -0
- package/dist/plugins-CUWMnSNb.js.map +1 -0
- package/dist/{preflight-DlQvbySb.js → preflight-B6pY89bF.js} +1 -1
- package/dist/{preflight-BRzD30L5.js → preflight-Bjm7_ylE.js} +14 -10
- package/dist/preflight-Bjm7_ylE.js.map +1 -0
- package/dist/{prepare-B_y-AFMv.js → prepare-CQmK3SBn.js} +70 -23
- package/dist/prepare-CQmK3SBn.js.map +1 -0
- package/dist/prepare-DbdgtZKe.js +2 -0
- package/dist/{provenance-DQ0AXn6c.js → provenance-B3Y17oCC.js} +3 -3
- package/dist/{provenance-DQ0AXn6c.js.map → provenance-B3Y17oCC.js.map} +1 -1
- package/dist/providers-CXN2RFz-.js +1 -0
- package/dist/{providers-DoTq1jHW.js → providers-eoniqK6w.js} +24 -10
- package/dist/providers-eoniqK6w.js.map +1 -0
- package/dist/{query-BO-ux7RB.js → query-CLRZmWBT.js} +3 -3
- package/dist/{query-BO-ux7RB.js.map → query-CLRZmWBT.js.map} +1 -1
- package/dist/query-CmBDYt0_.js +1 -0
- package/dist/{questions-C2dym2ce.js → questions-1XOulevV.js} +6 -6
- package/dist/{questions-C2dym2ce.js.map → questions-1XOulevV.js.map} +1 -1
- package/dist/{record-BKmMvZ6O.js → record-kk9M1hj-.js} +8 -4
- package/dist/record-kk9M1hj-.js.map +1 -0
- package/dist/remarks-1521zwfW.js +38 -0
- package/dist/remarks-1521zwfW.js.map +1 -0
- package/dist/remarks-BhAV1H4V.js +1 -0
- package/dist/remarks-DlJCqWRs.js +278 -0
- package/dist/remarks-DlJCqWRs.js.map +1 -0
- package/dist/{remote-CPPW86Q9.js → remote-cE2VWfkJ.js} +3 -3
- package/dist/{remote-CPPW86Q9.js.map → remote-cE2VWfkJ.js.map} +1 -1
- package/dist/resolve-C4zeccCH.js +724 -0
- package/dist/resolve-C4zeccCH.js.map +1 -0
- package/dist/resolve-D30yZYmB.js +1 -0
- package/dist/{results-BE2f-1XS.js → results-Drtt0uFl.js} +33 -8
- package/dist/results-Drtt0uFl.js.map +1 -0
- package/dist/{resume-Ca1c8vix.js → resume-BEFazUfy.js} +4 -4
- package/dist/{resume-Ca1c8vix.js.map → resume-BEFazUfy.js.map} +1 -1
- package/dist/rules-BFzQqPIm.js +317 -0
- package/dist/rules-BFzQqPIm.js.map +1 -0
- package/dist/run-BeMy92Us.js +88 -0
- package/dist/run-BeMy92Us.js.map +1 -0
- package/dist/{sandbox-DLrsvu7U.js → sandbox-CQaJj7n9.js} +2 -2
- package/dist/{sandbox-DLrsvu7U.js.map → sandbox-CQaJj7n9.js.map} +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/sandbox.js +1 -1
- package/dist/server-V4-2w0l8.js +1 -0
- package/dist/{server-TUY5xA_A.js → server-xK0les4f.js} +8 -8
- package/dist/{server-TUY5xA_A.js.map → server-xK0les4f.js.map} +1 -1
- package/dist/source-BDow_oW8.js +1 -0
- package/dist/{source-DJGS0a0u.js → source-Q1hEKbCs.js} +2 -2
- package/dist/{source-DJGS0a0u.js.map → source-Q1hEKbCs.js.map} +1 -1
- package/dist/src-B9L9yGKI.js +1 -0
- package/dist/{src-CLoOMVWI.js → src-Bcah6ZkT.js} +1 -1
- package/dist/{src-DvCg0NBs.js → src-BhmaorOU.js} +28 -6
- package/dist/{src-DvCg0NBs.js.map → src-BhmaorOU.js.map} +1 -1
- package/dist/{src-CF17Ug08.js → src-C0CeKiLU.js} +19 -4
- package/dist/{src-CF17Ug08.js.map → src-C0CeKiLU.js.map} +1 -1
- package/dist/src-C0xowZ3C.js +2 -0
- package/dist/src-CHIfIKUu.js +2 -0
- package/dist/src-DLtyz4w5.js +2 -0
- package/dist/src-DPIjmReZ.js +2 -0
- package/dist/{src-BxfCKA3_.js → src-DXNh5mTr.js} +1 -1
- package/dist/{src-FGXhkEkH.js → src-DiLMkIr9.js} +142 -13
- package/dist/src-DiLMkIr9.js.map +1 -0
- package/dist/{src-ftu5wPSt.js → src-LekQrr_S.js} +209 -29
- package/dist/src-LekQrr_S.js.map +1 -0
- package/dist/src-bCnsA6Vp.js +2 -0
- package/dist/{src-u8_ixn_F.js → src-cbCb-MPy.js} +20 -4
- package/dist/src-cbCb-MPy.js.map +1 -0
- package/dist/{src-DvK0EIZx.js → src-qGoFkuJF.js} +55 -6
- package/dist/{src-DvK0EIZx.js.map → src-qGoFkuJF.js.map} +1 -1
- package/dist/{src-DSYYPEOj.js → src-ynBVosfX.js} +1 -1
- package/dist/state-BQR_BCm4.js +1 -0
- package/dist/{state-DfpHox6b.js → state-BmZ8QVZ8.js} +12 -12
- package/dist/{state-DfpHox6b.js.map → state-BmZ8QVZ8.js.map} +1 -1
- package/dist/studio-app/assets/{index-CBkhNAv8.js → index-CnYJijyI.js} +9 -9
- package/dist/studio-app/index.html +1 -1
- package/dist/suite-BaHPmAGy.js +1 -0
- package/dist/{suite-Cw_7G2RM.js → suite-C8sw2pox.js} +80 -28
- package/dist/suite-C8sw2pox.js.map +1 -0
- package/dist/{summary-BUKfU-9l.js → summary-0oQNGskv.js} +273 -47
- package/dist/summary-0oQNGskv.js.map +1 -0
- package/dist/testing.d.ts +2 -2
- package/dist/testing.js +2 -2
- package/dist/{text-gEcKjAyp.js → text-CrVy5ioL.js} +18 -2
- package/dist/text-CrVy5ioL.js.map +1 -0
- package/dist/{transcript-BNNANU8A.js → transcript-BTxJpW4R.js} +2 -2
- package/dist/{transcript-BNNANU8A.js.map → transcript-BTxJpW4R.js.map} +1 -1
- package/dist/types-C5vI3g1C.js.map +1 -1
- package/dist/{types-BYdlwMwo.d.ts → types-GraZtfHN.d.ts} +848 -34
- package/dist/usage-BDo2q_yu.js +1 -0
- package/dist/{command-Bj39y-Wm.js → validate-BdoXUuL_.js} +15 -372
- package/dist/validate-BdoXUuL_.js.map +1 -0
- package/dist/view/index.d.ts +20 -257
- package/dist/view/index.js +7 -6
- package/dist/{views-B8w2J-gD.js → views-BoUoX4_A.js} +8 -98
- package/dist/views-BoUoX4_A.js.map +1 -0
- package/dist/views-noVQNCUP.js +2 -0
- package/dist/{worker-entry-DNnveLqx.js → worker-entry-D0-GErmU.js} +2 -2
- package/dist/{worker-entry-DNnveLqx.js.map → worker-entry-D0-GErmU.js.map} +1 -1
- package/dist/{workspace-C_X0tdv6.js → workspace-B90YDU_a.js} +1 -1
- package/dist/{workspace-C4RA3srV.js → workspace-tjZFkjxC.js} +4 -4
- package/dist/{workspace-C4RA3srV.js.map → workspace-tjZFkjxC.js.map} +1 -1
- package/package.json +3 -1
- package/skills/eval-rubric/SKILL.md +130 -0
- package/dist/agent-D483ru7D.js +0 -334
- package/dist/agent-D483ru7D.js.map +0 -1
- package/dist/assemble-D5KGrwnJ.js +0 -1
- package/dist/assemble-D9GWr-HS.js.map +0 -1
- package/dist/capture-CYGLpWxR.js +0 -1
- package/dist/cli-ClpPT8kn.js.map +0 -1
- package/dist/cli-spec-qmEnQ25_.js.map +0 -1
- package/dist/command-Bj39y-Wm.js.map +0 -1
- package/dist/command-C-cVjlny.js +0 -1
- package/dist/command-DbAe1Rzb.js.map +0 -1
- package/dist/command-TgbzPizb.js.map +0 -1
- package/dist/commands-YUwlyTbr.js +0 -228
- package/dist/commands-YUwlyTbr.js.map +0 -1
- package/dist/config-DrVSEVN0.js.map +0 -1
- package/dist/context-C1mxXh80.js.map +0 -1
- package/dist/db-CKg5NtiW.js +0 -2
- package/dist/db-DfhipHEF.js +0 -1416
- package/dist/db-DfhipHEF.js.map +0 -1
- package/dist/doctor-D2MbNO8L.js.map +0 -1
- package/dist/egress-2-qzPvGi.js.map +0 -1
- package/dist/environment-Cca6a4wB.js.map +0 -1
- package/dist/evaluate-DKIl54Hb.js.map +0 -1
- package/dist/files-BXHZFWmx.js.map +0 -1
- package/dist/files-BpUYBwGu.js.map +0 -1
- package/dist/files-Bw8lWEjg.js +0 -1
- package/dist/files-D6J0iSdx.js +0 -1
- package/dist/images-Bi3aGxb9.js.map +0 -1
- package/dist/init-Cl3f3NBT.js +0 -360
- package/dist/init-Cl3f3NBT.js.map +0 -1
- package/dist/init-fhOXED8F.js +0 -1
- package/dist/judge-DW_GDOmB.js.map +0 -1
- package/dist/model-CXhrziBe.js +0 -1
- package/dist/model-D0IcOQao.js.map +0 -1
- package/dist/model-DaX4bNLZ.js.map +0 -1
- package/dist/model-_bxNrk2h.js +0 -1
- package/dist/options-C0d0AzeR.js.map +0 -1
- package/dist/plan-DgQxp9yy.js.map +0 -1
- package/dist/preflight-BRzD30L5.js.map +0 -1
- package/dist/prepare-B_y-AFMv.js.map +0 -1
- package/dist/prepare-DCKTLHN3.js +0 -2
- package/dist/providers-B9yTdIqF.js +0 -1
- package/dist/providers-DoTq1jHW.js.map +0 -1
- package/dist/query-CRQfsw0e.js +0 -1
- package/dist/record-BKmMvZ6O.js.map +0 -1
- package/dist/results-BE2f-1XS.js.map +0 -1
- package/dist/server-Dp8eOeK5.js +0 -1
- package/dist/source-DdbLGR1M.js +0 -1
- package/dist/src-CcrQbpG8.js +0 -2
- package/dist/src-DCFtJRp0.js +0 -2
- package/dist/src-DYO3DdnQ.js +0 -1
- package/dist/src-FGXhkEkH.js.map +0 -1
- package/dist/src-WD-zgQYZ.js +0 -2
- package/dist/src-_oI9AePb.js +0 -2
- package/dist/src-ftu5wPSt.js.map +0 -1
- package/dist/src-qsKCqv7a.js +0 -2
- package/dist/src-u8_ixn_F.js.map +0 -1
- package/dist/state-DpAxYyED.js +0 -1
- package/dist/suite-Cw_7G2RM.js.map +0 -1
- package/dist/suite-DamAEnNF.js +0 -1
- package/dist/summary-BUKfU-9l.js.map +0 -1
- package/dist/summary-Baa4rTHS.js +0 -192
- package/dist/summary-Baa4rTHS.js.map +0 -1
- package/dist/text-gEcKjAyp.js.map +0 -1
- package/dist/tools-DLHgetpx.js +0 -249
- package/dist/tools-DLHgetpx.js.map +0 -1
- package/dist/views-B8w2J-gD.js.map +0 -1
- package/dist/views-DblnI3kA.js +0 -2
|
@@ -65,6 +65,8 @@ async function withRetries(call, policy, signal) {
|
|
|
65
65
|
//#region src/judge/index.ts
|
|
66
66
|
/** The judge the docs recommend, pinned so a model update never silently moves scores. */
|
|
67
67
|
const RECOMMENDED_JUDGE_MODEL = "typesafe-ai/jev-1.14.0";
|
|
68
|
+
/** The language model `reeval init` sets as `analysis.model` and the docs recommend for insights. */
|
|
69
|
+
const RECOMMENDED_ANALYSIS_MODEL = "google/gemini-3.8-flash";
|
|
68
70
|
const DEFAULT_THRESHOLD = .8;
|
|
69
71
|
const GATEWAY_KEYS = ["AI_GATEWAY_API_KEY", "VERCEL_OIDC_TOKEN"];
|
|
70
72
|
/** Providers reeval calls directly, through their own AI SDK package, when their key is set. */
|
|
@@ -128,7 +130,7 @@ async function runJudge(question, state, options, signal, retry = JUDGE_RETRY) {
|
|
|
128
130
|
const problem = checkModelString(model);
|
|
129
131
|
if (problem) throw new Error(problem);
|
|
130
132
|
}
|
|
131
|
-
const { scoreWithModel } = await import("./model-
|
|
133
|
+
const { scoreWithModel } = await import("./model-C7tSwT7f.js");
|
|
132
134
|
const scored = await withRetries(() => scoreWithModel(model, question, state, options.providerOptions, signal), retry, signal);
|
|
133
135
|
({score, resolvedModel} = scored.value);
|
|
134
136
|
retries = scored.retries;
|
|
@@ -146,6 +148,6 @@ async function runJudge(question, state, options, signal, retry = JUDGE_RETRY) {
|
|
|
146
148
|
};
|
|
147
149
|
}
|
|
148
150
|
//#endregion
|
|
149
|
-
export {
|
|
151
|
+
export { checkModelString as a, judgeModelName as c, isApiError as d, RECOMMENDED_JUDGE_MODEL as i, judgeRoute as l, DIRECT_PROVIDERS as n, isFakeJudge as o, RECOMMENDED_ANALYSIS_MODEL as r, judgeCredentials as s, DEFAULT_THRESHOLD as t, runJudge as u };
|
|
150
152
|
|
|
151
|
-
//# sourceMappingURL=judge-
|
|
153
|
+
//# sourceMappingURL=judge-Dt6KW6_O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-Dt6KW6_O.js","names":["sleep"],"sources":["../src/judge/retry.ts","../src/judge/index.ts"],"mappings":"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"}
|
package/dist/judge.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D as ConfigJudgeOptions,
|
|
1
|
+
import { Bt as Verdict, D as ConfigJudgeOptions, J as FakeJudgeModel, K as FakeInsights, W as FakeAnalysisModel, Z as FakeVote, ct as JudgeArtifactRef, dt as JudgeModel, ft as JudgeOptions, lt as JudgeCallOptions, n as AnalysisConfig, o as BlindPair, pt as JudgeState, q as FakeInsightsInput, ut as JudgeFailure } from "./types-GraZtfHN.js";
|
|
2
2
|
//#region src/judge/index.d.ts
|
|
3
3
|
/** The judge the docs recommend, pinned so a model update never silently moves scores. */
|
|
4
4
|
export declare const RECOMMENDED_JUDGE_MODEL = "typesafe-ai/jev-1.14.0";
|
|
@@ -16,11 +16,12 @@ export declare const fakeJudge: ({ score }?: {
|
|
|
16
16
|
* An analysis model for tests: `reeval analyze` gets `output` (or `output(digest)`) back as the
|
|
17
17
|
* model's structured answer, and each compare question's pair gets `vote` (a fixed `'A'`, `'B'` or
|
|
18
18
|
* `'tie'`, `{ winner, reason? }`, a function of the blinded pair, or `{ error }`), through the same
|
|
19
|
-
* parsing and validation as a real one.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* parsing and validation as a real one. Insights (in `reeval run` and `reeval analyze --insights`)
|
|
20
|
+
* get `insights` (or `insights(input)`, called per eval for its classification and its sentences,
|
|
21
|
+
* then once for the headline), through the same validator: an uncited sentence is dropped, and one
|
|
22
|
+
* with a banned word is asked for again, then dropped.
|
|
22
23
|
*/
|
|
23
|
-
export declare const fakeAnalysis: ({ output,
|
|
24
|
+
export declare const fakeAnalysis: ({ output, vote, insights }: Pick<FakeAnalysisModel, 'output' | 'vote' | 'insights'>) => FakeAnalysisModel;
|
|
24
25
|
//#endregion
|
|
25
|
-
export type { AnalysisConfig, BlindPair, ConfigJudgeOptions, FakeAnalysisModel,
|
|
26
|
+
export type { AnalysisConfig, BlindPair, ConfigJudgeOptions, FakeAnalysisModel, FakeInsights, FakeInsightsInput, FakeJudgeModel, FakeVote, JudgeArtifactRef, JudgeCallOptions, JudgeFailure, JudgeModel, JudgeOptions, JudgeState, Verdict };
|
|
26
27
|
//# sourceMappingURL=judge.d.ts.map
|
package/dist/judge.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as RECOMMENDED_JUDGE_MODEL, t as DEFAULT_THRESHOLD } from "./judge-Dt6KW6_O.js";
|
|
2
2
|
//#region src/judge.ts
|
|
3
3
|
/**
|
|
4
4
|
* A judge that returns `score` without calling a model, for tests and dry runs. `score` can be a
|
|
@@ -12,15 +12,16 @@ const fakeJudge = ({ score = 1 } = {}) => ({
|
|
|
12
12
|
* An analysis model for tests: `reeval analyze` gets `output` (or `output(digest)`) back as the
|
|
13
13
|
* model's structured answer, and each compare question's pair gets `vote` (a fixed `'A'`, `'B'` or
|
|
14
14
|
* `'tie'`, `{ winner, reason? }`, a function of the blinded pair, or `{ error }`), through the same
|
|
15
|
-
* parsing and validation as a real one.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* parsing and validation as a real one. Insights (in `reeval run` and `reeval analyze --insights`)
|
|
16
|
+
* get `insights` (or `insights(input)`, called per eval for its classification and its sentences,
|
|
17
|
+
* then once for the headline), through the same validator: an uncited sentence is dropped, and one
|
|
18
|
+
* with a banned word is asked for again, then dropped.
|
|
18
19
|
*/
|
|
19
|
-
const fakeAnalysis = ({ output,
|
|
20
|
+
const fakeAnalysis = ({ output, vote, insights }) => ({
|
|
20
21
|
kind: "fake-analysis",
|
|
21
22
|
...output !== void 0 ? { output } : {},
|
|
22
|
-
...
|
|
23
|
-
...
|
|
23
|
+
...vote !== void 0 ? { vote } : {},
|
|
24
|
+
...insights !== void 0 ? { insights } : {}
|
|
24
25
|
});
|
|
25
26
|
//#endregion
|
|
26
27
|
export { DEFAULT_THRESHOLD, RECOMMENDED_JUDGE_MODEL, fakeAnalysis, fakeJudge };
|
package/dist/judge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judge.js","names":[],"sources":["../src/judge.ts"],"mappings":";;;;;;AAQA,MAAa,aAAa,EACxB,QAAQ,MAGN,CAAC,OAAuB;CAC1B,MAAM;CACN;AACF
|
|
1
|
+
{"version":3,"file":"judge.js","names":[],"sources":["../src/judge.ts"],"mappings":";;;;;;AAQA,MAAa,aAAa,EACxB,QAAQ,MAGN,CAAC,OAAuB;CAC1B,MAAM;CACN;AACF;;;;;;;;;;AAWA,MAAa,gBAAgB,EAC3B,QACA,MACA,gBACiF;CACjF,MAAM;CACN,GAAI,WAAW,KAAA,IAAY,EAAE,OAAO,IAAI,CAAC;CACzC,GAAI,SAAS,KAAA,IAAY,EAAE,KAAK,IAAI,CAAC;CACrC,GAAI,aAAa,KAAA,IAAY,EAAE,SAAS,IAAI,CAAC;AAC/C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as isOneOf } from "./object-CLf2-tNq.js";
|
|
2
|
-
import { n as fillDefaults } from "./record-
|
|
2
|
+
import { n as fillDefaults } from "./record-kk9M1hj-.js";
|
|
3
3
|
//#region src/view/live.ts
|
|
4
4
|
/** The progress file's name inside the run's staging directory. */
|
|
5
5
|
const LIVE_FILE = "live.json";
|
|
@@ -84,4 +84,4 @@ function readableLiveProgress(value) {
|
|
|
84
84
|
//#endregion
|
|
85
85
|
export { liveApiPath as a, readableLiveProgress as c, isFinished as i, LIVE_FILE as n, liveCounts as o, LIVE_SCHEMA_VERSION as r, liveTranscriptPath as s, FINISHED as t };
|
|
86
86
|
|
|
87
|
-
//# sourceMappingURL=live-
|
|
87
|
+
//# sourceMappingURL=live-DYd2QEyR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-
|
|
1
|
+
{"version":3,"file":"live-DYd2QEyR.js","names":[],"sources":["../src/view/live.ts"],"mappings":";;;;AAQA,MAAa,YAAY;AACzB,MAAa,sBAAsB;AAsDnC,MAAa,cAAc;AAC3B,MAAa,sBAAsB,OAAe,eAChD,YAAY,MAAM,sBAAsB,mBAAmB,UAAU;AAEvE,MAAa,WAAkC;CAAC;CAAQ;CAAQ;CAAe;AAAS;AACxF,MAAa,cAAc,WAAuB,SAAS,SAAS,MAAM;AAE1E,SAAgB,WAAW,UAA8D;CACvF,MAAM,SAAS,GAAG,aAChB,SAAS,QAAQ,MAAM,SAAS,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,OAAO;EACL,MAAM,MAAM,GAAG,QAAQ;EACvB,QAAQ,MAAM,MAAM;EACpB,QAAQ,MAAM,MAAM;EACpB,SAAS,MAAM,aAAa;EAC5B,SAAS,MAAM,SAAS;EACxB,SAAS,MAAM,SAAS;CAC1B;AACF;AAEA,MAAM,WAAkC;CAAC;CAAU;CAAW,GAAG;AAAQ;AACzE,MAAM,SAA+B;CAAC;CAAW;CAAc;AAAW;AAC1E,MAAM,SAAS,MACb,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC;AACzD,MAAM,OAAO,MAA4B,OAAO,MAAM;AACtD,MAAM,OAAO,MAA4B,OAAO,MAAM,YAAY,OAAO,SAAS,CAAC;AACnF,MAAM,UAAa,GAAY,OAC7B,MAAM,QAAQ,MAAM,KAAA,KAAa,GAAG,CAAC;AAEvC,SAAS,gBAAgB,GAAgC;CACvD,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO;CACtB,MAAM,EAAE,KAAK,QAAQ,MAAM,MAAM,MAAM,GAAG,QAAQ,WAAW,eAAe;CAC5E,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO;CAC3F,IAAI,CAAC,QAAQ,UAAU,MAAM,GAAG,OAAO;CACvC,IAAI,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,OAAO,YAAY,GAAG,GAAG,OAAO;CAChE,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW,aAAa;EACxB,YAAY,cAAc;CAC5B;AACF;;;;;AAMA,SAAgB,qBAAqB,OAAqC;CACxE,IAAI,CAAC,MAAM,KAAK,KAAK,MAAM,kBAAA,GAAuC,OAAO;CACzE,aAAa,iBAAiB,KAAK;CACnC,MAAM,EAAE,OAAO,WAAW,KAAK,MAAM,aAAa,OAAO,aAAa;CACtE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO;CAC3F,IAAI,CAAC,QAAQ,QAAQ,KAAK,KAAK,CAAC,MAAM,QAAQ,QAAQ,GAAG,OAAO;CAChE,MAAM,OAAO,SAAS,IAAI,eAAe;CACzC,IAAI,CAAC,KAAK,OAAO,MAAM,MAAM,IAAI,GAAG,OAAO;CAC3C,OAAO;EACL,eAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,KAAK;EACd,QAAQ,WAAW,IAAI;EACvB,UAAU;CACZ;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as UsageError } from "./errors-B6BSMs03.js";
|
|
2
|
-
import { a as
|
|
3
|
-
import { n as analysisModelOf } from "./config-
|
|
2
|
+
import { a as checkModelString, l as judgeRoute, o as isFakeJudge, s as judgeCredentials } from "./judge-Dt6KW6_O.js";
|
|
3
|
+
import { n as analysisModelOf } from "./config-Dv5MG7Rp.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { Output, generateText } from "ai";
|
|
6
6
|
//#region src/analysis/schema.ts
|
|
@@ -100,10 +100,10 @@ function judgeAside(config, task) {
|
|
|
100
100
|
return ` (the judge, ${isFakeJudge(judge) ? "a fake judge" : judge}, is an evaluation model: it scores yes/no questions and can't ${task})`;
|
|
101
101
|
}
|
|
102
102
|
/** Which model analyses: `analysis.model`, else the judge's when it's a language model. */
|
|
103
|
-
function analysisModelName(config
|
|
103
|
+
function analysisModelName(config) {
|
|
104
104
|
const model = defaultModel(config);
|
|
105
105
|
if (model !== void 0) return model;
|
|
106
|
-
throw new UsageError(
|
|
106
|
+
throw new UsageError(`reeval analyze needs a language model. Set analysis: { model: 'google/gemini-3.8-flash' } in ${config.file}${judgeAside(config, "write an analysis")}, or run reeval analyze --context to hand the digest to your own coding agent.`);
|
|
107
107
|
}
|
|
108
108
|
/** The plan's name for the model a compare question without its own is answered by; null when none. */
|
|
109
109
|
function questionModelLabel(config) {
|
|
@@ -123,9 +123,19 @@ function questionModel(config, question, where) {
|
|
|
123
123
|
if (typeof model === "string" && isEvaluationModel(model)) throw new UsageError(`compare.questions "${question.question}" (${where}) would be answered by analysis.model in ${config.file}, "${model}", an evaluation model: it scores yes/no questions and can't pick between two attempts. Use a language model, e.g. 'google/gemini-3.8-flash', or ${fix}.`);
|
|
124
124
|
return model;
|
|
125
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* The variable `analysis.model` is missing when it's a provider model with no credential set: its
|
|
128
|
+
* provider's own key, else the AI Gateway's. Null when one is set, or for any other model.
|
|
129
|
+
*/
|
|
130
|
+
function missingAnalysisKey(config, env = process.env) {
|
|
131
|
+
const model = analysisModelOf(config);
|
|
132
|
+
if (typeof model !== "string" || isEvaluationModel(model) || checkModelString(model)) return null;
|
|
133
|
+
const keys = judgeCredentials(model);
|
|
134
|
+
return keys.some((k) => env[k]) ? null : keys[0] ?? null;
|
|
135
|
+
}
|
|
126
136
|
/** Checks the model and its credentials before any work; throws a UsageError (exit 2). */
|
|
127
|
-
function resolveAnalysisModel(config
|
|
128
|
-
const model = analysisModelName(config
|
|
137
|
+
function resolveAnalysisModel(config) {
|
|
138
|
+
const model = analysisModelName(config);
|
|
129
139
|
if (isFake(model)) return {
|
|
130
140
|
name: "fake",
|
|
131
141
|
route: "fake",
|
|
@@ -139,37 +149,52 @@ function resolveAnalysisModel(config, use = "analyze") {
|
|
|
139
149
|
};
|
|
140
150
|
} catch (error) {
|
|
141
151
|
const message = error.message.replace("judge model", "analysis model");
|
|
142
|
-
throw new UsageError(
|
|
152
|
+
throw new UsageError(`${message} Or run reeval analyze --context, which needs no key.`);
|
|
143
153
|
}
|
|
144
154
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
155
|
+
/**
|
|
156
|
+
* A language model that answers `text`, through the AI SDK's own parsing, or throws `error`.
|
|
157
|
+
* With `countTokens`, it reports a token per 4 characters of its prompt and its answer, so a
|
|
158
|
+
* token budget applies to it as it would to a real model; otherwise it reports none.
|
|
159
|
+
*/
|
|
160
|
+
function cannedModel(answer, countTokens = false) {
|
|
147
161
|
return {
|
|
148
162
|
specificationVersion: "v4",
|
|
149
163
|
provider: "fake",
|
|
150
164
|
modelId: "fake-analysis",
|
|
151
165
|
supportedUrls: {},
|
|
152
|
-
doGenerate: async () => {
|
|
166
|
+
doGenerate: async (options) => {
|
|
153
167
|
if ("error" in answer) throw new Error(answer.error);
|
|
168
|
+
const input = countTokens ? Math.ceil(JSON.stringify(options.prompt).length / 4) : 0;
|
|
169
|
+
let output = countTokens ? Math.ceil(answer.text.length / 4) : 0;
|
|
170
|
+
let text = answer.text;
|
|
171
|
+
const cut = countTokens && options.maxOutputTokens !== void 0 && output > options.maxOutputTokens;
|
|
172
|
+
if (cut) {
|
|
173
|
+
output = options.maxOutputTokens;
|
|
174
|
+
text = text.slice(0, output * 4);
|
|
175
|
+
}
|
|
154
176
|
return {
|
|
155
177
|
content: [{
|
|
156
178
|
type: "text",
|
|
157
|
-
text
|
|
179
|
+
text
|
|
158
180
|
}],
|
|
159
|
-
finishReason: {
|
|
181
|
+
finishReason: cut ? {
|
|
182
|
+
unified: "length",
|
|
183
|
+
raw: "max_tokens"
|
|
184
|
+
} : {
|
|
160
185
|
unified: "stop",
|
|
161
186
|
raw: "stop"
|
|
162
187
|
},
|
|
163
188
|
usage: {
|
|
164
189
|
inputTokens: {
|
|
165
|
-
total:
|
|
166
|
-
noCache:
|
|
190
|
+
total: input,
|
|
191
|
+
noCache: input,
|
|
167
192
|
cacheRead: 0,
|
|
168
193
|
cacheWrite: 0
|
|
169
194
|
},
|
|
170
195
|
outputTokens: {
|
|
171
|
-
total:
|
|
172
|
-
text:
|
|
196
|
+
total: output,
|
|
197
|
+
text: output,
|
|
173
198
|
reasoning: 0
|
|
174
199
|
}
|
|
175
200
|
},
|
|
@@ -228,6 +253,6 @@ async function callAnalysisModel(model, digest, prompt, maxOutputTokens) {
|
|
|
228
253
|
};
|
|
229
254
|
}
|
|
230
255
|
//#endregion
|
|
231
|
-
export {
|
|
256
|
+
export { missingAnalysisKey as a, questionModelLabel as c, isFake as i, resolveAnalysisModel as l, callAnalysisModel as n, providerModel as o, cannedModel as r, questionModel as s, analysisModelName as t, SYSTEM_PROMPT as u };
|
|
232
257
|
|
|
233
|
-
//# sourceMappingURL=model-
|
|
258
|
+
//# sourceMappingURL=model-B-mel-Gv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-B-mel-Gv.js","names":[],"sources":["../src/analysis/schema.ts","../src/analysis/model.ts"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as analysisModelName, n as callAnalysisModel, r as cannedModel, i as isFake, a as missingAnalysisKey, o as providerModel, s as questionModel, c as questionModelLabel, l as resolveAnalysisModel } from "./model-B-mel-Gv.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as judgeRoute } from "./judge-Dt6KW6_O.js";
|
|
2
2
|
import { i as debugTrace } from "./attempt-CGPV3BZY.js";
|
|
3
3
|
import { experimental_decide } from "ai";
|
|
4
4
|
import { google } from "@ai-sdk/google";
|
|
@@ -41,4 +41,4 @@ async function scoreWithModel(model, question, state, providerOptions, signal) {
|
|
|
41
41
|
//#endregion
|
|
42
42
|
export { scoreWithModel };
|
|
43
43
|
|
|
44
|
-
//# sourceMappingURL=model-
|
|
44
|
+
//# sourceMappingURL=model-C7tSwT7f.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-
|
|
1
|
+
{"version":3,"file":"model-C7tSwT7f.js","names":["decide"],"sources":["../src/judge/model.ts"],"mappings":";;;;;;AASA,eAAe,aACb,OACwB;CACxB,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,MAAM,QAAQ,WAAW,KAAK;CAC9B,IAAI,MAAM,SAAS,WAAW,OAAO;CACrC,MAAM,KAAK,MAAM,MAAM,MAAM,SAAS,SAAS,CAAC;CAChD,IAAI,MAAM,aAAa,UAAU,OAAO,OAAO,cAAc,EAAE;CAC/D,MAAM,EAAE,eAAe,MAAM,OAAO;CACpC,OAAO,WAAW,cAAc,EAAE;AACpC;AAEA,eAAsB,eACpB,OACA,UACA,OACA,iBACA,QAC+D;CAC/D,MAAM,SAAS,MAAMA,oBAAO;EAC1B,OAAO,MAAM,aAAa,KAAK;EAC/B;EACA,WAAW,EAAE,QAAQ;GAAE,MAAM;GAAW,cAAc;EAAS,EAAE;EACjE;EACA,aAAa;EAEb,YAAY;CACd,CAAC;CACD,MAAM,EAAE,SAAS,OAAO,UAAU,UAAU,qBAAqB;CACjE,WACE,SACA,qBACA;EAAE;EAAS;EAAO;EAAU;EAAU;CAAiB,GACvD,yBACF;CACA,OAAO;EAAE,OAAO,OAAO,QAAQ,OAAO;EAAa,eAAe,OAAO,UAAU;CAAQ;AAC7F"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { c as shardPath, i as manifestPath, s as shardOf } from "./paths-BmR-7tx3.js";
|
|
2
|
-
import { n as clip } from "./text-
|
|
2
|
+
import { n as clip } from "./text-CrVy5ioL.js";
|
|
3
3
|
import { a as totalTokens, i as sumUsage, n as formatTokens, r as promptTokens } from "./usage-CleNKkly.js";
|
|
4
|
-
import {
|
|
5
|
-
import { s as sampleReasons } from "./pairs-
|
|
4
|
+
import { l as readableTranscriptLine } from "./record-kk9M1hj-.js";
|
|
5
|
+
import { s as sampleReasons } from "./pairs-DP6XOJby.js";
|
|
6
6
|
//#region src/view/compare.ts
|
|
7
7
|
const STACK_FIELDS = [
|
|
8
8
|
{
|
|
@@ -151,6 +151,29 @@ function outcomeOf(cells) {
|
|
|
151
151
|
return outcomes.every((o) => o === "skipped") ? "skipped" : "pass";
|
|
152
152
|
}
|
|
153
153
|
/**
|
|
154
|
+
* Whether a failing eval failed only on attempts the run's interrupt cancelled: every failed
|
|
155
|
+
* attempt in a gated cell was cut short, so the agent didn't fail it (`reeval show`'s `cancelled`).
|
|
156
|
+
*/
|
|
157
|
+
const cancelledOn = (outcome, cells) => {
|
|
158
|
+
const gated = cells.filter((c) => c.gate !== "none");
|
|
159
|
+
return outcome === "fail" && gated.some((c) => c.fail > 0) && gated.every((c) => c.fail === (c.cancelled ?? 0));
|
|
160
|
+
};
|
|
161
|
+
function cancelledSides(outcomes, cells) {
|
|
162
|
+
const sides = ["base", "head"].filter((s) => cancelledOn(outcomes[s], cells[s] ?? []));
|
|
163
|
+
return sides.length ? { cancelled: sides } : {};
|
|
164
|
+
}
|
|
165
|
+
/** An eval only head has. */
|
|
166
|
+
const addedRow = (h) => ({
|
|
167
|
+
id: h.id,
|
|
168
|
+
base: null,
|
|
169
|
+
head: h.outcome,
|
|
170
|
+
status: "added",
|
|
171
|
+
...cancelledSides({
|
|
172
|
+
base: null,
|
|
173
|
+
head: h.outcome
|
|
174
|
+
}, { head: h.cells })
|
|
175
|
+
});
|
|
176
|
+
/**
|
|
154
177
|
* When two runs of an eval differ only in which cells ran (a filtered run, a harness added), its
|
|
155
178
|
* outcome on the cells both have, and the cells only one has. Null when no cell is shared or a
|
|
156
179
|
* shared cell changed.
|
|
@@ -160,12 +183,17 @@ function sharedScope(b, h) {
|
|
|
160
183
|
const shared = h.cells.filter((c) => before.has(c.key));
|
|
161
184
|
if (!shared.length || shared.some((c) => before.get(c.key)?.fingerprint !== c.fingerprint)) return null;
|
|
162
185
|
const keys = new Set(h.cells.map((c) => c.key));
|
|
186
|
+
const baseCells = shared.map((c) => before.get(c.key) ?? c);
|
|
163
187
|
return {
|
|
164
|
-
base: outcomeOf(
|
|
188
|
+
base: outcomeOf(baseCells),
|
|
165
189
|
head: outcomeOf(shared),
|
|
166
190
|
cells: {
|
|
167
191
|
added: h.cells.filter((c) => !before.has(c.key)).map((c) => c.key),
|
|
168
192
|
removed: b.cells.filter((c) => !keys.has(c.key)).map((c) => c.key)
|
|
193
|
+
},
|
|
194
|
+
over: {
|
|
195
|
+
base: baseCells,
|
|
196
|
+
head: shared
|
|
169
197
|
}
|
|
170
198
|
};
|
|
171
199
|
}
|
|
@@ -192,27 +220,34 @@ function compare(base, head) {
|
|
|
192
220
|
return [.../* @__PURE__ */ new Set([...head.evals.map((e) => e.id), ...base.evals.map((e) => e.id)])].map((id) => {
|
|
193
221
|
const b = base.evals.find((e) => e.id === id);
|
|
194
222
|
const h = head.evals.find((e) => e.id === id);
|
|
195
|
-
if (!b) return
|
|
196
|
-
id,
|
|
197
|
-
base: null,
|
|
198
|
-
head: h?.outcome ?? null,
|
|
199
|
-
status: "added"
|
|
200
|
-
};
|
|
223
|
+
if (!b) return addedRow(h);
|
|
201
224
|
if (!h) return {
|
|
202
225
|
id,
|
|
203
226
|
base: b.outcome,
|
|
204
227
|
head: null,
|
|
205
|
-
status: "removed"
|
|
228
|
+
status: "removed",
|
|
229
|
+
...cancelledSides({
|
|
230
|
+
base: b.outcome,
|
|
231
|
+
head: null
|
|
232
|
+
}, { base: b.cells })
|
|
206
233
|
};
|
|
207
234
|
const scoped = b.fingerprint === h.fingerprint ? null : sharedScope(b, h);
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
235
|
+
const outcomes = scoped ? {
|
|
236
|
+
base: scoped.base,
|
|
237
|
+
head: scoped.head
|
|
211
238
|
} : {
|
|
212
|
-
id,
|
|
213
239
|
base: b.outcome,
|
|
214
240
|
head: h.outcome
|
|
215
241
|
};
|
|
242
|
+
const row = {
|
|
243
|
+
id,
|
|
244
|
+
...outcomes,
|
|
245
|
+
...scoped ? { cells: scoped.cells } : {},
|
|
246
|
+
...cancelledSides(outcomes, scoped?.over ?? {
|
|
247
|
+
base: b.cells,
|
|
248
|
+
head: h.cells
|
|
249
|
+
})
|
|
250
|
+
};
|
|
216
251
|
const perCell = compareCells(b, h);
|
|
217
252
|
if (perCell.length) row.perCell = perCell;
|
|
218
253
|
if (row.base === "infra_error" || row.head === "infra_error") return {
|
|
@@ -224,6 +259,10 @@ function compare(base, head) {
|
|
|
224
259
|
status: "drift",
|
|
225
260
|
changes: whyChanged(b, h)
|
|
226
261
|
};
|
|
262
|
+
if (row.cancelled) return {
|
|
263
|
+
...row,
|
|
264
|
+
status: "drift"
|
|
265
|
+
};
|
|
227
266
|
if (graderChanged && row.base !== row.head) return {
|
|
228
267
|
...row,
|
|
229
268
|
status: "drift"
|
|
@@ -281,6 +320,8 @@ function liftInterval(variant, control) {
|
|
|
281
320
|
high: points + Math.sqrt((a.high - p1) ** 2 + (p2 - b.low) ** 2)
|
|
282
321
|
};
|
|
283
322
|
}
|
|
323
|
+
/** A 95% interval is within noise when it contains 0; touching 0 does not exclude it. */
|
|
324
|
+
const containsZero = (low, high) => low <= 0 && high >= 0;
|
|
284
325
|
/** Rounded to three places, as the record stores rates and points. */
|
|
285
326
|
const round3 = (x) => Math.round(x * 1e3) / 1e3;
|
|
286
327
|
/** Linear-interpolated quantile (`q` from 0 to 1) of unsorted numbers; null for none. */
|
|
@@ -304,7 +345,10 @@ const choose = (n, k) => {
|
|
|
304
345
|
/**
|
|
305
346
|
* Two-sided Mann–Whitney (Wilcoxon rank-sum) p-value for `xs` against `ys`: exact, by every split
|
|
306
347
|
* of the pooled values, with mid-ranks for ties; the normal approximation with a tie correction
|
|
307
|
-
* above `EXACT_LIMIT` splits.
|
|
348
|
+
* above `EXACT_LIMIT` splits. `sign` is the sign of `xs`'s rank sum minus its expectation: below 0,
|
|
349
|
+
* `xs` ranks lower. `floor` is the smallest p any split of these pooled values could give, so ties
|
|
350
|
+
* count: `[2, 2, 2, 3]` against `[2, 2, 3, 3]` can never go below 10/70. Null when either side is
|
|
351
|
+
* empty.
|
|
308
352
|
*/
|
|
309
353
|
function mannWhitney(xs, ys) {
|
|
310
354
|
const n1 = xs.length;
|
|
@@ -323,30 +367,57 @@ function mannWhitney(xs, ys) {
|
|
|
323
367
|
}
|
|
324
368
|
const n = n1 + n2;
|
|
325
369
|
const expected = n1 * (n + 1) / 2;
|
|
326
|
-
const
|
|
370
|
+
const deviation = ranks.slice(0, n1).reduce((a, b) => a + b, 0) - expected;
|
|
371
|
+
const sign = Math.sign(deviation);
|
|
372
|
+
const observed = Math.abs(deviation);
|
|
327
373
|
if (choose(n, n1) > EXACT_LIMIT) {
|
|
328
374
|
const counts = /* @__PURE__ */ new Map();
|
|
329
375
|
for (const { v } of pooled) counts.set(v, (counts.get(v) ?? 0) + 1);
|
|
330
376
|
const ties = [...counts.values()].reduce((a, t) => a + t ** 3 - t, 0);
|
|
331
377
|
const variance = n1 * n2 / 12 * (n + 1 - ties / (n * (n - 1)));
|
|
332
|
-
if (variance <= 0) return
|
|
333
|
-
|
|
334
|
-
|
|
378
|
+
if (variance <= 0) return {
|
|
379
|
+
p: 1,
|
|
380
|
+
sign,
|
|
381
|
+
floor: 1
|
|
382
|
+
};
|
|
383
|
+
const pOf = (d) => Math.min(1, 2 * (1 - normalCdf(Math.max(0, d - .5) / Math.sqrt(variance))));
|
|
384
|
+
const sorted = pooled.map(({ i }) => ranks[i]);
|
|
385
|
+
const sum = (rs) => rs.reduce((a, b) => a + b, 0);
|
|
386
|
+
const widest = Math.max(Math.abs(sum(sorted.slice(0, n1)) - expected), Math.abs(sum(sorted.slice(n - n1)) - expected));
|
|
387
|
+
return {
|
|
388
|
+
p: pOf(observed),
|
|
389
|
+
sign,
|
|
390
|
+
floor: pOf(widest)
|
|
391
|
+
};
|
|
335
392
|
}
|
|
336
393
|
let extreme = 0;
|
|
394
|
+
let widest = 0;
|
|
395
|
+
let atWidest = 0;
|
|
337
396
|
let total = 0;
|
|
338
397
|
const pick = (start, left, sum) => {
|
|
339
398
|
if (left === 0) {
|
|
340
399
|
total++;
|
|
341
|
-
|
|
400
|
+
const d = Math.abs(sum - expected);
|
|
401
|
+
if (d >= observed - 1e-9) extreme++;
|
|
402
|
+
if (d > widest + 1e-9) {
|
|
403
|
+
widest = d;
|
|
404
|
+
atWidest = 1;
|
|
405
|
+
} else if (d >= widest - 1e-9) atWidest++;
|
|
342
406
|
return;
|
|
343
407
|
}
|
|
344
408
|
for (let i = start; i <= n - left; i++) pick(i + 1, left - 1, sum + ranks[i]);
|
|
345
409
|
};
|
|
346
410
|
pick(0, n1, 0);
|
|
347
|
-
return
|
|
411
|
+
return {
|
|
412
|
+
p: extreme / total,
|
|
413
|
+
sign,
|
|
414
|
+
floor: atWidest / total
|
|
415
|
+
};
|
|
348
416
|
}
|
|
349
|
-
/**
|
|
417
|
+
/**
|
|
418
|
+
* The smallest two-sided p an exact rank test can reach with these group sizes and no ties: for
|
|
419
|
+
* planning `runs` before there's data. On data, `mannWhitney`'s `floor` counts the ties.
|
|
420
|
+
*/
|
|
350
421
|
const minimumP = (n1, n2) => n1 === 0 || n2 === 0 ? 1 : Math.min(1, 2 / choose(n1 + n2, n1));
|
|
351
422
|
/**
|
|
352
423
|
* The difference of two paired pass rates (variant minus control) with Newcombe's score interval
|
|
@@ -382,9 +453,14 @@ function mcnemar(variantOnly, controlOnly) {
|
|
|
382
453
|
const n = variantOnly + controlOnly;
|
|
383
454
|
if (n === 0) return 1;
|
|
384
455
|
const low = Math.min(variantOnly, controlOnly);
|
|
385
|
-
let
|
|
386
|
-
|
|
387
|
-
|
|
456
|
+
let logTerm = -n * Math.LN2;
|
|
457
|
+
let logTail = logTerm;
|
|
458
|
+
for (let i = 0; i < low; i++) {
|
|
459
|
+
logTerm += Math.log((n - i) / (i + 1));
|
|
460
|
+
const top = Math.max(logTail, logTerm);
|
|
461
|
+
logTail = top + Math.log1p(Math.exp(Math.min(logTail, logTerm) - top));
|
|
462
|
+
}
|
|
463
|
+
return Math.min(1, 2 * Math.exp(logTail));
|
|
388
464
|
}
|
|
389
465
|
/** Two-sided 95% Student t quantiles for 1 to 30 degrees of freedom. */
|
|
390
466
|
const T975 = [
|
|
@@ -454,7 +530,10 @@ function meanInterval(values) {
|
|
|
454
530
|
/**
|
|
455
531
|
* Two-sided Wilcoxon signed-rank p for paired differences: zeros dropped, mid-ranks for ties,
|
|
456
532
|
* exact over every sign assignment up to 20 non-zero differences, else the normal approximation.
|
|
457
|
-
*
|
|
533
|
+
* `sign` is the sign of the positive differences' rank sum minus its expectation: below 0, the
|
|
534
|
+
* negative differences outrank the positive ones. Null when every difference is zero. Ties are
|
|
535
|
+
* exact equality, so form each difference of two rates with one division (`(a·d − c·b) / (b·d)`),
|
|
536
|
+
* never as `a/b − c/d`.
|
|
458
537
|
*/
|
|
459
538
|
function signedRank(differences) {
|
|
460
539
|
const d = differences.filter((x) => x !== 0);
|
|
@@ -473,15 +552,22 @@ function signedRank(differences) {
|
|
|
473
552
|
}
|
|
474
553
|
const total = n * (n + 1) / 2;
|
|
475
554
|
const plus = d.reduce((s, v, i) => v > 0 ? s + ranks[i] : s, 0);
|
|
555
|
+
const sign = Math.sign(plus - total / 2);
|
|
476
556
|
const observed = Math.abs(plus - total / 2);
|
|
477
557
|
if (n > 20) {
|
|
478
558
|
const counts = /* @__PURE__ */ new Map();
|
|
479
559
|
for (const { a } of sorted) counts.set(a, (counts.get(a) ?? 0) + 1);
|
|
480
560
|
const ties = [...counts.values()].reduce((s, t) => s + t ** 3 - t, 0);
|
|
481
561
|
const variance = n * (n + 1) * (2 * n + 1) / 24 - ties / 48;
|
|
482
|
-
if (variance <= 0) return
|
|
562
|
+
if (variance <= 0) return {
|
|
563
|
+
p: 1,
|
|
564
|
+
sign
|
|
565
|
+
};
|
|
483
566
|
const z = Math.max(0, observed - .5) / Math.sqrt(variance);
|
|
484
|
-
return
|
|
567
|
+
return {
|
|
568
|
+
p: Math.min(1, 2 * (1 - normalCdf(z))),
|
|
569
|
+
sign
|
|
570
|
+
};
|
|
485
571
|
}
|
|
486
572
|
let extreme = 0;
|
|
487
573
|
for (let mask = 0; mask < 2 ** n; mask++) {
|
|
@@ -489,7 +575,10 @@ function signedRank(differences) {
|
|
|
489
575
|
for (let i = 0; i < n; i++) if (mask & 1 << i) sum += ranks[i];
|
|
490
576
|
if (Math.abs(sum - total / 2) >= observed - 1e-9) extreme++;
|
|
491
577
|
}
|
|
492
|
-
return
|
|
578
|
+
return {
|
|
579
|
+
p: extreme / 2 ** n,
|
|
580
|
+
sign
|
|
581
|
+
};
|
|
493
582
|
}
|
|
494
583
|
function normalCdf(z) {
|
|
495
584
|
const t = 1 / (1 + .3275911 * Math.abs(z) / Math.SQRT2);
|
|
@@ -527,20 +616,24 @@ function effortOf(samples) {
|
|
|
527
616
|
...tokens.length ? { tokens: spread(tokens) } : {}
|
|
528
617
|
};
|
|
529
618
|
}
|
|
530
|
-
/**
|
|
619
|
+
/**
|
|
620
|
+
* The verdict of an exact rank test of `xs` (variant) against `ys` (control). Its direction is
|
|
621
|
+
* the test's (which side ranks lower), not the medians', which can be equal or disagree.
|
|
622
|
+
*/
|
|
531
623
|
function effortVerdict(xs, ys) {
|
|
532
|
-
const
|
|
533
|
-
|
|
624
|
+
const test = mannWhitney(xs, ys);
|
|
625
|
+
const p = test?.p ?? null;
|
|
626
|
+
if (test === null || test.floor >= .05) return {
|
|
534
627
|
p,
|
|
535
628
|
verdict: "insufficient"
|
|
536
629
|
};
|
|
537
|
-
if (p
|
|
630
|
+
if (test.p >= .05) return {
|
|
538
631
|
p,
|
|
539
632
|
verdict: "noise"
|
|
540
633
|
};
|
|
541
634
|
return {
|
|
542
635
|
p,
|
|
543
|
-
verdict:
|
|
636
|
+
verdict: test.sign < 0 ? "fewer" : "more"
|
|
544
637
|
};
|
|
545
638
|
}
|
|
546
639
|
const ratio = (a, b) => b === 0 ? null : a / b;
|
|
@@ -797,7 +890,7 @@ function liftForKey(variant, control) {
|
|
|
797
890
|
pass: variant.pass,
|
|
798
891
|
counted: variant.counted
|
|
799
892
|
},
|
|
800
|
-
withinNoise: low
|
|
893
|
+
withinNoise: containsZero(low, high)
|
|
801
894
|
};
|
|
802
895
|
}
|
|
803
896
|
/** Per-key pass/counted for one cell's counted attempts, with lift on a variant when both sides qualify. */
|
|
@@ -1009,11 +1102,13 @@ function activityLabel(a) {
|
|
|
1009
1102
|
return `${plural(a.tools, "tool call")} · ${plural(a.fileEdits, "file edit")}`;
|
|
1010
1103
|
}
|
|
1011
1104
|
/**
|
|
1012
|
-
* A run's outcome,
|
|
1013
|
-
* the run, while failures in ungated cells (controls, by
|
|
1105
|
+
* A run's outcome, which `reeval run`'s exit code is read from: an error outside any attempt, a
|
|
1106
|
+
* failed gated cell or a budget stop fails the run, while failures in ungated cells (controls, by
|
|
1107
|
+
* default) don't. An interrupted run is `skipped`, whatever ran.
|
|
1014
1108
|
*/
|
|
1015
1109
|
function runOutcome(run) {
|
|
1016
1110
|
if (run.status === "interrupted") return "skipped";
|
|
1111
|
+
if (run.errors?.length) return "fail";
|
|
1017
1112
|
const outcomes = [...run.evals, ...run.families ?? []].map((e) => e.outcome);
|
|
1018
1113
|
if (outcomes.includes("fail") || run.status === "budget") return "fail";
|
|
1019
1114
|
if (outcomes.includes("infra_error")) return "infra_error";
|
|
@@ -1369,6 +1464,6 @@ const findAttempt = (e, attemptId) => e.attempts.find((a) => a.id === attemptId)
|
|
|
1369
1464
|
/** The attempt to open by default: the first failure, else the first attempt. */
|
|
1370
1465
|
const defaultAttempt = (e) => e.attempts.find((a) => a.outcome === "fail" || a.outcome === "infra_error") ?? e.attempts[0];
|
|
1371
1466
|
//#endregion
|
|
1372
|
-
export { contrastEffort as $, splitPatch as A, judgeRatesLabel as B, parseTranscript as C,
|
|
1467
|
+
export { contrastEffort as $, splitPatch as A, judgeRatesLabel as B, parseTranscript as C, sourceChanges as Ct, runtimeLabel as D, runRows as E, checkLabels as F, EFFORT_ALPHA as G, summaryJudgeRates as H, collapsedJudgeLabel as I, VERDICT_TEXT as J, EFFORT_MIN_RUNS as K, collapsedJudges as L, LIFT_MIN_COUNTED as M, cellJudgeRates as N, shortSha as O, cellUsage as P, cellSamples as Q, commandLine as R, languageLabel as S, compare as St, runOutcome as T, whyChanged as Tt, uniqueJudgeLabels as U, labelledJudgements as V, DIRECTIONAL_MIN as W, cellContrast as X, bothUnderATenth as Y, cellEffort as Z, harnessLabel as _, round3 as _t, cellRows as a, effortSummary as at, isMatrix as b, addedRow as bt, evalHistory as c, formatRatio as ct, failedJudgeLabels as d, containsZero as dt, directional as et, findAttempt as f, liftInterval as ft, formatUsage as g, pairedLiftInterval as gt, formatPercent as h, median as ht, buildIndex as i, effortSample as it, transcriptItems as j, splitEvalId as k, evalMarkOutcome as l, formatSeconds as lt, formatDuration as m, meanInterval as mt, activityLabel as n, effortLabel as nt, compareView as o, effortVerdict as ot, findEval as p, mcnemar as pt, TOKENS_UNREPORTED as q, answerRows as r, effortOf as rt, defaultAttempt as s, formatCount as st, COMPARE_ORDER as t, effortChangeLabel as tt, evalTree as u, tokenValues as ut, hasUngatedCells as v, signedRank as vt, runLead as w, stackChanges as wt, isUngatedMiss as x, cellsChanged as xt, indexFiles as y, wilson as yt, judgeLabel as z };
|
|
1373
1468
|
|
|
1374
|
-
//# sourceMappingURL=model-
|
|
1469
|
+
//# sourceMappingURL=model-CWlAqmbU.js.map
|