reeval 0.11.0 → 0.13.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 +115 -257
- package/assets/package.json +1 -1
- package/assets/pnpm-lock.yaml +41 -30
- package/bin/mcp-timer.cjs +224 -0
- package/dist/{adapter-Bwy3QxAK.js → adapter-IKKo4sZj.js} +4 -4
- package/dist/{adapter-Bwy3QxAK.js.map → adapter-IKKo4sZj.js.map} +1 -1
- package/dist/{agent-DpE80WPz.js → agent-ClE-g9VL.js} +22 -7
- package/dist/{agent-DpE80WPz.js.map → agent-ClE-g9VL.js.map} +1 -1
- package/dist/{analysis-Bxub9LMT.js → analysis-B0nOfAzA.js} +3 -3
- package/dist/{analysis-Bxub9LMT.js.map → analysis-B0nOfAzA.js.map} +1 -1
- package/dist/{assemble-D9GWr-HS.js → assemble-BO93VAk1.js} +22 -20
- package/dist/assemble-BO93VAk1.js.map +1 -0
- package/dist/assemble-VQxyoDxK.js +1 -0
- package/dist/{attempt-CGPV3BZY.js → attempt-jI0OWxlz.js} +2 -2
- package/dist/{attempt-CGPV3BZY.js.map → attempt-jI0OWxlz.js.map} +1 -1
- package/dist/bridge/index.mjs +2 -1
- package/dist/{capture-BQlGHiMC.js → capture-dn2hjSLj.js} +29 -21
- package/dist/{capture-BQlGHiMC.js.map → capture-dn2hjSLj.js.map} +1 -1
- package/dist/capture-nIJ-7kUE.js +1 -0
- package/dist/{cli-ClpPT8kn.js → cli-BCE1xlm4.js} +176 -120
- package/dist/cli-BCE1xlm4.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-BlM0y8jN.js → command-Bh3yhN_b.js} +8 -8
- package/dist/{command-BlM0y8jN.js.map → command-Bh3yhN_b.js.map} +1 -1
- package/dist/command-C6vwmjS7.js +91 -0
- package/dist/command-C6vwmjS7.js.map +1 -0
- package/dist/{command-DbAe1Rzb.js → command-CANun0m0.js} +16 -19
- package/dist/command-CANun0m0.js.map +1 -0
- package/dist/command-CBaHukyl.js +335 -0
- package/dist/command-CBaHukyl.js.map +1 -0
- package/dist/{command-TgbzPizb.js → command-D_kEnYcX.js} +17 -16
- package/dist/command-D_kEnYcX.js.map +1 -0
- package/dist/commands-7tH3EsVu.js +666 -0
- package/dist/commands-7tH3EsVu.js.map +1 -0
- package/dist/{commands-CthqwkAn.js → commands-BKGzBMgb.js} +1 -1
- package/dist/{config-DrVSEVN0.js → config-D7TFvUpL.js} +40 -55
- package/dist/config-D7TFvUpL.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-B4nOhn0Z.js} +3 -3
- package/dist/{contrasts-5zsj32gk.js.map → contrasts-B4nOhn0Z.js.map} +1 -1
- package/dist/db-DJUuFoWQ.js +602 -0
- package/dist/db-DJUuFoWQ.js.map +1 -0
- package/dist/db-W9EFlXnn.js +2 -0
- package/dist/{dist-CuY4ehEk.js → dist-Dp_AJgYN.js} +3 -3
- package/dist/{dist-CuY4ehEk.js.map → dist-Dp_AJgYN.js.map} +1 -1
- package/dist/{docker-D1HZDS6q.js → docker-CQxucRPe.js} +16 -15
- package/dist/docker-CQxucRPe.js.map +1 -0
- package/dist/{docker-DNmMPOBb.js → docker-Dac6Zalz.js} +1 -1
- package/dist/{docker-DOvjji9I.js → docker-DuHcQidD.js} +3 -3
- package/dist/{docker-DOvjji9I.js.map → docker-DuHcQidD.js.map} +1 -1
- package/dist/{doctor-D2MbNO8L.js → doctor-De_QlOTM.js} +72 -38
- package/dist/doctor-De_QlOTM.js.map +1 -0
- package/dist/{egress-2-qzPvGi.js → egress-DEAvq8Fl.js} +453 -31
- package/dist/egress-DEAvq8Fl.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-B4IuURK1.js} +247 -14
- package/dist/environment-B4IuURK1.js.map +1 -0
- package/dist/{evaluate-DMyaGQEj.d.ts → evaluate-C9-ritA5.d.ts} +2 -2
- package/dist/{evaluate-DKIl54Hb.js → evaluate-Djk1YPFL.js} +540 -560
- package/dist/evaluate-Djk1YPFL.js.map +1 -0
- package/dist/facts-Cfx1H70y.js +898 -0
- package/dist/facts-Cfx1H70y.js.map +1 -0
- package/dist/files-Bs6H3HiG.js +65 -0
- package/dist/files-Bs6H3HiG.js.map +1 -0
- package/dist/{files-BpUYBwGu.js → files-CN1QfenC.js} +31 -8
- package/dist/files-CN1QfenC.js.map +1 -0
- package/dist/files-CtjEXWXm.js +1 -0
- package/dist/{files-BXHZFWmx.js → files-D27nUk0K.js} +6 -17
- package/dist/files-D27nUk0K.js.map +1 -0
- package/dist/files-D3gJa91B.js +1 -0
- package/dist/generate-BnrvBAzF.js +1646 -0
- package/dist/generate-BnrvBAzF.js.map +1 -0
- package/dist/{git-Crl3b87o.js → git-rPfl7AD1.js} +3 -3
- package/dist/{git-Crl3b87o.js.map → git-rPfl7AD1.js.map} +1 -1
- package/dist/{harness-CEuntrla.js → harness-1OkumOAm.js} +3 -3
- package/dist/{harness-CEuntrla.js.map → harness-1OkumOAm.js.map} +1 -1
- package/dist/harness.d.ts +1 -1
- package/dist/harness.js +1 -1
- package/dist/{header-DHQv_ZrF.js → header-BVzbRnNv.js} +10 -3
- package/dist/{header-DHQv_ZrF.js.map → header-BVzbRnNv.js.map} +1 -1
- package/dist/{images-Bi3aGxb9.js → images-m784ueGK.js} +61 -13
- package/dist/images-m784ueGK.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/dist/init-hiTkiM4L.js +543 -0
- package/dist/init-hiTkiM4L.js.map +1 -0
- package/dist/init-kMkTgTZc.js +1 -0
- package/dist/insights-B2Xmhz9o.js +64 -0
- package/dist/insights-B2Xmhz9o.js.map +1 -0
- package/dist/{invocations-BYDPe3fV.js → invocations-D_ePcwyL.js} +4 -4
- package/dist/{invocations-BYDPe3fV.js.map → invocations-D_ePcwyL.js.map} +1 -1
- package/dist/{judge-DW_GDOmB.js → judge-CEDIfRiU.js} +50 -15
- package/dist/judge-CEDIfRiU.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-B8H3gL69.js +1 -0
- package/dist/{model-DaVCY3rb.js → model-CTiuzkWw.js} +9 -7
- package/dist/model-CTiuzkWw.js.map +1 -0
- package/dist/model-DcIbmggK.js +1 -0
- package/dist/{model-D0IcOQao.js → model-DpkclE4r.js} +60 -25
- package/dist/model-DpkclE4r.js.map +1 -0
- package/dist/{model-DaX4bNLZ.js → model-UgHDMhI1.js} +144 -46
- package/dist/model-UgHDMhI1.js.map +1 -0
- package/dist/{node-B3ydHo6t.js → node-CGZYh4Fj.js} +4 -4
- package/dist/{node-B3ydHo6t.js.map → node-CGZYh4Fj.js.map} +1 -1
- package/dist/{opencode-providers-J9colP0-.js → opencode-providers-snfeWd6Z.js} +86 -47
- package/dist/opencode-providers-snfeWd6Z.js.map +1 -0
- package/dist/{options-C0d0AzeR.js → options-CyAyLjgJ.js} +22 -11
- package/dist/options-CyAyLjgJ.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-uMq9rCl_.js} +2 -2
- package/dist/{patch-B1bnfhN-.js.map → patch-uMq9rCl_.js.map} +1 -1
- package/dist/{plan-DgQxp9yy.js → plan-CZYgXnZh.js} +21 -8
- package/dist/plan-CZYgXnZh.js.map +1 -0
- package/dist/plugins-P-uh54VF.js +654 -0
- package/dist/plugins-P-uh54VF.js.map +1 -0
- package/dist/{preflight-DlQvbySb.js → preflight-BQlPTHVu.js} +1 -1
- package/dist/{preflight-BRzD30L5.js → preflight-D3HvKeAx.js} +14 -10
- package/dist/preflight-D3HvKeAx.js.map +1 -0
- package/dist/prepare-DCwM2KKD.js +2 -0
- package/dist/{prepare-B_y-AFMv.js → prepare-Dx7dOnJB.js} +70 -23
- package/dist/prepare-Dx7dOnJB.js.map +1 -0
- package/dist/{provenance-DQ0AXn6c.js → provenance-C_-8y-x3.js} +4 -4
- package/dist/{provenance-DQ0AXn6c.js.map → provenance-C_-8y-x3.js.map} +1 -1
- package/dist/{providers-DoTq1jHW.js → providers-CF5UEaP8.js} +24 -10
- package/dist/providers-CF5UEaP8.js.map +1 -0
- package/dist/providers-CTBYvMxu.js +1 -0
- package/dist/{query-BO-ux7RB.js → query-DXthKmq0.js} +3 -3
- package/dist/{query-BO-ux7RB.js.map → query-DXthKmq0.js.map} +1 -1
- package/dist/query-D_1ARx5q.js +1 -0
- package/dist/{questions-C2dym2ce.js → questions-KENpWnfV.js} +8 -9
- package/dist/questions-KENpWnfV.js.map +1 -0
- package/dist/{record-BKmMvZ6O.js → record-kk9M1hj-.js} +8 -4
- package/dist/record-kk9M1hj-.js.map +1 -0
- package/dist/{redact-DJ9JCShu.js → redact-CRGdfV2s.js} +4 -2
- package/dist/redact-CRGdfV2s.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-Ml6bcSdV.js +278 -0
- package/dist/remarks-Ml6bcSdV.js.map +1 -0
- package/dist/{remote-CPPW86Q9.js → remote-Dkeghk8k.js} +3 -3
- package/dist/{remote-CPPW86Q9.js.map → remote-Dkeghk8k.js.map} +1 -1
- package/dist/resolve-CMmhACr6.js +1 -0
- package/dist/resolve-DzdWcIL6.js +724 -0
- package/dist/resolve-DzdWcIL6.js.map +1 -0
- package/dist/{results-BE2f-1XS.js → results-D-naai_Q.js} +33 -8
- package/dist/results-D-naai_Q.js.map +1 -0
- package/dist/{resume-Ca1c8vix.js → resume-8-nnW8iO.js} +4 -4
- package/dist/{resume-Ca1c8vix.js.map → resume-8-nnW8iO.js.map} +1 -1
- package/dist/{root-DICDHCtp.js → root-DNuLhaA5.js} +2 -2
- package/dist/root-DNuLhaA5.js.map +1 -0
- package/dist/rules-CcV3zLDR.js +318 -0
- package/dist/rules-CcV3zLDR.js.map +1 -0
- package/dist/run-Bel7Vde4.js +88 -0
- package/dist/run-Bel7Vde4.js.map +1 -0
- package/dist/{sandbox-DLrsvu7U.js → sandbox-YLbk9mO7.js} +2 -2
- package/dist/{sandbox-DLrsvu7U.js.map → sandbox-YLbk9mO7.js.map} +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/sandbox.js +1 -1
- package/dist/server-C-ysqkLv.js +1 -0
- package/dist/{server-TUY5xA_A.js → server-De8oH3bt.js} +10 -10
- package/dist/{server-TUY5xA_A.js.map → server-De8oH3bt.js.map} +1 -1
- package/dist/{source-DJGS0a0u.js → source-C686eZpY.js} +2 -2
- package/dist/{source-DJGS0a0u.js.map → source-C686eZpY.js.map} +1 -1
- package/dist/source-DjgypUHW.js +1 -0
- package/dist/src-3mP821Pt.js +2 -0
- package/dist/src-B3KCLZVk.js +3 -0
- package/dist/src-BAyg6CtQ.js +2 -0
- package/dist/{src-CF17Ug08.js → src-BYLM3hEz.js} +22 -6
- package/dist/src-BYLM3hEz.js.map +1 -0
- package/dist/src-BezgGX4X.js +2 -0
- package/dist/{src-DvCg0NBs.js → src-C7W6kg81.js} +40 -10
- package/dist/{src-DvCg0NBs.js.map → src-C7W6kg81.js.map} +1 -1
- package/dist/{src-ftu5wPSt.js → src-CIpKL45U.js} +782 -169
- package/dist/src-CIpKL45U.js.map +1 -0
- package/dist/src-ChBhk06Q.js +2 -0
- package/dist/{src-BxfCKA3_.js → src-CoqZYspK.js} +1 -1
- package/dist/{src-CFp86GtV.js → src-CzQrAcF8.js} +49 -49
- package/dist/src-CzQrAcF8.js.map +1 -0
- package/dist/src-D9fSTxlc.js +1 -0
- package/dist/{src-FGXhkEkH.js → src-DeY52Gyf.js} +182 -23
- package/dist/src-DeY52Gyf.js.map +1 -0
- package/dist/src-DrJSnoMR.js +2 -0
- package/dist/{src-DvK0EIZx.js → src-Xj_BZKbq.js} +112 -13
- package/dist/src-Xj_BZKbq.js.map +1 -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-dhSTRN50.js +2 -0
- package/dist/{src-C7_1SqDP.js → src-djNNYIdP.js} +2 -2
- package/dist/{src-C7_1SqDP.js.map → src-djNNYIdP.js.map} +1 -1
- package/dist/state-BGWGAwdo.js +1 -0
- package/dist/{state-DfpHox6b.js → state-C0i_ujQZ.js} +19 -17
- package/dist/{state-DfpHox6b.js.map → state-C0i_ujQZ.js.map} +1 -1
- package/dist/studio-app/assets/{index-CBkhNAv8.js → index-Bb_cid9k.js} +9 -9
- package/dist/studio-app/index.html +1 -1
- package/dist/{suite-Cw_7G2RM.js → suite-DmuF_ApO.js} +80 -30
- package/dist/suite-DmuF_ApO.js.map +1 -0
- package/dist/suite-mn9g4veR.js +2 -0
- package/dist/{summary-BUKfU-9l.js → summary-BFMHMTz2.js} +273 -47
- package/dist/summary-BFMHMTz2.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-BYdlwMwo.d.ts → types-B-9b1MDV.d.ts} +850 -34
- package/dist/types-C5vI3g1C.js.map +1 -1
- package/dist/usage-BDo2q_yu.js +1 -0
- package/dist/{command-Bj39y-Wm.js → validate-DWjkshl1.js} +20 -377
- package/dist/validate-DWjkshl1.js.map +1 -0
- package/dist/view/index.d.ts +31 -263
- package/dist/view/index.js +8 -7
- package/dist/views-DE2A1jEX.js +2 -0
- package/dist/{views-B8w2J-gD.js → views-Dk8MCQKr.js} +8 -98
- package/dist/views-Dk8MCQKr.js.map +1 -0
- package/dist/{worker-entry-DNnveLqx.js → worker-entry-CqrzGPF4.js} +2 -2
- package/dist/{worker-entry-DNnveLqx.js.map → worker-entry-CqrzGPF4.js.map} +1 -1
- package/dist/workspace-B1eGO46M.js +1 -0
- package/dist/{workspace-C4RA3srV.js → workspace-CLeOybkr.js} +45 -11
- package/dist/workspace-CLeOybkr.js.map +1 -0
- package/package.json +5 -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/docker-D1HZDS6q.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-DaVCY3rb.js.map +0 -1
- package/dist/model-DaX4bNLZ.js.map +0 -1
- package/dist/model-_bxNrk2h.js +0 -1
- package/dist/opencode-providers-J9colP0-.js.map +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/questions-C2dym2ce.js.map +0 -1
- package/dist/record-BKmMvZ6O.js.map +0 -1
- package/dist/redact-DJ9JCShu.js.map +0 -1
- package/dist/results-BE2f-1XS.js.map +0 -1
- package/dist/root-DICDHCtp.js.map +0 -1
- package/dist/server-Dp8eOeK5.js +0 -1
- package/dist/source-DdbLGR1M.js +0 -1
- package/dist/src-CF17Ug08.js.map +0 -1
- package/dist/src-CFp86GtV.js.map +0 -1
- package/dist/src-CLoOMVWI.js +0 -3
- package/dist/src-CcrQbpG8.js +0 -2
- package/dist/src-DCFtJRp0.js +0 -2
- package/dist/src-DSYYPEOj.js +0 -2
- package/dist/src-DYO3DdnQ.js +0 -1
- package/dist/src-DvK0EIZx.js.map +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
- package/dist/workspace-C4RA3srV.js.map +0 -1
- package/dist/workspace-C_X0tdv6.js +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { r as badCharacterAt } from "./redact-CRGdfV2s.js";
|
|
1
2
|
import { setTimeout } from "node:timers/promises";
|
|
2
3
|
//#region src/judge/retry.ts
|
|
3
4
|
/** Up to six tries over about a minute: long enough to ride out a provider's "high demand". */
|
|
@@ -65,17 +66,34 @@ async function withRetries(call, policy, signal) {
|
|
|
65
66
|
//#region src/judge/index.ts
|
|
66
67
|
/** The judge the docs recommend, pinned so a model update never silently moves scores. */
|
|
67
68
|
const RECOMMENDED_JUDGE_MODEL = "typesafe-ai/jev-1.14.0";
|
|
69
|
+
/** The language model `reeval init` sets as `analysis.model` and the docs recommend for insights. */
|
|
70
|
+
const RECOMMENDED_ANALYSIS_MODEL = "google/gemini-3.8-flash";
|
|
68
71
|
const DEFAULT_THRESHOLD = .8;
|
|
69
72
|
const GATEWAY_KEYS = ["AI_GATEWAY_API_KEY", "VERCEL_OIDC_TOKEN"];
|
|
70
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* Providers reeval calls directly, through their own AI SDK package, when their key is set. The
|
|
75
|
+
* direct key wins over a Gateway credential; any other prefix goes through the AI Gateway.
|
|
76
|
+
*/
|
|
71
77
|
const DIRECT_PROVIDERS = {
|
|
78
|
+
anthropic: {
|
|
79
|
+
key: "ANTHROPIC_API_KEY",
|
|
80
|
+
pkg: "@ai-sdk/anthropic",
|
|
81
|
+
name: "Anthropic"
|
|
82
|
+
},
|
|
72
83
|
google: {
|
|
73
84
|
key: "GOOGLE_GENERATIVE_AI_API_KEY",
|
|
74
|
-
pkg: "@ai-sdk/google"
|
|
85
|
+
pkg: "@ai-sdk/google",
|
|
86
|
+
name: "Google"
|
|
87
|
+
},
|
|
88
|
+
openai: {
|
|
89
|
+
key: "OPENAI_API_KEY",
|
|
90
|
+
pkg: "@ai-sdk/openai",
|
|
91
|
+
name: "OpenAI"
|
|
75
92
|
},
|
|
76
93
|
"typesafe-ai": {
|
|
77
94
|
key: "TYPESAFE_AI_API_KEY",
|
|
78
|
-
pkg: "@ai-sdk/typesafe-ai"
|
|
95
|
+
pkg: "@ai-sdk/typesafe-ai",
|
|
96
|
+
name: "TypeSafe AI"
|
|
79
97
|
}
|
|
80
98
|
};
|
|
81
99
|
const isFakeJudge = (m) => typeof m === "object" && m !== null && m.kind === "fake-judge";
|
|
@@ -94,27 +112,44 @@ function checkModelString(model, what = "The judge model", examples = [RECOMMEND
|
|
|
94
112
|
return `${what} needs a provider prefix, e.g. ${examples.map((e) => `"${e}"`).join(" or ")} (got "${model}")`;
|
|
95
113
|
}
|
|
96
114
|
const providerOf = (model) => model.slice(0, model.indexOf("/"));
|
|
97
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Environment variables a model needs, as alternatives in the order reeval prefers them: its
|
|
117
|
+
* provider's own key, then the Gateway's. Any one of them is enough.
|
|
118
|
+
*/
|
|
98
119
|
function judgeCredentials(model) {
|
|
99
120
|
if (isFakeJudge(model)) return [];
|
|
100
121
|
const direct = DIRECT_PROVIDERS[providerOf(model)];
|
|
101
122
|
return direct ? [direct.key, ...GATEWAY_KEYS] : GATEWAY_KEYS;
|
|
102
123
|
}
|
|
103
124
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
125
|
+
* The keys that would work for a model, each with its route: `ANTHROPIC_API_KEY (to call
|
|
126
|
+
* Anthropic directly) or AI_GATEWAY_API_KEY or VERCEL_OIDC_TOKEN (to go through the Vercel AI
|
|
127
|
+
* Gateway)`. A prefix with no direct route says the Gateway is its only one.
|
|
106
128
|
*/
|
|
107
|
-
function
|
|
129
|
+
function modelKeyOptions(model) {
|
|
130
|
+
const prefix = providerOf(model);
|
|
131
|
+
const direct = DIRECT_PROVIDERS[prefix];
|
|
132
|
+
const gateway = GATEWAY_KEYS.join(" or ");
|
|
133
|
+
if (direct) return `${direct.key} (to call ${direct.name} directly) or ${gateway} (to go through the Vercel AI Gateway)`;
|
|
134
|
+
return `${gateway} (to go through the Vercel AI Gateway, the only route for ${prefix}/* models; reeval calls ${Object.keys(DIRECT_PROVIDERS).map((p) => `${p}/*`).join(", ")} directly)`;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* The provider's own package when its key is set, else the Vercel AI Gateway when a Gateway
|
|
138
|
+
* credential is set. Throws, naming the model, its prefix and every key that would work, when
|
|
139
|
+
* neither is, or when the key it would send has whitespace or a line break in it.
|
|
140
|
+
*/
|
|
141
|
+
function judgeRoute(model, env = process.env, what = "judge model") {
|
|
108
142
|
const provider = providerOf(model);
|
|
109
143
|
const direct = DIRECT_PROVIDERS[provider];
|
|
110
|
-
|
|
144
|
+
const key = judgeCredentials(model).find((k) => env[k]);
|
|
145
|
+
if (key === void 0) throw new Error(`No credentials for ${what} "${model}" (provider "${provider}"). Set ${modelKeyOptions(model)}, in the environment or .env.local.`);
|
|
146
|
+
const at = badCharacterAt(env[key]);
|
|
147
|
+
if (at) throw new Error(`${key} for ${what} "${model}" has whitespace or a line break in it at character ${at}. A key copied from a wrapped terminal line picks these up; set it again as one line.`);
|
|
148
|
+
return direct && key === direct.key ? {
|
|
111
149
|
kind: "direct",
|
|
112
150
|
provider,
|
|
113
151
|
pkg: direct.pkg
|
|
114
|
-
};
|
|
115
|
-
if (GATEWAY_KEYS.some((k) => env[k])) return { kind: "gateway" };
|
|
116
|
-
const options = direct ? `Set ${direct.key} to call ${direct.pkg} directly, or AI_GATEWAY_API_KEY (or VERCEL_OIDC_TOKEN) to go through the Vercel AI Gateway, in the environment or .env.local.` : "Set AI_GATEWAY_API_KEY (or VERCEL_OIDC_TOKEN) to go through the Vercel AI Gateway, in the environment or .env.local.";
|
|
117
|
-
throw new Error(`No credentials for judge model "${model}". ${options}`);
|
|
152
|
+
} : { kind: "gateway" };
|
|
118
153
|
}
|
|
119
154
|
/** Transient provider errors (429, 5xx, "high demand") are retried with backoff and recorded. */
|
|
120
155
|
async function runJudge(question, state, options, signal, retry = JUDGE_RETRY) {
|
|
@@ -128,7 +163,7 @@ async function runJudge(question, state, options, signal, retry = JUDGE_RETRY) {
|
|
|
128
163
|
const problem = checkModelString(model);
|
|
129
164
|
if (problem) throw new Error(problem);
|
|
130
165
|
}
|
|
131
|
-
const { scoreWithModel } = await import("./model-
|
|
166
|
+
const { scoreWithModel } = await import("./model-CTiuzkWw.js");
|
|
132
167
|
const scored = await withRetries(() => scoreWithModel(model, question, state, options.providerOptions, signal), retry, signal);
|
|
133
168
|
({score, resolvedModel} = scored.value);
|
|
134
169
|
retries = scored.retries;
|
|
@@ -146,6 +181,6 @@ async function runJudge(question, state, options, signal, retry = JUDGE_RETRY) {
|
|
|
146
181
|
};
|
|
147
182
|
}
|
|
148
183
|
//#endregion
|
|
149
|
-
export {
|
|
184
|
+
export { checkModelString as a, judgeModelName as c, runJudge as d, isApiError as f, 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, modelKeyOptions as u };
|
|
150
185
|
|
|
151
|
-
//# sourceMappingURL=judge-
|
|
186
|
+
//# sourceMappingURL=judge-CEDIfRiU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-CEDIfRiU.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-B-9b1MDV.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-CEDIfRiU.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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as analysisKeyProblem, n as analysisModelName, r as callAnalysisModel, i as cannedModel, a as isFake, o as providerModel, s as questionModel, c as questionModelLabel, l as resolveAnalysisModel } from "./model-DpkclE4r.js";
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as debugTrace } from "./attempt-
|
|
1
|
+
import { l as judgeRoute } from "./judge-CEDIfRiU.js";
|
|
2
|
+
import { i as debugTrace } from "./attempt-jI0OWxlz.js";
|
|
3
3
|
import { experimental_decide } from "ai";
|
|
4
|
-
import { google } from "@ai-sdk/google";
|
|
5
4
|
//#region src/judge/model.ts
|
|
6
5
|
/** See `judgeRoute`: a known provider's own package when its key is set, else the AI Gateway. */
|
|
7
6
|
async function resolveModel(model) {
|
|
@@ -9,9 +8,12 @@ async function resolveModel(model) {
|
|
|
9
8
|
const route = judgeRoute(model);
|
|
10
9
|
if (route.kind === "gateway") return model;
|
|
11
10
|
const id = model.slice(route.provider.length + 1);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
switch (route.provider) {
|
|
12
|
+
case "anthropic": return (await import("@ai-sdk/anthropic")).anthropic.decisionModel(id);
|
|
13
|
+
case "google": return (await import("@ai-sdk/google")).google.decisionModel(id);
|
|
14
|
+
case "openai": return (await import("@ai-sdk/openai")).openai.decisionModel(id);
|
|
15
|
+
default: return (await import("@ai-sdk/typesafe-ai")).typeSafeAi.decisionModel(id);
|
|
16
|
+
}
|
|
15
17
|
}
|
|
16
18
|
async function scoreWithModel(model, question, state, providerOptions, signal) {
|
|
17
19
|
const result = await experimental_decide({
|
|
@@ -41,4 +43,4 @@ async function scoreWithModel(model, question, state, providerOptions, signal) {
|
|
|
41
43
|
//#endregion
|
|
42
44
|
export { scoreWithModel };
|
|
43
45
|
|
|
44
|
-
//# sourceMappingURL=model-
|
|
46
|
+
//# sourceMappingURL=model-CTiuzkWw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-CTiuzkWw.js","names":["decide"],"sources":["../src/judge/model.ts"],"mappings":";;;;;AAQA,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,QAAQ,MAAM,UAAd;EACE,KAAK,aACH,QAAQ,MAAM,OAAO,qBAAA,CAAsB,UAAU,cAAc,EAAE;EACvE,KAAK,UACH,QAAQ,MAAM,OAAO,kBAAA,CAAmB,OAAO,cAAc,EAAE;EACjE,KAAK,UACH,QAAQ,MAAM,OAAO,kBAAA,CAAmB,OAAO,cAAc,EAAE;EACjE,SACE,QAAQ,MAAM,OAAO,uBAAA,CAAwB,WAAW,cAAc,EAAE;CAC5E;AACF;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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { T as runOutcome } from "./model-UgHDMhI1.js";
|
|
@@ -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, u as modelKeyOptions } from "./judge-CEDIfRiU.js";
|
|
3
|
+
import { n as analysisModelOf } from "./config-D7TFvUpL.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,30 @@ 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
|
+
* Why `analysis.model`'s calls would fail for want of a usable key: none of the keys that would
|
|
128
|
+
* work for its provider is set, or the one reeval would send has whitespace or a line break in it.
|
|
129
|
+
* Null when a usable key is set, or for any other model. `brief` names the first two keys only,
|
|
130
|
+
* for the line a run ends with; the plan's warning has them all.
|
|
131
|
+
*/
|
|
132
|
+
function analysisKeyProblem(config, env = process.env, brief = false) {
|
|
133
|
+
const model = analysisModelOf(config);
|
|
134
|
+
if (typeof model !== "string" || isEvaluationModel(model) || checkModelString(model)) return null;
|
|
135
|
+
const keys = judgeCredentials(model);
|
|
136
|
+
if (!keys.some((k) => env[k])) {
|
|
137
|
+
if (brief) return `set ${keys[0]} or ${keys[1]}, or analysis: { insights: false }`;
|
|
138
|
+
return `set ${modelKeyOptions(model)} for analysis.model, "${model}", in .env.local, or analysis: { insights: false }`;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
judgeRoute(model, env, "analysis model");
|
|
142
|
+
return null;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
return error.message;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
126
147
|
/** Checks the model and its credentials before any work; throws a UsageError (exit 2). */
|
|
127
|
-
function resolveAnalysisModel(config
|
|
128
|
-
const model = analysisModelName(config
|
|
148
|
+
function resolveAnalysisModel(config) {
|
|
149
|
+
const model = analysisModelName(config);
|
|
129
150
|
if (isFake(model)) return {
|
|
130
151
|
name: "fake",
|
|
131
152
|
route: "fake",
|
|
@@ -135,41 +156,55 @@ function resolveAnalysisModel(config, use = "analyze") {
|
|
|
135
156
|
try {
|
|
136
157
|
return {
|
|
137
158
|
name: model,
|
|
138
|
-
route: judgeRoute(model).kind
|
|
159
|
+
route: judgeRoute(model, process.env, "analysis model").kind
|
|
139
160
|
};
|
|
140
161
|
} catch (error) {
|
|
141
|
-
|
|
142
|
-
throw new UsageError(use === "agent" ? message : `${message} Or run reeval analyze --context, which needs no key.`);
|
|
162
|
+
throw new UsageError(`${error.message} Or run reeval analyze --context, which needs no key.`);
|
|
143
163
|
}
|
|
144
164
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
165
|
+
/**
|
|
166
|
+
* A language model that answers `text`, through the AI SDK's own parsing, or throws `error`.
|
|
167
|
+
* With `countTokens`, it reports a token per 4 characters of its prompt and its answer, so a
|
|
168
|
+
* token budget applies to it as it would to a real model; otherwise it reports none.
|
|
169
|
+
*/
|
|
170
|
+
function cannedModel(answer, countTokens = false) {
|
|
147
171
|
return {
|
|
148
172
|
specificationVersion: "v4",
|
|
149
173
|
provider: "fake",
|
|
150
174
|
modelId: "fake-analysis",
|
|
151
175
|
supportedUrls: {},
|
|
152
|
-
doGenerate: async () => {
|
|
176
|
+
doGenerate: async (options) => {
|
|
153
177
|
if ("error" in answer) throw new Error(answer.error);
|
|
178
|
+
const input = countTokens ? Math.ceil(JSON.stringify(options.prompt).length / 4) : 0;
|
|
179
|
+
let output = countTokens ? Math.ceil(answer.text.length / 4) : 0;
|
|
180
|
+
let text = answer.text;
|
|
181
|
+
const cut = countTokens && options.maxOutputTokens !== void 0 && output > options.maxOutputTokens;
|
|
182
|
+
if (cut) {
|
|
183
|
+
output = options.maxOutputTokens;
|
|
184
|
+
text = text.slice(0, output * 4);
|
|
185
|
+
}
|
|
154
186
|
return {
|
|
155
187
|
content: [{
|
|
156
188
|
type: "text",
|
|
157
|
-
text
|
|
189
|
+
text
|
|
158
190
|
}],
|
|
159
|
-
finishReason: {
|
|
191
|
+
finishReason: cut ? {
|
|
192
|
+
unified: "length",
|
|
193
|
+
raw: "max_tokens"
|
|
194
|
+
} : {
|
|
160
195
|
unified: "stop",
|
|
161
196
|
raw: "stop"
|
|
162
197
|
},
|
|
163
198
|
usage: {
|
|
164
199
|
inputTokens: {
|
|
165
|
-
total:
|
|
166
|
-
noCache:
|
|
200
|
+
total: input,
|
|
201
|
+
noCache: input,
|
|
167
202
|
cacheRead: 0,
|
|
168
203
|
cacheWrite: 0
|
|
169
204
|
},
|
|
170
205
|
outputTokens: {
|
|
171
|
-
total:
|
|
172
|
-
text:
|
|
206
|
+
total: output,
|
|
207
|
+
text: output,
|
|
173
208
|
reasoning: 0
|
|
174
209
|
}
|
|
175
210
|
},
|
|
@@ -197,11 +232,12 @@ async function providerModel(model) {
|
|
|
197
232
|
if (model.route === "gateway") return model.name;
|
|
198
233
|
const provider = model.name.slice(0, model.name.indexOf("/"));
|
|
199
234
|
const id = model.name.slice(provider.length + 1);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return google(id);
|
|
235
|
+
switch (provider) {
|
|
236
|
+
case "anthropic": return (await import("@ai-sdk/anthropic")).anthropic(id);
|
|
237
|
+
case "google": return (await import("@ai-sdk/google")).google(id);
|
|
238
|
+
case "openai": return (await import("@ai-sdk/openai")).openai(id);
|
|
239
|
+
default: return model.name;
|
|
203
240
|
}
|
|
204
|
-
return model.name;
|
|
205
241
|
}
|
|
206
242
|
async function callAnalysisModel(model, digest, prompt, maxOutputTokens) {
|
|
207
243
|
const started = Date.now();
|
|
@@ -213,7 +249,6 @@ async function callAnalysisModel(model, digest, prompt, maxOutputTokens) {
|
|
|
213
249
|
schema: analysisSchema,
|
|
214
250
|
name: "analysis"
|
|
215
251
|
}),
|
|
216
|
-
temperature: .2,
|
|
217
252
|
maxOutputTokens,
|
|
218
253
|
maxRetries: 3
|
|
219
254
|
});
|
|
@@ -228,6 +263,6 @@ async function callAnalysisModel(model, digest, prompt, maxOutputTokens) {
|
|
|
228
263
|
};
|
|
229
264
|
}
|
|
230
265
|
//#endregion
|
|
231
|
-
export {
|
|
266
|
+
export { isFake as a, questionModelLabel as c, cannedModel as i, resolveAnalysisModel as l, analysisModelName as n, providerModel as o, callAnalysisModel as r, questionModel as s, analysisKeyProblem as t, SYSTEM_PROMPT as u };
|
|
232
267
|
|
|
233
|
-
//# sourceMappingURL=model-
|
|
268
|
+
//# sourceMappingURL=model-DpkclE4r.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-DpkclE4r.js","names":[],"sources":["../src/analysis/schema.ts","../src/analysis/model.ts"],"mappings":"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"}
|