@tangle-network/agent-eval 0.216.1 → 0.217.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 +102 -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-C84irm4i.js → analyze-runs-DqPJaJ4X.js} +225 -21
- package/dist/analyze-runs-DqPJaJ4X.js.map +1 -0
- package/dist/{analyze-runs-D68fd-su.d.ts → analyze-runs-DyeNcenW.d.ts} +5 -5
- package/dist/{analyze-runs-D68fd-su.d.ts.map → analyze-runs-DyeNcenW.d.ts.map} +1 -1
- 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-xQK8nOI6.js} +554 -89
- package/dist/benchmark-command-xQK8nOI6.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-CJGkxAQ6.js} +23 -530
- package/dist/campaign-CJGkxAQ6.js.map +1 -0
- package/dist/{campaign-evidence-Clrn4hBV.js → campaign-evidence-CQYw8_0H.js} +10 -18
- package/dist/{campaign-evidence-Clrn4hBV.js.map → campaign-evidence-CQYw8_0H.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-ldqxYYTN.js} +2 -2
- package/dist/{chat-client-l-MVDlDk.js.map → chat-client-ldqxYYTN.js.map} +1 -1
- package/dist/{chat-json-call-puMArmtW.js → chat-json-call-DavzexSp.js} +3 -2
- package/dist/chat-json-call-DavzexSp.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-B_jw6C9p.js} +9 -64
- package/dist/completion-verifier-B_jw6C9p.js.map +1 -0
- package/dist/contract/index.d.ts +12 -12
- package/dist/contract/index.js +25 -401
- 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-ClYjq3QE.js} +8 -11
- package/dist/default-registry-ClYjq3QE.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-BDxNlP3D.js} +10 -10
- package/dist/{define-agent-eval-CNTPzIkp.js.map → define-agent-eval-BDxNlP3D.js.map} +1 -1
- package/dist/{define-agent-eval-WSck0CZJ.d.ts → define-agent-eval-BIkH_gAR.d.ts} +8 -8
- package/dist/define-agent-eval-BIkH_gAR.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-DhdCr1Dc.js} +5 -10
- package/dist/dspy-rlm-engine-DhdCr1Dc.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-90jeaCAI.js → eval-campaign-BLEfBGbA.js} +6 -6
- package/dist/{eval-campaign-90jeaCAI.js.map → eval-campaign-BLEfBGbA.js.map} +1 -1
- package/dist/{evaluation-6Yoi74gM.d.ts → evaluation-jTjC_QQD.d.ts} +7 -7
- package/dist/evaluation-jTjC_QQD.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 +149 -241
- package/dist/experiment/index.js.map +1 -1
- package/dist/{exporters-X4xwla8A.js → exporters-Cl6IeNAu.js} +3 -3
- package/dist/exporters-Cl6IeNAu.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-KVFGvYX1.js} +4 -3
- package/dist/external-optimizer-process-KVFGvYX1.js.map +1 -0
- package/dist/{external-optimizer-subprocess-BqW0hHcI.js → external-optimizer-subprocess-XIHBOSKt.js} +9 -11
- package/dist/external-optimizer-subprocess-XIHBOSKt.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-BMVQtEsm.js} +9 -249
- package/dist/findings-store-BMVQtEsm.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-D9f7-oX7.js} +4 -24
- package/dist/hf-dataset-D9f7-oX7.js.map +1 -0
- package/dist/hosted/index.d.ts +2 -2
- package/dist/hosted/index.js +2 -2
- package/dist/{index-DHKEAv3s.d.ts → index-9jJ2fKSX.d.ts} +2 -64
- package/dist/index-9jJ2fKSX.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-DPcngtwt.d.ts → index-BiT6RtNH.d.ts} +11 -36
- package/dist/index-BiT6RtNH.d.ts.map +1 -0
- 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-BFRO6chs.d.ts → index-CiRwLv2R.d.ts} +5 -69
- package/dist/index-CiRwLv2R.d.ts.map +1 -0
- package/dist/{index-CyszSg4O.d.ts → index-ZuWx52WG.d.ts} +115 -347
- package/dist/index-ZuWx52WG.d.ts.map +1 -0
- package/dist/index.d.ts +211 -218
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +402 -1040
- package/dist/index.js.map +1 -1
- package/dist/{integrity-dLiDe2kD.js → integrity-DOd9Q86O.js} +7 -9
- package/dist/integrity-DOd9Q86O.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-CR4QikYp.js} +110 -110
- package/dist/journal-CR4QikYp.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-Gq7yp8lP.js → ledger-core-DrJhbms9.js} +5 -84
- package/dist/ledger-core-DrJhbms9.js.map +1 -0
- package/dist/{llm-client-CyBAoYiX.js → llm-client-BshCREn6.js} +6 -108
- package/dist/llm-client-BshCREn6.js.map +1 -0
- package/dist/{llm-judge-CG12SQJq.js → llm-judge-C8jMTNNG.js} +24 -32
- package/dist/llm-judge-C8jMTNNG.js.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-DHe-dwVJ.d.ts} +9 -18
- package/dist/matrix-DHe-dwVJ.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-zszyYlpA.js} +4 -4
- package/dist/{mint-QaD5cA0u.js.map → mint-zszyYlpA.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-BzsxidFD.js} +11 -11
- package/dist/pareto-BzsxidFD.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-DaY95yU6.d.ts} +7 -8
- package/dist/{promotion-gate-BawrdPYr.d.ts.map → promotion-gate-DaY95yU6.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-BbWidvUk.js} +3 -3
- package/dist/proposal-findings-BbWidvUk.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-C-w2EZ6p.js} +205 -363
- package/dist/render-C-w2EZ6p.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-0ABVIdGa.d.ts} +9 -9
- package/dist/{researcher-CEcfku-T.d.ts.map → researcher-0ABVIdGa.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-D6C50mfA.js} +88 -13
- package/dist/rollout-D6C50mfA.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-2g7trUwH.d.ts → schema-D6EVKzTB.d.ts} +4 -5
- package/dist/schema-D6EVKzTB.d.ts.map +1 -0
- package/dist/{schema-BuiujZ-g.js → schema-DxcKTzbi.js} +2 -2
- package/dist/schema-DxcKTzbi.js.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-DxqjBxA-.d.ts} +10 -27
- package/dist/search-kernel-DxqjBxA-.d.ts.map +1 -0
- package/dist/{search-ledger-CVUGLDZp.js → search-ledger-TUvB5gWH.js} +7 -7
- package/dist/{search-ledger-CVUGLDZp.js.map → search-ledger-TUvB5gWH.js.map} +1 -1
- package/dist/{search-ledger-file-DDQUgvCg.js → search-ledger-file-UKCO2r8a.js} +4 -4
- package/dist/search-ledger-file-UKCO2r8a.js.map +1 -0
- package/dist/{search-shipper-BOSD46qv.js → search-shipper-Cw2z3-td.js} +4 -4
- package/dist/search-shipper-Cw2z3-td.js.map +1 -0
- package/dist/{search-summary-BQCSWf1g.js → search-summary-DQIvJsSB.js} +5 -5
- package/dist/{search-summary-BQCSWf1g.js.map → search-summary-DQIvJsSB.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-DoVbqqtJ.js} +101 -101
- package/dist/server-DoVbqqtJ.js.map +1 -0
- package/dist/{single-run-lock-CV9Eyd_q.js → single-run-lock-U58yf8N6.js} +2 -2
- package/dist/{single-run-lock-CV9Eyd_q.js.map → single-run-lock-U58yf8N6.js.map} +1 -1
- package/dist/{skillopt-optimization-method-BiwA8nfX.js → skillopt-optimization-method-kyL94-ri.js} +17 -95
- package/dist/skillopt-optimization-method-kyL94-ri.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-42NlCNDe.js → statistical-heldout-Bksv92Th.js} +3 -3
- package/dist/statistical-heldout-Bksv92Th.js.map +1 -0
- package/dist/{statistical-heldout-CYpGaoDH.d.ts → statistical-heldout-C9AbgREN.d.ts} +8 -67
- package/dist/statistical-heldout-C9AbgREN.d.ts.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-DM7tlml1.d.ts} +10 -19
- package/dist/summary-report-DM7tlml1.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-Bp_Ac0p1.d.ts} +5 -5
- package/dist/{systemone-BomhHr2c.d.ts.map → systemone-Bp_Ac0p1.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-78g6E4vh.js} +5 -5
- package/dist/terminal-record-78g6E4vh.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 +3 -117
- package/dist/trajectory-replay/index.d.ts.map +1 -1
- package/dist/trajectory-replay/index.js +98 -56
- package/dist/trajectory-replay/index.js.map +1 -1
- package/dist/{tree-C1XYeXvy.js → tree-BGRglkKd.js} +13 -10
- package/dist/tree-BGRglkKd.js.map +1 -0
- 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-Cq8mSbq8.d.ts → types-D8GhJoHk.d.ts} +7 -9
- package/dist/{types-Cq8mSbq8.d.ts.map → types-D8GhJoHk.d.ts.map} +1 -1
- package/dist/{types-IXD2HJzu.js → types-DqFMNTgK.js} +2 -4
- package/dist/types-DqFMNTgK.js.map +1 -0
- package/dist/{types-Cbe2fWBa.d.ts → types-DtMbFw6U.d.ts} +3 -3
- package/dist/{types-Cbe2fWBa.d.ts.map → types-DtMbFw6U.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 +17 -17
- package/docs/design.md +1 -1
- package/docs/evaluation-integrity.md +1 -1
- package/docs/proofs/campaign-attempt-retention-20261001/README.md +2 -2
- package/docs/public-api.md +138 -529
- package/docs/rollout.md +1 -1
- package/docs/trace-repair-admission.md +1 -1
- package/docs/wire-protocol.md +1 -1
- package/package.json +1 -1
- 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-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/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/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,562 +0,0 @@
|
|
|
1
|
-
import { i as compareCodeUnits } from "./canonical-B2RqLofv.js";
|
|
2
|
-
import { t as assertValidAnalystUsageReceipt } from "./usage-receipt-Cx3xNeyB.js";
|
|
3
|
-
import { performance } from "node:perf_hooks";
|
|
4
|
-
import { linearSumAssignment } from "linear-sum-assignment";
|
|
5
|
-
//#region src/analyst/benchmark-scoring.ts
|
|
6
|
-
function scoreAnalystFindings(testCase, findings) {
|
|
7
|
-
assertValidAnalystScoringCase(testCase);
|
|
8
|
-
const matchedFindingByIssue = matchFindingsToIssues(testCase.expectedIssues, findings);
|
|
9
|
-
const matchedIssueIds = testCase.expectedIssues.filter((_, index) => matchedFindingByIssue.has(index)).map((issue) => issue.id);
|
|
10
|
-
const missedIssueIds = testCase.expectedIssues.filter((_, index) => !matchedFindingByIssue.has(index)).map((issue) => issue.id);
|
|
11
|
-
const supportedFindingIndexes = new Set(matchedFindingByIssue.values());
|
|
12
|
-
const unsupportedFindingIndexes = findings.map((_, index) => index).filter((index) => !supportedFindingIndexes.has(index));
|
|
13
|
-
const expectedIssueCount = testCase.expectedIssues.length;
|
|
14
|
-
const issueRecall = expectedIssueCount === 0 ? 1 : matchedIssueIds.length / expectedIssueCount;
|
|
15
|
-
const findingPrecision = findings.length === 0 ? expectedIssueCount === 0 ? 1 : 0 : supportedFindingIndexes.size / findings.length;
|
|
16
|
-
const f1 = harmonicMeanScore(findingPrecision, issueRecall);
|
|
17
|
-
const allEvidence = findings.flatMap((finding) => finding.evidence_refs);
|
|
18
|
-
const criticalIssues = testCase.expectedIssues.filter((issue) => (issue.criticalEvidence?.length ?? 0) > 0);
|
|
19
|
-
const criticalHits = testCase.expectedIssues.filter((issue) => {
|
|
20
|
-
if ((issue.criticalEvidence?.length ?? 0) === 0) return false;
|
|
21
|
-
return matchesEvidence(allEvidence, issue.criticalEvidence ?? [], "any");
|
|
22
|
-
}).length;
|
|
23
|
-
const findingsWithEvidence = findings.filter((finding) => finding.evidence_refs.length > 0).length;
|
|
24
|
-
const unlabeledEvidence = testCase.labeledEvidence ? allEvidence.filter((ref) => !testCase.labeledEvidence.some((expected) => evidenceMatches(ref, expected))) : [];
|
|
25
|
-
return {
|
|
26
|
-
expectedIssueCount,
|
|
27
|
-
matchedIssueIds,
|
|
28
|
-
missedIssueIds,
|
|
29
|
-
supportedFindingIndexes: [...supportedFindingIndexes].sort((a, b) => a - b),
|
|
30
|
-
unsupportedFindingIndexes,
|
|
31
|
-
unlabeledEvidence,
|
|
32
|
-
issueRecall,
|
|
33
|
-
findingPrecision,
|
|
34
|
-
f1,
|
|
35
|
-
criticalStepAccuracy: criticalIssues.length === 0 ? null : criticalHits / criticalIssues.length,
|
|
36
|
-
citationCoverage: findings.length === 0 ? null : findingsWithEvidence / findings.length,
|
|
37
|
-
citationExcerptCoverage: allEvidence.length === 0 ? null : allEvidence.filter((evidence) => Boolean(evidence.excerpt?.trim())).length / allEvidence.length,
|
|
38
|
-
citationLabelAgreement: testCase.labeledEvidence === void 0 ? null : allEvidence.length === 0 ? findings.length === 0 ? null : 0 : (allEvidence.length - unlabeledEvidence.length) / allEvidence.length,
|
|
39
|
-
predictionOnLabelEmptyCase: expectedIssueCount === 0 && findings.length > 0
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function assertValidAnalystScoringCase(testCase) {
|
|
43
|
-
if (!testCase.id.trim()) throw new TypeError("analyst benchmark case id must not be empty");
|
|
44
|
-
const ids = /* @__PURE__ */ new Set();
|
|
45
|
-
for (const issue of testCase.expectedIssues) {
|
|
46
|
-
if (!issue.id.trim()) throw new TypeError(`${testCase.id}: expected issue id must not be empty`);
|
|
47
|
-
if (ids.has(issue.id)) throw new TypeError(`${testCase.id}: duplicate expected issue id '${issue.id}'`);
|
|
48
|
-
ids.add(issue.id);
|
|
49
|
-
if (!issue.findingIds?.length && !issue.areas?.length && !issue.subjects?.length && !issue.evidence?.length) throw new TypeError(`${testCase.id}/${issue.id}: expected issue must identify a finding by id, area, subject, or evidence`);
|
|
50
|
-
}
|
|
51
|
-
for (const ref of testCase.labeledEvidence ?? []) if (!ref.uri.trim()) throw new TypeError(`${testCase.id}: labeled evidence URI must not be empty`);
|
|
52
|
-
}
|
|
53
|
-
function harmonicMeanScore(a, b) {
|
|
54
|
-
return a + b === 0 ? 0 : 2 * a * b / (a + b);
|
|
55
|
-
}
|
|
56
|
-
function matchFindingsToIssues(issues, findings) {
|
|
57
|
-
if (issues.length === 0) return /* @__PURE__ */ new Map();
|
|
58
|
-
const cardinalityWeight = issues.length + 1;
|
|
59
|
-
const scores = issues.map((issue) => [...findings.map((finding) => {
|
|
60
|
-
if (!findingMatchesIssue(finding, issue)) return -1;
|
|
61
|
-
const criticalHit = (issue.criticalEvidence?.length ?? 0) > 0 && matchesEvidence(finding.evidence_refs, issue.criticalEvidence ?? [], "any");
|
|
62
|
-
return cardinalityWeight + Number(criticalHit);
|
|
63
|
-
}), ...Array.from({ length: issues.length }, () => 0)]);
|
|
64
|
-
const assignment = linearSumAssignment(scores, { maximaze: true }).rowAssignments;
|
|
65
|
-
const matches = /* @__PURE__ */ new Map();
|
|
66
|
-
for (const [issueIndex, column] of assignment.entries()) {
|
|
67
|
-
if (column < 0 || column >= findings.length) continue;
|
|
68
|
-
if (!findingMatchesIssue(findings[column], issues[issueIndex])) continue;
|
|
69
|
-
matches.set(issueIndex, column);
|
|
70
|
-
}
|
|
71
|
-
return matches;
|
|
72
|
-
}
|
|
73
|
-
function findingMatchesIssue(finding, issue) {
|
|
74
|
-
if (issue.findingIds && !issue.findingIds.includes(finding.finding_id)) return false;
|
|
75
|
-
if (issue.areas && !issue.areas.includes(finding.area)) return false;
|
|
76
|
-
if (issue.subjects && (!finding.subject || !issue.subjects.includes(finding.subject))) return false;
|
|
77
|
-
if (issue.evidence && !matchesEvidence(finding.evidence_refs, issue.evidence, issue.evidenceMode ?? "any")) return false;
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
function matchesEvidence(actual, expected, mode) {
|
|
81
|
-
if (expected.length === 0) return true;
|
|
82
|
-
const match = (target) => actual.some((ref) => evidenceMatches(ref, target));
|
|
83
|
-
return mode === "all" ? expected.every(match) : expected.some(match);
|
|
84
|
-
}
|
|
85
|
-
function evidenceMatches(actual, expected) {
|
|
86
|
-
return actual.uri === expected.uri && (expected.kind === void 0 || actual.kind === expected.kind);
|
|
87
|
-
}
|
|
88
|
-
//#endregion
|
|
89
|
-
//#region src/analyst/benchmark-summary.ts
|
|
90
|
-
function summarizeAnalystBenchmarkRunner(runnerId, observations) {
|
|
91
|
-
const issueBearing = observations.filter((observation) => observation.labelState === "positive");
|
|
92
|
-
const completed = observations.filter((observation) => !observation.error);
|
|
93
|
-
const expectedIssues = issueBearing.reduce((sum, observation) => sum + observation.score.expectedIssueCount, 0);
|
|
94
|
-
const matchedIssues = issueBearing.reduce((sum, observation) => sum + observation.score.matchedIssueIds.length, 0);
|
|
95
|
-
const issueFindings = issueBearing.reduce((sum, observation) => sum + (observation.error ? 0 : observation.findings.length), 0);
|
|
96
|
-
const supportedFindings = issueBearing.reduce((sum, observation) => sum + observation.score.supportedFindingIndexes.length, 0);
|
|
97
|
-
const issueRecall = expectedIssues === 0 ? null : matchedIssues / expectedIssues;
|
|
98
|
-
const findingPrecision = expectedIssues === 0 ? null : issueFindings === 0 ? 0 : supportedFindings / issueFindings;
|
|
99
|
-
const macroIssueRecall = issueBearing.length === 0 ? null : mean(issueBearing.map((observation) => observation.score.issueRecall));
|
|
100
|
-
const macroFindingPrecision = issueBearing.length === 0 ? null : mean(issueBearing.map((observation) => observation.score.findingPrecision));
|
|
101
|
-
const macroF1 = issueBearing.length === 0 ? null : mean(issueBearing.map((observation) => observation.score.f1));
|
|
102
|
-
const critical = observations.map((observation) => observation.score.criticalStepAccuracy).filter((value) => value !== null);
|
|
103
|
-
const findingsWithEvidence = completed.reduce((sum, observation) => sum + observation.findings.filter((finding) => finding.evidence_refs.length > 0).length, 0);
|
|
104
|
-
const allFindings = completed.reduce((sum, observation) => sum + observation.findings.length, 0);
|
|
105
|
-
const allCitations = completed.flatMap((observation) => observation.findings.flatMap((finding) => finding.evidence_refs));
|
|
106
|
-
const citationObservations = completed.filter((observation) => observation.score.citationLabelAgreement !== null);
|
|
107
|
-
const citationCount = citationObservations.reduce((sum, observation) => sum + observation.findings.reduce((count, finding) => count + finding.evidence_refs.length, 0), 0);
|
|
108
|
-
const invalidCitationCount = citationObservations.reduce((sum, observation) => sum + observation.score.unlabeledEvidence.length, 0);
|
|
109
|
-
const trustedNegative = observations.filter((observation) => observation.labelState === "trusted-negative");
|
|
110
|
-
const completedTrustedNegative = trustedNegative.filter((observation) => !observation.error);
|
|
111
|
-
const unlabeled = observations.filter((observation) => observation.labelState === "unlabeled");
|
|
112
|
-
const completedUnlabeled = unlabeled.filter((observation) => !observation.error);
|
|
113
|
-
const resolvedCitations = completed.reduce((sum, observation) => sum + (observation.evidenceResolution?.resolved ?? 0), 0);
|
|
114
|
-
const unresolvedCitations = completed.reduce((sum, observation) => sum + (observation.evidenceResolution?.unresolvedEvidence.length ?? 0), 0);
|
|
115
|
-
const citationResolutionErrors = completed.reduce((sum, observation) => sum + (observation.evidenceResolution?.errors.length ?? 0), 0);
|
|
116
|
-
const resolutionAttempts = completed.filter((observation) => observation.findings.some((finding) => finding.evidence_refs.length > 0));
|
|
117
|
-
const citationResolutionUnknownRuns = resolutionAttempts.filter((observation) => !observation.evidenceResolution || observation.evidenceResolution.errors.length > 0).length;
|
|
118
|
-
const usages = observations.map((observation) => observation.usage);
|
|
119
|
-
const knownCostUsd = stableSum(usages.map((usage) => {
|
|
120
|
-
if (!usage) return 0;
|
|
121
|
-
return usage.cost.kind === "uncaptured" ? usage.knownCostUsd ?? 0 : usage.cost.usd;
|
|
122
|
-
}));
|
|
123
|
-
const predictionAgreement = repeatedObservationAgreement(observations, predictionSignature);
|
|
124
|
-
const matchedLabelAgreement = repeatedObservationAgreement(observations.filter((observation) => observation.labelState === "positive"), matchedLabelSignature);
|
|
125
|
-
return {
|
|
126
|
-
runnerId,
|
|
127
|
-
plannedRuns: observations.length,
|
|
128
|
-
completedRuns: observations.filter((observation) => !observation.error).length,
|
|
129
|
-
failedRuns: observations.filter((observation) => Boolean(observation.error)).length,
|
|
130
|
-
issueBearingRuns: issueBearing.length,
|
|
131
|
-
trustedNegativeRuns: trustedNegative.length,
|
|
132
|
-
unlabeledRuns: unlabeled.length,
|
|
133
|
-
issueRecall,
|
|
134
|
-
findingPrecision,
|
|
135
|
-
f1: findingPrecision === null || issueRecall === null ? null : harmonicMeanScore(findingPrecision, issueRecall),
|
|
136
|
-
macroIssueRecall,
|
|
137
|
-
macroFindingPrecision,
|
|
138
|
-
macroF1,
|
|
139
|
-
criticalStepAccuracy: critical.length === 0 ? null : mean(critical),
|
|
140
|
-
citationCoverage: allFindings === 0 ? null : findingsWithEvidence / allFindings,
|
|
141
|
-
citationExcerptCoverage: allCitations.length === 0 ? null : allCitations.filter((evidence) => Boolean(evidence.excerpt?.trim())).length / allCitations.length,
|
|
142
|
-
citationLabelAgreement: citationObservations.length === 0 ? null : citationCount === 0 ? 0 : (citationCount - invalidCitationCount) / citationCount,
|
|
143
|
-
citationResolution: resolutionAttempts.length === 0 || citationResolutionUnknownRuns > 0 || resolvedCitations + unresolvedCitations === 0 ? null : resolvedCitations / (resolvedCitations + unresolvedCitations),
|
|
144
|
-
citationResolutionUnknownRuns,
|
|
145
|
-
unresolvedCitations,
|
|
146
|
-
citationResolutionErrors,
|
|
147
|
-
trustedNegativeFalsePositiveRate: completedTrustedNegative.length === 0 ? null : completedTrustedNegative.filter((observation) => observation.score.predictionOnLabelEmptyCase).length / completedTrustedNegative.length,
|
|
148
|
-
trustedNegativeFailureRate: trustedNegative.length === 0 ? null : trustedNegative.filter((observation) => Boolean(observation.error)).length / trustedNegative.length,
|
|
149
|
-
unlabeledPredictionRate: completedUnlabeled.length === 0 ? null : completedUnlabeled.filter((observation) => observation.findings.length > 0).length / completedUnlabeled.length,
|
|
150
|
-
unlabeledFailureRate: unlabeled.length === 0 ? null : unlabeled.filter((observation) => Boolean(observation.error)).length / unlabeled.length,
|
|
151
|
-
predictionAgreement: predictionAgreement.value,
|
|
152
|
-
predictionAgreementCases: predictionAgreement.cases,
|
|
153
|
-
matchedLabelAgreement: matchedLabelAgreement.value,
|
|
154
|
-
matchedLabelAgreementCases: matchedLabelAgreement.cases,
|
|
155
|
-
latencyMs: latencyDistribution(observations.map((observation) => observation.latencyMs).filter((value) => value !== null)),
|
|
156
|
-
benchmarkClockLatencyRuns: observations.filter((observation) => observation.latencySource === "benchmark-clock").length,
|
|
157
|
-
runnerReportedLatencyRuns: observations.filter((observation) => observation.latencySource === "runner-reported").length,
|
|
158
|
-
latencyUnknownRuns: observations.filter((observation) => observation.latencySource === "uncaptured").length,
|
|
159
|
-
calls: usages.reduce((sum, usage) => sum + (usage?.calls ?? 0), 0),
|
|
160
|
-
callsUnknownRuns: usages.filter((usage) => !usage || usage.calls === null).length,
|
|
161
|
-
inputTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.input ?? 0), 0),
|
|
162
|
-
outputTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.output ?? 0), 0),
|
|
163
|
-
reasoningTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.reasoning ?? 0), 0),
|
|
164
|
-
cachedTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.cached ?? 0), 0),
|
|
165
|
-
cacheWriteTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.cacheWrite ?? 0), 0),
|
|
166
|
-
tokenUsageUnknownRuns: usages.filter((usage) => !usage?.tokens).length,
|
|
167
|
-
reasoningTokenUsageUnknownRuns: usages.filter((usage) => usage?.tokens?.reasoning === void 0).length,
|
|
168
|
-
cachedTokenUsageUnknownRuns: usages.filter((usage) => usage?.tokens?.cached === void 0).length,
|
|
169
|
-
cacheWriteTokenUsageUnknownRuns: usages.filter((usage) => usage?.tokens?.cacheWrite === void 0).length,
|
|
170
|
-
knownCostUsd,
|
|
171
|
-
costUnknownRuns: usages.filter((usage) => !usage || usage.cost.kind === "uncaptured").length
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
function mean(values) {
|
|
175
|
-
return values.length === 0 ? 0 : stableSum(values) / values.length;
|
|
176
|
-
}
|
|
177
|
-
function stableSum(values) {
|
|
178
|
-
const ordered = [...values].sort((left, right) => Math.abs(left) - Math.abs(right) || left - right);
|
|
179
|
-
let sum = 0;
|
|
180
|
-
let correction = 0;
|
|
181
|
-
for (const value of ordered) {
|
|
182
|
-
const next = sum + value;
|
|
183
|
-
correction += Math.abs(sum) >= Math.abs(value) ? sum - next + value : value - next + sum;
|
|
184
|
-
sum = next;
|
|
185
|
-
}
|
|
186
|
-
return sum + correction;
|
|
187
|
-
}
|
|
188
|
-
function latencyDistribution(values) {
|
|
189
|
-
if (values.length === 0) return null;
|
|
190
|
-
const sorted = [...values].sort((a, b) => a - b);
|
|
191
|
-
return {
|
|
192
|
-
min: sorted[0],
|
|
193
|
-
mean: mean(sorted),
|
|
194
|
-
p50: percentile(sorted, .5),
|
|
195
|
-
p95: percentile(sorted, .95),
|
|
196
|
-
max: sorted.at(-1)
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
function percentile(sorted, quantile) {
|
|
200
|
-
if (sorted.length === 0) return 0;
|
|
201
|
-
return sorted[Math.ceil(quantile * sorted.length) - 1] ?? sorted.at(-1) ?? 0;
|
|
202
|
-
}
|
|
203
|
-
function repeatedObservationAgreement(observations, signature) {
|
|
204
|
-
const byCase = /* @__PURE__ */ new Map();
|
|
205
|
-
for (const observation of observations) {
|
|
206
|
-
const rows = byCase.get(observation.caseId) ?? [];
|
|
207
|
-
rows.push(observation);
|
|
208
|
-
byCase.set(observation.caseId, rows);
|
|
209
|
-
}
|
|
210
|
-
const caseAgreements = [];
|
|
211
|
-
for (const rows of byCase.values()) {
|
|
212
|
-
const agreements = [];
|
|
213
|
-
for (let left = 0; left < rows.length; left++) for (let right = left + 1; right < rows.length; right++) agreements.push(jaccard(signature(rows[left]), signature(rows[right])));
|
|
214
|
-
if (agreements.length > 0) caseAgreements.push(mean(agreements));
|
|
215
|
-
}
|
|
216
|
-
return {
|
|
217
|
-
value: caseAgreements.length === 0 ? null : mean(caseAgreements),
|
|
218
|
-
cases: caseAgreements.length
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
function matchedLabelSignature(observation) {
|
|
222
|
-
if (observation.error) return [`error:${observation.error.class}`];
|
|
223
|
-
return observation.score.matchedIssueIds;
|
|
224
|
-
}
|
|
225
|
-
function predictionSignature(observation) {
|
|
226
|
-
if (observation.error) return [`error:${observation.error.class}`];
|
|
227
|
-
return observation.findings.map((finding) => JSON.stringify([finding.finding_id, finding.evidence_refs.map((evidence) => [
|
|
228
|
-
evidence.kind,
|
|
229
|
-
evidence.uri,
|
|
230
|
-
evidence.excerpt ?? null
|
|
231
|
-
]).sort((left, right) => compareCodeUnits(JSON.stringify(left), JSON.stringify(right)))])).sort();
|
|
232
|
-
}
|
|
233
|
-
function jaccard(left, right) {
|
|
234
|
-
const a = new Set(left);
|
|
235
|
-
const b = new Set(right);
|
|
236
|
-
const union = /* @__PURE__ */ new Set([...a, ...b]);
|
|
237
|
-
if (union.size === 0) return 1;
|
|
238
|
-
let intersection = 0;
|
|
239
|
-
for (const value of a) if (b.has(value)) intersection += 1;
|
|
240
|
-
return intersection / union.size;
|
|
241
|
-
}
|
|
242
|
-
//#endregion
|
|
243
|
-
//#region src/analyst/benchmark.ts
|
|
244
|
-
/**
|
|
245
|
-
* Resolve canonical `trace://<trace>/span/<span>` evidence against a trace store.
|
|
246
|
-
* Other evidence kinds and URI schemes require a caller-supplied resolver.
|
|
247
|
-
*/
|
|
248
|
-
function traceStoreEvidenceResolver(getStore) {
|
|
249
|
-
return async ({ caseInput, evidence, signal }) => {
|
|
250
|
-
if (evidence.kind !== "span") return false;
|
|
251
|
-
const location = parseTraceSpanUri(evidence.uri);
|
|
252
|
-
if (!location) return false;
|
|
253
|
-
const result = await getStore(caseInput).viewSpans({
|
|
254
|
-
trace_id: location.traceId,
|
|
255
|
-
span_ids: [location.spanId]
|
|
256
|
-
}, signal ? { signal } : void 0);
|
|
257
|
-
return result.trace_id === location.traceId && result.missing_span_ids.length === 0 && result.spans.some((span) => span.span_id === location.spanId);
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
async function runAnalystBenchmark(options) {
|
|
261
|
-
validateBenchmarkOptions(options);
|
|
262
|
-
const startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
263
|
-
const repetitions = options.repetitions ?? 1;
|
|
264
|
-
const runnerOrderSeed = options.runnerOrderSeed ?? 0;
|
|
265
|
-
const allJobs = benchmarkJobs(options.cases, options.runners, repetitions, runnerOrderSeed);
|
|
266
|
-
const maxConcurrency = Math.min(options.maxConcurrency ?? 1, allJobs.length);
|
|
267
|
-
const initialObservations = validateInitialObservations(options.initialObservations ?? [], allJobs);
|
|
268
|
-
const completed = new Set(initialObservations.map(observationKey));
|
|
269
|
-
const jobs = allJobs.filter((job) => !completed.has(jobKey(job)));
|
|
270
|
-
const observations = [...initialObservations];
|
|
271
|
-
let cursor = 0;
|
|
272
|
-
const worker = async () => {
|
|
273
|
-
while (cursor < jobs.length) {
|
|
274
|
-
options.signal?.throwIfAborted();
|
|
275
|
-
const job = jobs[cursor++];
|
|
276
|
-
const observation = await runBenchmarkJob(job, options.signal, options.resolveEvidence);
|
|
277
|
-
options.signal?.throwIfAborted();
|
|
278
|
-
await options.onObservation?.(observation);
|
|
279
|
-
options.signal?.throwIfAborted();
|
|
280
|
-
observations.push(observation);
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
await Promise.all(Array.from({ length: Math.min(maxConcurrency, jobs.length) }, worker));
|
|
284
|
-
options.signal?.throwIfAborted();
|
|
285
|
-
const runnerOrder = new Map(options.runners.map((runner, index) => [runner.id, index]));
|
|
286
|
-
const caseOrder = new Map(options.cases.map((testCase, index) => [testCase.id, index]));
|
|
287
|
-
observations.sort((a, b) => (runnerOrder.get(a.runnerId) ?? 0) - (runnerOrder.get(b.runnerId) ?? 0) || (caseOrder.get(a.caseId) ?? 0) - (caseOrder.get(b.caseId) ?? 0) || a.repetition - b.repetition);
|
|
288
|
-
return {
|
|
289
|
-
provenance: {
|
|
290
|
-
...options.benchmark,
|
|
291
|
-
startedAt,
|
|
292
|
-
endedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
293
|
-
caseCount: options.cases.length,
|
|
294
|
-
runnerIds: options.runners.map((runner) => runner.id),
|
|
295
|
-
repetitions,
|
|
296
|
-
maxConcurrency,
|
|
297
|
-
runnerOrderSeed
|
|
298
|
-
},
|
|
299
|
-
observations,
|
|
300
|
-
summaries: options.runners.map((runner) => summarizeAnalystBenchmarkRunner(runner.id, observations.filter((observation) => observation.runnerId === runner.id)))
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
function registryBenchmarkRunner(options) {
|
|
304
|
-
return {
|
|
305
|
-
id: options.id,
|
|
306
|
-
async analyze(input, context) {
|
|
307
|
-
const result = await options.registry.run(`${options.id}:${context.caseId}:${context.repetition}`, input, {
|
|
308
|
-
...options.runOptions,
|
|
309
|
-
signal: context.signal
|
|
310
|
-
});
|
|
311
|
-
return {
|
|
312
|
-
findings: result.findings,
|
|
313
|
-
usage: mergeRegistryUsage(result),
|
|
314
|
-
metadata: { analystRun: result },
|
|
315
|
-
...options.failOnAnalystFailure ? { error: registryRunFailure(result) } : {}
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
async function runBenchmarkJob(job, signal, resolveEvidence) {
|
|
321
|
-
const started = performance.now();
|
|
322
|
-
try {
|
|
323
|
-
const output = await job.runner.analyze(job.testCase.input, {
|
|
324
|
-
caseId: job.testCase.id,
|
|
325
|
-
repetition: job.repetition,
|
|
326
|
-
signal
|
|
327
|
-
});
|
|
328
|
-
if (output.usage) assertValidAnalystUsageReceipt(output.usage, "analyst benchmark usage");
|
|
329
|
-
const benchmarkLatencyMs = performance.now() - started;
|
|
330
|
-
const latency = resolveBenchmarkLatency(output.observedLatencyMs, benchmarkLatencyMs);
|
|
331
|
-
const scoredFindings = output.error ? [] : output.findings;
|
|
332
|
-
return {
|
|
333
|
-
runnerId: job.runner.id,
|
|
334
|
-
caseId: job.testCase.id,
|
|
335
|
-
clusterId: job.testCase.clusterId,
|
|
336
|
-
labelState: job.testCase.labelState,
|
|
337
|
-
repetition: job.repetition,
|
|
338
|
-
executionIndex: job.executionIndex,
|
|
339
|
-
latencyMs: latency.value,
|
|
340
|
-
latencySource: latency.source,
|
|
341
|
-
findings: output.findings,
|
|
342
|
-
score: scoreAnalystFindings(job.testCase, scoredFindings),
|
|
343
|
-
evidenceResolution: resolveEvidence ? await resolveFindingEvidence(job.testCase, output.findings, resolveEvidence, signal) : void 0,
|
|
344
|
-
caseTags: [...job.testCase.tags ?? []],
|
|
345
|
-
caseMetadata: job.testCase.metadata,
|
|
346
|
-
usage: output.usage,
|
|
347
|
-
runnerMetadata: output.metadata,
|
|
348
|
-
...output.error ? { error: output.error } : {}
|
|
349
|
-
};
|
|
350
|
-
} catch (error) {
|
|
351
|
-
if (signal?.aborted) throw error;
|
|
352
|
-
const findings = [];
|
|
353
|
-
return {
|
|
354
|
-
runnerId: job.runner.id,
|
|
355
|
-
caseId: job.testCase.id,
|
|
356
|
-
clusterId: job.testCase.clusterId,
|
|
357
|
-
labelState: job.testCase.labelState,
|
|
358
|
-
repetition: job.repetition,
|
|
359
|
-
executionIndex: job.executionIndex,
|
|
360
|
-
latencyMs: performance.now() - started,
|
|
361
|
-
latencySource: "benchmark-clock",
|
|
362
|
-
findings,
|
|
363
|
-
score: scoreAnalystFindings(job.testCase, findings),
|
|
364
|
-
caseTags: [...job.testCase.tags ?? []],
|
|
365
|
-
caseMetadata: job.testCase.metadata,
|
|
366
|
-
error: {
|
|
367
|
-
class: error instanceof Error ? error.constructor.name : "Error",
|
|
368
|
-
message: error instanceof Error ? error.message : String(error)
|
|
369
|
-
}
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
function resolveBenchmarkLatency(observedLatencyMs, fallbackMs) {
|
|
374
|
-
if (observedLatencyMs === void 0) return {
|
|
375
|
-
value: fallbackMs,
|
|
376
|
-
source: "benchmark-clock"
|
|
377
|
-
};
|
|
378
|
-
if (observedLatencyMs === null) return {
|
|
379
|
-
value: null,
|
|
380
|
-
source: "uncaptured"
|
|
381
|
-
};
|
|
382
|
-
if (!Number.isFinite(observedLatencyMs) || observedLatencyMs < 0) throw new RangeError("analyst benchmark observedLatencyMs must be finite and non-negative");
|
|
383
|
-
return {
|
|
384
|
-
value: observedLatencyMs,
|
|
385
|
-
source: "runner-reported"
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
function registryRunFailure(result) {
|
|
389
|
-
const failed = result.per_analyst.filter((summary) => summary.status === "failed");
|
|
390
|
-
if (failed.length === 0) return void 0;
|
|
391
|
-
return {
|
|
392
|
-
class: "AnalystRunFailure",
|
|
393
|
-
message: failed.map((summary) => `${summary.analyst_id}: ${summary.error?.class ?? "Error"}: ${summary.error?.message ?? "analyst failed"}`).join("; ")
|
|
394
|
-
};
|
|
395
|
-
}
|
|
396
|
-
function benchmarkJobs(cases, runners, repetitions, runnerOrderSeed) {
|
|
397
|
-
const seededRunners = [...runners].sort((left, right) => stableHash(`${runnerOrderSeed}\u0000${left.id}`) - stableHash(`${runnerOrderSeed}\u0000${right.id}`) || left.id.localeCompare(right.id));
|
|
398
|
-
let executionIndex = 0;
|
|
399
|
-
return cases.flatMap((testCase, caseIndex) => Array.from({ length: repetitions }, (_, repetition) => {
|
|
400
|
-
const rotation = (caseIndex * repetitions + repetition) % seededRunners.length;
|
|
401
|
-
return [...seededRunners.slice(rotation), ...seededRunners.slice(0, rotation)].map((runner) => ({
|
|
402
|
-
runner,
|
|
403
|
-
testCase,
|
|
404
|
-
repetition,
|
|
405
|
-
executionIndex: executionIndex++
|
|
406
|
-
}));
|
|
407
|
-
}).flat());
|
|
408
|
-
}
|
|
409
|
-
function validateInitialObservations(observations, jobs) {
|
|
410
|
-
const expected = new Map(jobs.map((job) => [jobKey(job), job]));
|
|
411
|
-
const seen = /* @__PURE__ */ new Set();
|
|
412
|
-
return observations.map((observation) => {
|
|
413
|
-
const key = observationKey(observation);
|
|
414
|
-
if (seen.has(key)) throw new TypeError(`duplicate initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`);
|
|
415
|
-
seen.add(key);
|
|
416
|
-
const job = expected.get(key);
|
|
417
|
-
if (!job) throw new TypeError(`initial analyst benchmark observation does not match a planned job: '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`);
|
|
418
|
-
if (observation.executionIndex !== job.executionIndex) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' has executionIndex ${observation.executionIndex}; expected ${job.executionIndex}`);
|
|
419
|
-
if (observation.clusterId !== job.testCase.clusterId || observation.labelState !== job.testCase.labelState) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' does not match the current case labels`);
|
|
420
|
-
if (JSON.stringify(observation.caseTags) !== JSON.stringify(job.testCase.tags ?? []) || JSON.stringify(observation.caseMetadata) !== JSON.stringify(job.testCase.metadata)) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' does not match the current case metadata`);
|
|
421
|
-
const expectedScore = scoreAnalystFindings(job.testCase, observation.error ? [] : observation.findings);
|
|
422
|
-
if (JSON.stringify(observation.score) !== JSON.stringify(expectedScore)) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' has stale or invalid scores`);
|
|
423
|
-
if (observation.usage) assertValidAnalystUsageReceipt(observation.usage, `initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' usage`);
|
|
424
|
-
if (![
|
|
425
|
-
"benchmark-clock",
|
|
426
|
-
"runner-reported",
|
|
427
|
-
"uncaptured"
|
|
428
|
-
].includes(observation.latencySource) || observation.latencySource === "uncaptured" && observation.latencyMs !== null || observation.latencySource !== "uncaptured" && (observation.latencyMs === null || !Number.isFinite(observation.latencyMs) || observation.latencyMs < 0)) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' has invalid latency`);
|
|
429
|
-
return { ...observation };
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
function jobKey(job) {
|
|
433
|
-
return `${job.runner.id}\u0000${job.testCase.id}\u0000${job.repetition}`;
|
|
434
|
-
}
|
|
435
|
-
function observationKey(observation) {
|
|
436
|
-
return `${observation.runnerId}\u0000${observation.caseId}\u0000${observation.repetition}`;
|
|
437
|
-
}
|
|
438
|
-
async function resolveFindingEvidence(testCase, findings, resolver, signal) {
|
|
439
|
-
const evidence = findings.flatMap((finding) => finding.evidence_refs);
|
|
440
|
-
const resolved = [];
|
|
441
|
-
const unresolvedEvidence = [];
|
|
442
|
-
const errors = [];
|
|
443
|
-
for (const ref of evidence) {
|
|
444
|
-
signal?.throwIfAborted();
|
|
445
|
-
try {
|
|
446
|
-
if (await resolver({
|
|
447
|
-
caseId: testCase.id,
|
|
448
|
-
caseInput: testCase.input,
|
|
449
|
-
evidence: ref,
|
|
450
|
-
signal
|
|
451
|
-
})) resolved.push(ref);
|
|
452
|
-
else unresolvedEvidence.push(ref);
|
|
453
|
-
} catch (error) {
|
|
454
|
-
if (signal?.aborted) throw error;
|
|
455
|
-
errors.push({
|
|
456
|
-
evidence: ref,
|
|
457
|
-
class: error instanceof Error ? error.constructor.name : "Error",
|
|
458
|
-
message: error instanceof Error ? error.message : String(error)
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
return {
|
|
463
|
-
checked: evidence.length,
|
|
464
|
-
resolved: resolved.length,
|
|
465
|
-
unresolvedEvidence,
|
|
466
|
-
errors,
|
|
467
|
-
validity: evidence.length === 0 || errors.length > 0 ? null : resolved.length / evidence.length
|
|
468
|
-
};
|
|
469
|
-
}
|
|
470
|
-
function parseTraceSpanUri(uri) {
|
|
471
|
-
const match = /^trace:\/\/([^/]+)\/span\/([^/]+)$/.exec(uri);
|
|
472
|
-
if (!match) return null;
|
|
473
|
-
try {
|
|
474
|
-
const traceId = decodeURIComponent(match[1]);
|
|
475
|
-
const spanId = decodeURIComponent(match[2]);
|
|
476
|
-
return traceId && spanId ? {
|
|
477
|
-
traceId,
|
|
478
|
-
spanId
|
|
479
|
-
} : null;
|
|
480
|
-
} catch {
|
|
481
|
-
return null;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
function validateBenchmarkOptions(options) {
|
|
485
|
-
if (options.cases.length === 0) throw new TypeError("runAnalystBenchmark requires cases");
|
|
486
|
-
if (options.runners.length === 0) throw new TypeError("runAnalystBenchmark requires runners");
|
|
487
|
-
const repetitions = options.repetitions ?? 1;
|
|
488
|
-
const maxConcurrency = options.maxConcurrency ?? 1;
|
|
489
|
-
if (!Number.isSafeInteger(repetitions) || repetitions < 1) throw new RangeError("runAnalystBenchmark repetitions must be a positive safe integer");
|
|
490
|
-
if (!Number.isSafeInteger(maxConcurrency) || maxConcurrency < 1) throw new RangeError("runAnalystBenchmark maxConcurrency must be a positive safe integer");
|
|
491
|
-
if (!Number.isSafeInteger(options.runnerOrderSeed ?? 0)) throw new RangeError("runAnalystBenchmark runnerOrderSeed must be a safe integer");
|
|
492
|
-
assertUniqueNonEmpty(options.cases.map((testCase) => testCase.id), "case");
|
|
493
|
-
assertUniqueNonEmpty(options.runners.map((runner) => runner.id), "runner");
|
|
494
|
-
for (const testCase of options.cases) validateBenchmarkCase(testCase);
|
|
495
|
-
}
|
|
496
|
-
function validateBenchmarkCase(testCase) {
|
|
497
|
-
assertValidAnalystScoringCase(testCase);
|
|
498
|
-
if (!testCase.clusterId.trim()) throw new TypeError(`${testCase.id}: analyst benchmark clusterId must not be empty`);
|
|
499
|
-
if (testCase.labelState !== "positive" && testCase.labelState !== "trusted-negative" && testCase.labelState !== "unlabeled") throw new TypeError(`${testCase.id}: analyst benchmark labelState is invalid`);
|
|
500
|
-
if (testCase.labelState === "positive" && testCase.expectedIssues.length === 0) throw new TypeError(`${testCase.id}: positive case requires at least one expected issue`);
|
|
501
|
-
if (testCase.labelState !== "positive" && testCase.expectedIssues.length > 0) throw new TypeError(`${testCase.id}: ${testCase.labelState} case cannot contain expected issues`);
|
|
502
|
-
}
|
|
503
|
-
function assertUniqueNonEmpty(values, label) {
|
|
504
|
-
const seen = /* @__PURE__ */ new Set();
|
|
505
|
-
for (const value of values) {
|
|
506
|
-
if (!value.trim()) throw new TypeError(`analyst benchmark ${label} id must not be empty`);
|
|
507
|
-
if (seen.has(value)) throw new TypeError(`duplicate analyst benchmark ${label} id '${value}'`);
|
|
508
|
-
seen.add(value);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
/** 32-bit FNV-1a over raw UTF-16 code units, left SIGNED so subtracting two
|
|
512
|
-
* results is a valid comparator.
|
|
513
|
-
*
|
|
514
|
-
* Frozen: it fixes the runner order a benchmark reports. Adding the `>>> 0`
|
|
515
|
-
* the other variants carry would change that order, which is why this one
|
|
516
|
-
* does not have it. */
|
|
517
|
-
function stableHash(value) {
|
|
518
|
-
let hash = 2166136261;
|
|
519
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
520
|
-
hash ^= value.charCodeAt(index);
|
|
521
|
-
hash = Math.imul(hash, 16777619);
|
|
522
|
-
}
|
|
523
|
-
return hash >>> 0;
|
|
524
|
-
}
|
|
525
|
-
function mergeRegistryUsage(result) {
|
|
526
|
-
const usages = result.per_analyst.map((summary) => summary.usage);
|
|
527
|
-
const calls = usages.every((usage) => usage.calls !== null) ? usages.reduce((sum, usage) => sum + (usage.calls ?? 0), 0) : null;
|
|
528
|
-
const tokens = usages.every((usage) => usage.tokens !== null) ? usages.reduce((sum, usage) => ({
|
|
529
|
-
input: sum.input + (usage.tokens?.input ?? 0),
|
|
530
|
-
output: sum.output + (usage.tokens?.output ?? 0),
|
|
531
|
-
reasoning: sum.reasoning + (usage.tokens?.reasoning ?? 0),
|
|
532
|
-
cached: sum.cached + (usage.tokens?.cached ?? 0),
|
|
533
|
-
cacheWrite: sum.cacheWrite + (usage.tokens?.cacheWrite ?? 0)
|
|
534
|
-
}), {
|
|
535
|
-
input: 0,
|
|
536
|
-
output: 0,
|
|
537
|
-
reasoning: 0,
|
|
538
|
-
cached: 0,
|
|
539
|
-
cacheWrite: 0
|
|
540
|
-
}) : null;
|
|
541
|
-
const knownCostUsd = usages.reduce((sum, usage) => sum + (usage.cost.kind === "uncaptured" ? usage.knownCostUsd ?? 0 : usage.cost.usd), 0);
|
|
542
|
-
const cost = usages.some((usage) => usage.cost.kind === "uncaptured") ? {
|
|
543
|
-
kind: "uncaptured",
|
|
544
|
-
usd: null
|
|
545
|
-
} : usages.some((usage) => usage.cost.kind === "estimated") ? {
|
|
546
|
-
kind: "estimated",
|
|
547
|
-
usd: knownCostUsd
|
|
548
|
-
} : {
|
|
549
|
-
kind: "observed",
|
|
550
|
-
usd: knownCostUsd
|
|
551
|
-
};
|
|
552
|
-
return {
|
|
553
|
-
calls,
|
|
554
|
-
tokens,
|
|
555
|
-
cost,
|
|
556
|
-
...cost.kind === "uncaptured" ? { knownCostUsd } : {}
|
|
557
|
-
};
|
|
558
|
-
}
|
|
559
|
-
//#endregion
|
|
560
|
-
export { scoreAnalystFindings as a, summarizeAnalystBenchmarkRunner as i, runAnalystBenchmark as n, traceStoreEvidenceResolver as r, registryBenchmarkRunner as t };
|
|
561
|
-
|
|
562
|
-
//# sourceMappingURL=benchmark-CXmVVHH2.js.map
|