@anvia/core 1.1.2 → 1.2.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/README.md +226 -0
- package/dist/agent/agent-stream.js +7 -0
- package/dist/agent/agent-stream.js.map +1 -0
- package/dist/agent/agent-tool.js +24 -0
- package/dist/agent/agent-tool.js.map +1 -0
- package/dist/agent/agent.js +89 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/errors.js +17 -0
- package/dist/agent/errors.js.map +1 -0
- package/dist/agent/ids.js +7 -0
- package/dist/agent/ids.js.map +1 -0
- package/dist/agent/index.d.ts +127 -9
- package/dist/agent/index.js +103 -21
- package/dist/agent/interactions/index.js +2 -2
- package/dist/agent/interactions.js +22 -0
- package/dist/agent/interactions.js.map +1 -0
- package/dist/agent/lifecycle.js +9 -0
- package/dist/agent/lifecycle.js.map +1 -0
- package/dist/agent/output-schema.js +10 -0
- package/dist/agent/output-schema.js.map +1 -0
- package/dist/agent/resolve-options.js +46 -0
- package/dist/agent/resolve-options.js.map +1 -0
- package/dist/agent/resolved-agent.js +92 -0
- package/dist/agent/resolved-agent.js.map +1 -0
- package/dist/agent/run-types.js +1 -0
- package/dist/agent/run-types.js.map +1 -0
- package/dist/agent/snapshot.js +17 -0
- package/dist/agent/snapshot.js.map +1 -0
- package/dist/agent/team/agent-team.js +98 -0
- package/dist/agent/team/agent-team.js.map +1 -0
- package/dist/agent/team/errors.js +9 -0
- package/dist/agent/team/errors.js.map +1 -0
- package/dist/agent/team/index.js +104 -0
- package/dist/agent/team/index.js.map +1 -0
- package/dist/agent/team/types.js +1 -0
- package/dist/agent/team/types.js.map +1 -0
- package/dist/agent/tool-catalog.js +37 -0
- package/dist/agent/tool-catalog.js.map +1 -0
- package/dist/agent/tool-state.js +11 -0
- package/dist/agent/tool-state.js.map +1 -0
- package/dist/agent/types.js +1 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/vector-context.js +10 -0
- package/dist/agent/vector-context.js.map +1 -0
- package/dist/{agent-DTmzs1Qr.d.ts → agent-C9VhENdj.d.ts} +2 -3
- package/dist/{chunk-I3Q7XSBB.js → chunk-23LRXKQX.js} +6 -4
- package/dist/{chunk-I3Q7XSBB.js.map → chunk-23LRXKQX.js.map} +1 -1
- package/dist/{chunk-YK4WAAS4.js → chunk-2NLINXRF.js} +1 -1
- package/dist/{chunk-SPD4XVR7.js → chunk-2XSMGVBG.js} +1 -1
- package/dist/chunk-3J2CSVPR.js +1 -0
- package/dist/chunk-3J2CSVPR.js.map +1 -0
- package/dist/chunk-3P3YVJ7V.js +1 -0
- package/dist/chunk-3P3YVJ7V.js.map +1 -0
- package/dist/chunk-3TAQXJBC.js +107 -0
- package/dist/chunk-3TAQXJBC.js.map +1 -0
- package/dist/chunk-47NTHIVB.js +76 -0
- package/dist/chunk-47NTHIVB.js.map +1 -0
- package/dist/chunk-4AW2633B.js +9 -0
- package/dist/chunk-4AW2633B.js.map +1 -0
- package/dist/{chunk-3XQGVDU5.js → chunk-4C7AXYOM.js} +1 -1
- package/dist/{chunk-IZNOP6JG.js → chunk-4FIVU53H.js} +1 -1
- package/dist/chunk-4ITAV7YA.js +1 -0
- package/dist/chunk-4ITAV7YA.js.map +1 -0
- package/dist/{chunk-7JLAIN6E.js → chunk-4ONUNWGC.js} +2 -2
- package/dist/chunk-4S4OECPW.js +158 -0
- package/dist/chunk-4S4OECPW.js.map +1 -0
- package/dist/chunk-4UUIGAIX.js +1 -0
- package/dist/chunk-4UUIGAIX.js.map +1 -0
- package/dist/chunk-53TPAXYR.js +1 -0
- package/dist/chunk-53TPAXYR.js.map +1 -0
- package/dist/chunk-54ZZJRP2.js +57 -0
- package/dist/chunk-54ZZJRP2.js.map +1 -0
- package/dist/chunk-5FCZ64HM.js +112 -0
- package/dist/chunk-5FCZ64HM.js.map +1 -0
- package/dist/chunk-5I2NVRHC.js +146 -0
- package/dist/chunk-5I2NVRHC.js.map +1 -0
- package/dist/chunk-5IURMWFN.js +53 -0
- package/dist/chunk-5IURMWFN.js.map +1 -0
- package/dist/chunk-5M6GTA3T.js +1 -0
- package/dist/chunk-5M6GTA3T.js.map +1 -0
- package/dist/chunk-5N5W7CX7.js +18 -0
- package/dist/chunk-5N5W7CX7.js.map +1 -0
- package/dist/chunk-5S7T2URX.js +1 -0
- package/dist/chunk-5S7T2URX.js.map +1 -0
- package/dist/chunk-5V533R7F.js +19 -0
- package/dist/chunk-5V533R7F.js.map +1 -0
- package/dist/chunk-5WLIHNNJ.js +56 -0
- package/dist/chunk-5WLIHNNJ.js.map +1 -0
- package/dist/chunk-6BTJC3ES.js +37 -0
- package/dist/chunk-6BTJC3ES.js.map +1 -0
- package/dist/chunk-6N4ENZO4.js +24 -0
- package/dist/chunk-6N4ENZO4.js.map +1 -0
- package/dist/{chunk-4UQALF5Y.js → chunk-6RQYWZI3.js} +2 -36
- package/dist/chunk-6RQYWZI3.js.map +1 -0
- package/dist/chunk-6TAWRKFK.js +86 -0
- package/dist/chunk-6TAWRKFK.js.map +1 -0
- package/dist/chunk-72LBHKYP.js +236 -0
- package/dist/chunk-72LBHKYP.js.map +1 -0
- package/dist/chunk-7F53DOML.js +53 -0
- package/dist/chunk-7F53DOML.js.map +1 -0
- package/dist/chunk-7LBPRXZP.js +1 -0
- package/dist/chunk-7LBPRXZP.js.map +1 -0
- package/dist/chunk-A7BXVZXZ.js +25 -0
- package/dist/chunk-A7BXVZXZ.js.map +1 -0
- package/dist/chunk-AOG6KSV4.js +107 -0
- package/dist/chunk-AOG6KSV4.js.map +1 -0
- package/dist/chunk-B47EXUHL.js +67 -0
- package/dist/chunk-B47EXUHL.js.map +1 -0
- package/dist/chunk-B5JQDR33.js +14 -0
- package/dist/chunk-B5JQDR33.js.map +1 -0
- package/dist/chunk-BDDC72GF.js +189 -0
- package/dist/chunk-BDDC72GF.js.map +1 -0
- package/dist/chunk-BDKFFFVX.js +342 -0
- package/dist/chunk-BDKFFFVX.js.map +1 -0
- package/dist/{chunk-QGX73TSQ.js → chunk-BONQTXRQ.js} +3 -12
- package/dist/chunk-BONQTXRQ.js.map +1 -0
- package/dist/chunk-BUPC72Y2.js +1007 -0
- package/dist/chunk-BUPC72Y2.js.map +1 -0
- package/dist/chunk-CKKNO4XB.js +70 -0
- package/dist/chunk-CKKNO4XB.js.map +1 -0
- package/dist/chunk-CX7ZVTO5.js +22 -0
- package/dist/chunk-CX7ZVTO5.js.map +1 -0
- package/dist/chunk-DU4WA6LQ.js +1 -0
- package/dist/chunk-DU4WA6LQ.js.map +1 -0
- package/dist/chunk-EJR6VVB3.js +63 -0
- package/dist/chunk-EJR6VVB3.js.map +1 -0
- package/dist/chunk-EKZRAWBP.js +110 -0
- package/dist/chunk-EKZRAWBP.js.map +1 -0
- package/dist/chunk-ENZ2XX27.js +26 -0
- package/dist/chunk-ENZ2XX27.js.map +1 -0
- package/dist/chunk-EOAJBBII.js +1 -0
- package/dist/chunk-EOAJBBII.js.map +1 -0
- package/dist/chunk-ERN7P6Q4.js +1 -0
- package/dist/chunk-ERN7P6Q4.js.map +1 -0
- package/dist/chunk-ESOFEAYK.js +57 -0
- package/dist/chunk-ESOFEAYK.js.map +1 -0
- package/dist/chunk-ETYB5JO6.js +175 -0
- package/dist/chunk-ETYB5JO6.js.map +1 -0
- package/dist/chunk-EZR5AV3J.js +74 -0
- package/dist/chunk-EZR5AV3J.js.map +1 -0
- package/dist/chunk-F2OKLHGB.js +9 -0
- package/dist/chunk-F2OKLHGB.js.map +1 -0
- package/dist/chunk-F3E2RLC7.js +342 -0
- package/dist/chunk-F3E2RLC7.js.map +1 -0
- package/dist/chunk-FAPIZJS2.js +54 -0
- package/dist/chunk-FAPIZJS2.js.map +1 -0
- package/dist/{chunk-2QZJTG2E.js → chunk-G336L2IE.js} +11 -71
- package/dist/chunk-G336L2IE.js.map +1 -0
- package/dist/chunk-GDJNOZ47.js +1 -0
- package/dist/chunk-GDJNOZ47.js.map +1 -0
- package/dist/chunk-GDY2Z2SZ.js +83 -0
- package/dist/chunk-GDY2Z2SZ.js.map +1 -0
- package/dist/chunk-GLMYZ6OA.js +20 -0
- package/dist/chunk-GLMYZ6OA.js.map +1 -0
- package/dist/{chunk-XEVOC433.js → chunk-GPVXCY5I.js} +2 -73
- package/dist/chunk-GPVXCY5I.js.map +1 -0
- package/dist/{chunk-KSKST3KP.js → chunk-H3H74RWJ.js} +1 -1
- package/dist/chunk-HAAGSIZH.js +89 -0
- package/dist/chunk-HAAGSIZH.js.map +1 -0
- package/dist/{chunk-K5L7R7XM.js → chunk-HHMLE3TZ.js} +6 -54
- package/dist/chunk-HHMLE3TZ.js.map +1 -0
- package/dist/{chunk-JLJMVRRE.js → chunk-HP34GRQX.js} +10 -83
- package/dist/chunk-HP34GRQX.js.map +1 -0
- package/dist/chunk-HTI343NP.js +1 -0
- package/dist/chunk-HTI343NP.js.map +1 -0
- package/dist/{chunk-T2C3CGDQ.js → chunk-HTI7DZJM.js} +6 -4
- package/dist/{chunk-T2C3CGDQ.js.map → chunk-HTI7DZJM.js.map} +1 -1
- package/dist/chunk-IDNL6IH4.js +294 -0
- package/dist/chunk-IDNL6IH4.js.map +1 -0
- package/dist/chunk-IV6YQTY2.js +47 -0
- package/dist/chunk-IV6YQTY2.js.map +1 -0
- package/dist/chunk-J4SINPUA.js +939 -0
- package/dist/chunk-J4SINPUA.js.map +1 -0
- package/dist/chunk-J6S6MT7O.js +32 -0
- package/dist/chunk-J6S6MT7O.js.map +1 -0
- package/dist/chunk-JBQNCUXA.js +34 -0
- package/dist/chunk-JBQNCUXA.js.map +1 -0
- package/dist/chunk-JMJFK3A4.js +1 -0
- package/dist/chunk-JMJFK3A4.js.map +1 -0
- package/dist/chunk-JMMZICU7.js +74 -0
- package/dist/chunk-JMMZICU7.js.map +1 -0
- package/dist/chunk-K4IBS7VB.js +55 -0
- package/dist/chunk-K4IBS7VB.js.map +1 -0
- package/dist/chunk-KBBQSP4M.js +16 -0
- package/dist/chunk-KBBQSP4M.js.map +1 -0
- package/dist/chunk-KFAVEL5F.js +68 -0
- package/dist/chunk-KFAVEL5F.js.map +1 -0
- package/dist/chunk-KITX3HDN.js +17 -0
- package/dist/chunk-KITX3HDN.js.map +1 -0
- package/dist/chunk-KO5NMTAM.js +1 -0
- package/dist/chunk-KO5NMTAM.js.map +1 -0
- package/dist/chunk-KY4VXIN2.js +118 -0
- package/dist/chunk-KY4VXIN2.js.map +1 -0
- package/dist/chunk-KZGSXJKU.js +29 -0
- package/dist/chunk-KZGSXJKU.js.map +1 -0
- package/dist/chunk-LAIATEUB.js +24 -0
- package/dist/chunk-LAIATEUB.js.map +1 -0
- package/dist/{chunk-OJBFDBLG.js → chunk-LBYJPMHC.js} +2 -2
- package/dist/chunk-LKIABZNR.js +49 -0
- package/dist/chunk-LKIABZNR.js.map +1 -0
- package/dist/chunk-LQJ4KHMY.js +23 -0
- package/dist/chunk-LQJ4KHMY.js.map +1 -0
- package/dist/chunk-MEN4AFDZ.js +1 -0
- package/dist/chunk-MEN4AFDZ.js.map +1 -0
- package/dist/chunk-MHOJJYDK.js +93 -0
- package/dist/chunk-MHOJJYDK.js.map +1 -0
- package/dist/chunk-MJCMKZFP.js +30 -0
- package/dist/chunk-MJCMKZFP.js.map +1 -0
- package/dist/chunk-MNYMLWWA.js +168 -0
- package/dist/chunk-MNYMLWWA.js.map +1 -0
- package/dist/chunk-MT3BLVYN.js +31 -0
- package/dist/chunk-MT3BLVYN.js.map +1 -0
- package/dist/chunk-NF6WBPFG.js +37 -0
- package/dist/chunk-NF6WBPFG.js.map +1 -0
- package/dist/chunk-NNEKBZSM.js +66 -0
- package/dist/chunk-NNEKBZSM.js.map +1 -0
- package/dist/chunk-NPJ2T3L5.js +19 -0
- package/dist/chunk-NPJ2T3L5.js.map +1 -0
- package/dist/chunk-NVALGVQG.js +150 -0
- package/dist/chunk-NVALGVQG.js.map +1 -0
- package/dist/chunk-O6DTOCBM.js +355 -0
- package/dist/chunk-O6DTOCBM.js.map +1 -0
- package/dist/chunk-OJF67RNM.js +1 -0
- package/dist/chunk-OJF67RNM.js.map +1 -0
- package/dist/chunk-PHLGGRHC.js +89 -0
- package/dist/chunk-PHLGGRHC.js.map +1 -0
- package/dist/chunk-PIMD4DYG.js +104 -0
- package/dist/chunk-PIMD4DYG.js.map +1 -0
- package/dist/chunk-PJNE75WC.js +1 -0
- package/dist/chunk-PJNE75WC.js.map +1 -0
- package/dist/{chunk-J6LVLV6P.js → chunk-PLDJCCVL.js} +1 -1
- package/dist/{chunk-3RWESPUG.js → chunk-POXHJF3H.js} +6 -51
- package/dist/chunk-POXHJF3H.js.map +1 -0
- package/dist/chunk-PPJ7SYQL.js +81 -0
- package/dist/chunk-PPJ7SYQL.js.map +1 -0
- package/dist/chunk-QHGYCYV6.js +91 -0
- package/dist/chunk-QHGYCYV6.js.map +1 -0
- package/dist/chunk-QUS6S2NB.js +663 -0
- package/dist/chunk-QUS6S2NB.js.map +1 -0
- package/dist/chunk-R6722CIU.js +28 -0
- package/dist/chunk-R6722CIU.js.map +1 -0
- package/dist/chunk-RA4YVN43.js +1 -0
- package/dist/chunk-RA4YVN43.js.map +1 -0
- package/dist/chunk-RT5LUEO3.js +2339 -0
- package/dist/chunk-RT5LUEO3.js.map +1 -0
- package/dist/chunk-SC4SUIEY.js +1 -0
- package/dist/chunk-SC4SUIEY.js.map +1 -0
- package/dist/chunk-SIYZDPVH.js +613 -0
- package/dist/chunk-SIYZDPVH.js.map +1 -0
- package/dist/chunk-SQAAVYJG.js +12 -0
- package/dist/chunk-SQAAVYJG.js.map +1 -0
- package/dist/chunk-SXE4J43E.js +59 -0
- package/dist/chunk-SXE4J43E.js.map +1 -0
- package/dist/{chunk-EFLT7XZD.js → chunk-SYULMZGL.js} +6 -4
- package/dist/{chunk-EFLT7XZD.js.map → chunk-SYULMZGL.js.map} +1 -1
- package/dist/chunk-T4IAJJUU.js +48 -0
- package/dist/chunk-T4IAJJUU.js.map +1 -0
- package/dist/chunk-T4KS577P.js +58 -0
- package/dist/chunk-T4KS577P.js.map +1 -0
- package/dist/chunk-TFIOU6UR.js +78 -0
- package/dist/chunk-TFIOU6UR.js.map +1 -0
- package/dist/chunk-TIZGADU4.js +375 -0
- package/dist/chunk-TIZGADU4.js.map +1 -0
- package/dist/chunk-TP3MCUXS.js +1 -0
- package/dist/chunk-TP3MCUXS.js.map +1 -0
- package/dist/{chunk-JTJU56ZV.js → chunk-UOGM62JL.js} +11 -7
- package/dist/{chunk-JTJU56ZV.js.map → chunk-UOGM62JL.js.map} +1 -1
- package/dist/chunk-USRKPEQN.js +55 -0
- package/dist/chunk-USRKPEQN.js.map +1 -0
- package/dist/chunk-UTAB3XQI.js +667 -0
- package/dist/chunk-UTAB3XQI.js.map +1 -0
- package/dist/chunk-V3FFZWF3.js +182 -0
- package/dist/chunk-V3FFZWF3.js.map +1 -0
- package/dist/chunk-V4OZ7ISA.js +9 -0
- package/dist/chunk-V4OZ7ISA.js.map +1 -0
- package/dist/chunk-VZ5ZZBNX.js +139 -0
- package/dist/chunk-VZ5ZZBNX.js.map +1 -0
- package/dist/{chunk-AHLKV6KP.js → chunk-WN6AVBO4.js} +1 -1
- package/dist/chunk-WXR5CWSC.js +1 -0
- package/dist/chunk-WXR5CWSC.js.map +1 -0
- package/dist/chunk-X6WS3XWL.js +36 -0
- package/dist/chunk-X6WS3XWL.js.map +1 -0
- package/dist/{chunk-Q5BCNYED.js → chunk-XJRNBTIV.js} +7 -4
- package/dist/chunk-XQV3XNVT.js +225 -0
- package/dist/chunk-XQV3XNVT.js.map +1 -0
- package/dist/chunk-XV3DH5GC.js +58 -0
- package/dist/chunk-XV3DH5GC.js.map +1 -0
- package/dist/chunk-Y7JTHNCU.js +318 -0
- package/dist/chunk-Y7JTHNCU.js.map +1 -0
- package/dist/chunk-YWRXOPHC.js +43 -0
- package/dist/chunk-YWRXOPHC.js.map +1 -0
- package/dist/chunk-YZVFIW5D.js +27 -0
- package/dist/chunk-YZVFIW5D.js.map +1 -0
- package/dist/chunk-ZHC5CD6J.js +33 -0
- package/dist/chunk-ZHC5CD6J.js.map +1 -0
- package/dist/chunk-ZPJFXRQZ.js +23 -0
- package/dist/chunk-ZPJFXRQZ.js.map +1 -0
- package/dist/chunk-ZPXOBQDS.js +57 -0
- package/dist/chunk-ZPXOBQDS.js.map +1 -0
- package/dist/chunk-ZUFS6R7L.js +155 -0
- package/dist/chunk-ZUFS6R7L.js.map +1 -0
- package/dist/chunk-ZXLCTQUX.js +62 -0
- package/dist/chunk-ZXLCTQUX.js.map +1 -0
- package/dist/chunk-ZYXMWEL4.js +59 -0
- package/dist/chunk-ZYXMWEL4.js.map +1 -0
- package/dist/completion/controls.js +11 -0
- package/dist/completion/controls.js.map +1 -0
- package/dist/completion/documents.js +9 -0
- package/dist/completion/documents.js.map +1 -0
- package/dist/completion/generate-completion.js +23 -0
- package/dist/completion/generate-completion.js.map +1 -0
- package/dist/completion/index.js +23 -12
- package/dist/completion/json.js +7 -0
- package/dist/completion/json.js.map +1 -0
- package/dist/completion/message-schema.js +18 -0
- package/dist/completion/message-schema.js.map +1 -0
- package/dist/completion/provider-output-error.js +12 -0
- package/dist/completion/provider-output-error.js.map +1 -0
- package/dist/completion/stream-accumulator.js +10 -0
- package/dist/completion/stream-accumulator.js.map +1 -0
- package/dist/completion/types.js +28 -0
- package/dist/completion/types.js.map +1 -0
- package/dist/documents/chunk-text.js +7 -0
- package/dist/documents/chunk-text.js.map +1 -0
- package/dist/documents/index.js +5 -2
- package/dist/documents/text-document.js +8 -0
- package/dist/documents/text-document.js.map +1 -0
- package/dist/embeddings/distance.js +17 -0
- package/dist/embeddings/distance.js.map +1 -0
- package/dist/embeddings/embed.js +18 -0
- package/dist/embeddings/embed.js.map +1 -0
- package/dist/embeddings/index.js +11 -6
- package/dist/embeddings/types.js +2 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/evals/advanced-metrics.js +46 -0
- package/dist/evals/advanced-metrics.js.map +1 -0
- package/dist/evals/agent-target.js +10 -0
- package/dist/evals/agent-target.js.map +1 -0
- package/dist/evals/cli.js +40 -0
- package/dist/evals/cli.js.map +1 -0
- package/dist/evals/execution.js +15 -0
- package/dist/evals/execution.js.map +1 -0
- package/dist/evals/format.js +13 -0
- package/dist/evals/format.js.map +1 -0
- package/dist/evals/index.d.ts +4 -4
- package/dist/evals/index.js +87 -2660
- package/dist/evals/index.js.map +1 -1
- package/dist/evals/judge.js +27 -0
- package/dist/evals/judge.js.map +1 -0
- package/dist/evals/metric.js +7 -0
- package/dist/evals/metric.js.map +1 -0
- package/dist/evals/metrics.js +53 -0
- package/dist/evals/metrics.js.map +1 -0
- package/dist/evals/outcome.js +7 -0
- package/dist/evals/outcome.js.map +1 -0
- package/dist/evals/reporting.js +11 -0
- package/dist/evals/reporting.js.map +1 -0
- package/dist/evals/runner.js +29 -0
- package/dist/evals/runner.js.map +1 -0
- package/dist/evals/selectors.js +18 -0
- package/dist/evals/selectors.js.map +1 -0
- package/dist/evals/suite.js +11 -0
- package/dist/evals/suite.js.map +1 -0
- package/dist/evals/types.js +1 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/extractor/extractor.js +23 -0
- package/dist/extractor/extractor.js.map +1 -0
- package/dist/extractor/index.js +16 -7
- package/dist/guardrails/actions.js +13 -0
- package/dist/guardrails/actions.js.map +1 -0
- package/dist/guardrails/index.d.ts +3 -4
- package/dist/guardrails/index.js +15 -7
- package/dist/guardrails/message.js +9 -0
- package/dist/guardrails/message.js.map +1 -0
- package/dist/guardrails/policy.js +17 -0
- package/dist/guardrails/policy.js.map +1 -0
- package/dist/guardrails/runtime.js +11 -0
- package/dist/guardrails/runtime.js.map +1 -0
- package/dist/guardrails/text.js +9 -0
- package/dist/guardrails/text.js.map +1 -0
- package/dist/guardrails/types.js +1 -0
- package/dist/guardrails/types.js.map +1 -0
- package/dist/hooks/control.js +17 -0
- package/dist/hooks/control.js.map +1 -0
- package/dist/hooks/index.js +19 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/image-generation/generate-image.js +11 -0
- package/dist/image-generation/generate-image.js.map +1 -0
- package/dist/image-generation/index.js +7 -4
- package/dist/image-generation/types.js +2 -0
- package/dist/image-generation/types.js.map +1 -0
- package/dist/index.d.ts +5 -7
- package/dist/index.js +163 -57
- package/dist/internal/abort.js +13 -0
- package/dist/internal/abort.js.map +1 -0
- package/dist/internal/agent-runtime/agent-run.js +81 -0
- package/dist/internal/agent-runtime/agent-run.js.map +1 -0
- package/dist/internal/agent-runtime/approval-request.js +1 -0
- package/dist/internal/agent-runtime/approval-request.js.map +1 -0
- package/dist/internal/agent-runtime/approval-requirement.js +9 -0
- package/dist/internal/agent-runtime/approval-requirement.js.map +1 -0
- package/dist/internal/agent-runtime/continuation-state.js +26 -0
- package/dist/internal/agent-runtime/continuation-state.js.map +1 -0
- package/dist/internal/agent-runtime/interaction-suspension.js +25 -0
- package/dist/internal/agent-runtime/interaction-suspension.js.map +1 -0
- package/dist/internal/agent-runtime/memory-scope.js +8 -0
- package/dist/internal/agent-runtime/memory-scope.js.map +1 -0
- package/dist/internal/agent-runtime/memory.js +24 -0
- package/dist/internal/agent-runtime/memory.js.map +1 -0
- package/dist/internal/agent-runtime/prepared-tool-call.js +19 -0
- package/dist/internal/agent-runtime/prepared-tool-call.js.map +1 -0
- package/dist/internal/agent-runtime/retrieval.js +35 -0
- package/dist/internal/agent-runtime/retrieval.js.map +1 -0
- package/dist/internal/agent-runtime/run-options.js +9 -0
- package/dist/internal/agent-runtime/run-options.js.map +1 -0
- package/dist/internal/agent-runtime/run-validation.js +9 -0
- package/dist/internal/agent-runtime/run-validation.js.map +1 -0
- package/dist/internal/agent-runtime/stream-events.js +11 -0
- package/dist/internal/agent-runtime/stream-events.js.map +1 -0
- package/dist/internal/agent-runtime/structured-output.js +13 -0
- package/dist/internal/agent-runtime/structured-output.js.map +1 -0
- package/dist/internal/agent-runtime/tool-execution.js +55 -0
- package/dist/internal/agent-runtime/tool-execution.js.map +1 -0
- package/dist/internal/agent.d.ts +5 -5
- package/dist/internal/agent.js +93 -57
- package/dist/internal/agent.js.map +1 -1
- package/dist/internal/async-queue.js +7 -0
- package/dist/internal/async-queue.js.map +1 -0
- package/dist/internal/completion-request.js +11 -0
- package/dist/internal/completion-request.js.map +1 -0
- package/dist/internal/concurrency.js +7 -0
- package/dist/internal/concurrency.js.map +1 -0
- package/dist/internal/json-object.js +8 -0
- package/dist/internal/json-object.js.map +1 -0
- package/dist/internal/rag-text.js +7 -0
- package/dist/internal/rag-text.js.map +1 -0
- package/dist/internal/record.js +7 -0
- package/dist/internal/record.js.map +1 -0
- package/dist/internal/team-runtime/coordination.js +12 -0
- package/dist/internal/team-runtime/coordination.js.map +1 -0
- package/dist/internal/team-runtime/member.js +26 -0
- package/dist/internal/team-runtime/member.js.map +1 -0
- package/dist/internal/team-runtime/policy.js +7 -0
- package/dist/internal/team-runtime/policy.js.map +1 -0
- package/dist/internal/team-runtime/run.js +95 -0
- package/dist/internal/team-runtime/run.js.map +1 -0
- package/dist/internal/team-runtime/stream.js +9 -0
- package/dist/internal/team-runtime/stream.js.map +1 -0
- package/dist/internal/team-runtime/tools.js +17 -0
- package/dist/internal/team-runtime/tools.js.map +1 -0
- package/dist/internal/type-utils.js +1 -0
- package/dist/internal/type-utils.js.map +1 -0
- package/dist/internal/vector-search-options.js +9 -0
- package/dist/internal/vector-search-options.js.map +1 -0
- package/dist/mcp/index.js +3 -1
- package/dist/mcp/tool.js +7 -0
- package/dist/mcp/tool.js.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/assert.js +11 -0
- package/dist/memory/assert.js.map +1 -0
- package/dist/memory/compaction.js +26 -0
- package/dist/memory/compaction.js.map +1 -0
- package/dist/memory/errors.js +9 -0
- package/dist/memory/errors.js.map +1 -0
- package/dist/memory/index.js +23 -10
- package/dist/memory/options.js +10 -0
- package/dist/memory/options.js.map +1 -0
- package/dist/memory/scope-key.js +7 -0
- package/dist/memory/scope-key.js.map +1 -0
- package/dist/memory/types.js +2 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/{types-CRda8x7p.d.ts → middleware-CWjnMbiH.d.ts} +64 -5
- package/dist/model-call-options.js +1 -0
- package/dist/model-call-options.js.map +1 -0
- package/dist/model-listing/errors.js +7 -0
- package/dist/model-listing/errors.js.map +1 -0
- package/dist/model-listing/index.js +4 -13
- package/dist/model-listing/index.js.map +1 -1
- package/dist/model-listing/types.js +2 -0
- package/dist/model-listing/types.js.map +1 -0
- package/dist/observability/group.js +30 -0
- package/dist/observability/group.js.map +1 -0
- package/dist/observability/index.d.ts +4 -6
- package/dist/observability/index.js +16 -8
- package/dist/observability/snapshot.js +7 -0
- package/dist/observability/snapshot.js.map +1 -0
- package/dist/observability/types.js +1 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/pipeline/errors.js +9 -0
- package/dist/pipeline/errors.js.map +1 -0
- package/dist/pipeline/graph.js +21 -0
- package/dist/pipeline/graph.js.map +1 -0
- package/dist/pipeline/index.d.ts +4 -6
- package/dist/pipeline/index.js +27 -805
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/observability.js +15 -0
- package/dist/pipeline/observability.js.map +1 -0
- package/dist/pipeline/pipeline.js +30 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/pipeline/runtime.js +17 -0
- package/dist/pipeline/runtime.js.map +1 -0
- package/dist/pipeline/types.js +1 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/retry.js +20 -0
- package/dist/retry.js.map +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/zod-schema.js +7 -0
- package/dist/schema/zod-schema.js.map +1 -0
- package/dist/skills/index.js +41 -12
- package/dist/skills/instructions.js +7 -0
- package/dist/skills/instructions.js.map +1 -0
- package/dist/skills/load.js +39 -0
- package/dist/skills/load.js.map +1 -0
- package/dist/skills/local.js +9 -0
- package/dist/skills/local.js.map +1 -0
- package/dist/skills/tools.js +37 -0
- package/dist/skills/tools.js.map +1 -0
- package/dist/skills/types.js +7 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/speech-generation/generate-speech.js +11 -0
- package/dist/speech-generation/generate-speech.js.map +1 -0
- package/dist/speech-generation/index.js +7 -4
- package/dist/speech-generation/types.js +2 -0
- package/dist/speech-generation/types.js.map +1 -0
- package/dist/streaming/index.js +4 -37
- package/dist/streaming/index.js.map +1 -1
- package/dist/streaming/readable-stream.js +8 -0
- package/dist/streaming/readable-stream.js.map +1 -0
- package/dist/{text-CmjXxakS.d.ts → text-GbW4WYMg.d.ts} +1 -1
- package/dist/tool/create-tool.js +14 -0
- package/dist/tool/create-tool.js.map +1 -0
- package/dist/tool/dynamic-tools.js +35 -0
- package/dist/tool/dynamic-tools.js.map +1 -0
- package/dist/tool/errors.js +11 -0
- package/dist/tool/errors.js.map +1 -0
- package/dist/tool/index.d.ts +3 -2
- package/dist/tool/index.js +41 -15
- package/dist/tool/middleware.js +7 -0
- package/dist/tool/middleware.js.map +1 -0
- package/dist/tool/question-tool.js +17 -0
- package/dist/tool/question-tool.js.map +1 -0
- package/dist/tool/skill-tool-marker.js +9 -0
- package/dist/tool/skill-tool-marker.js.map +1 -0
- package/dist/tool/think-tool.js +15 -0
- package/dist/tool/think-tool.js.map +1 -0
- package/dist/tool/tool.js +17 -0
- package/dist/tool/tool.js.map +1 -0
- package/dist/transcription/index.js +7 -4
- package/dist/transcription/transcribe.js +11 -0
- package/dist/transcription/transcribe.js.map +1 -0
- package/dist/transcription/types.js +2 -0
- package/dist/transcription/types.js.map +1 -0
- package/dist/{types-h0EL6Xn0.d.ts → types-Bqw0AuFl.d.ts} +6 -2
- package/dist/vector-store/filter.js +9 -0
- package/dist/vector-store/filter.js.map +1 -0
- package/dist/vector-store/index.js +31 -11
- package/dist/vector-store/ingest.js +19 -0
- package/dist/vector-store/ingest.js.map +1 -0
- package/dist/vector-store/lsh.js +7 -0
- package/dist/vector-store/lsh.js.map +1 -0
- package/dist/vector-store/retrieve.js +15 -0
- package/dist/vector-store/retrieve.js.map +1 -0
- package/dist/vector-store/types.js +1 -0
- package/dist/vector-store/types.js.map +1 -0
- package/package.json +2 -2
- package/dist/chunk-2QZJTG2E.js.map +0 -1
- package/dist/chunk-3RWESPUG.js.map +0 -1
- package/dist/chunk-4UQALF5Y.js.map +0 -1
- package/dist/chunk-AZB6N7P4.js +0 -320
- package/dist/chunk-AZB6N7P4.js.map +0 -1
- package/dist/chunk-JLJMVRRE.js.map +0 -1
- package/dist/chunk-K5L7R7XM.js.map +0 -1
- package/dist/chunk-OI3LSMJG.js +0 -1545
- package/dist/chunk-OI3LSMJG.js.map +0 -1
- package/dist/chunk-QGX73TSQ.js.map +0 -1
- package/dist/chunk-XC3LVC4K.js +0 -753
- package/dist/chunk-XC3LVC4K.js.map +0 -1
- package/dist/chunk-XEVOC433.js.map +0 -1
- package/dist/chunk-XSV5C4R5.js +0 -400
- package/dist/chunk-XSV5C4R5.js.map +0 -1
- package/dist/chunk-XU54PLSD.js +0 -4786
- package/dist/chunk-XU54PLSD.js.map +0 -1
- package/dist/middleware-mY_lpjDp.d.ts +0 -59
- package/dist/type-utils-CtHVDRn_.d.ts +0 -6
- /package/dist/{chunk-YK4WAAS4.js.map → chunk-2NLINXRF.js.map} +0 -0
- /package/dist/{chunk-SPD4XVR7.js.map → chunk-2XSMGVBG.js.map} +0 -0
- /package/dist/{chunk-3XQGVDU5.js.map → chunk-4C7AXYOM.js.map} +0 -0
- /package/dist/{chunk-IZNOP6JG.js.map → chunk-4FIVU53H.js.map} +0 -0
- /package/dist/{chunk-7JLAIN6E.js.map → chunk-4ONUNWGC.js.map} +0 -0
- /package/dist/{chunk-KSKST3KP.js.map → chunk-H3H74RWJ.js.map} +0 -0
- /package/dist/{chunk-OJBFDBLG.js.map → chunk-LBYJPMHC.js.map} +0 -0
- /package/dist/{chunk-J6LVLV6P.js.map → chunk-PLDJCCVL.js.map} +0 -0
- /package/dist/{chunk-AHLKV6KP.js.map → chunk-WN6AVBO4.js.map} +0 -0
- /package/dist/{chunk-Q5BCNYED.js.map → chunk-XJRNBTIV.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evals/agent-target.ts"],"sourcesContent":["import { AgentRunBlockedError } from \"../agent/errors\";\nimport type { AgentInteractionRequest, AgentInteractionResponse } from \"../agent/interactions\";\nimport type {\n AgentInteractionOutcome,\n AgentOutcome,\n AgentResponse,\n AgentRunOptions,\n AgentRunSettings,\n} from \"../agent/run-types\";\nimport type { EvalCase, EvalTarget } from \"./types\";\n\ntype EvaluableAgent<Output> = {\n generate(input: AgentRunOptions<Output>): Promise<AgentOutcome<Output>>;\n};\n\ntype IsAny<Value> = 0 extends 1 & Value ? true : false;\ntype IsExactly<Left, Right> =\n IsAny<Left> extends true\n ? false\n : [Left] extends [Right]\n ? [Right] extends [Left]\n ? true\n : false\n : false;\n\nexport type AgentEvalTargetOptions<\n Input,\n AgentOutput = string,\n Output = AgentResponse<AgentOutput>,\n Expected = unknown,\n> = {\n agent: EvaluableAgent<AgentOutput>;\n request(args: {\n input: Input;\n testCase: EvalCase<Input, Expected>;\n }): AgentRunOptions<AgentOutput> | Promise<AgentRunOptions<AgentOutput>>;\n interactions?:\n | {\n maxResponses?: number | undefined;\n respond(args: {\n interaction: AgentInteractionRequest;\n testCase: EvalCase<Input, Expected>;\n phase: number;\n }): AgentInteractionResponse | Promise<AgentInteractionResponse>;\n }\n | undefined;\n} & (IsExactly<Output, AgentResponse<AgentOutput>> extends true\n ? {\n output?(args: {\n response: AgentResponse<AgentOutput>;\n testCase: EvalCase<Input, Expected>;\n }): Output | Promise<Output>;\n }\n : {\n output(args: {\n response: AgentResponse<AgentOutput>;\n testCase: EvalCase<Input, Expected>;\n }): Output | Promise<Output>;\n });\n\nexport class AgentEvalSuspensionError extends Error {\n constructor(\n readonly result: AgentInteractionOutcome,\n message = \"Agent eval target suspended without an interaction responder.\",\n ) {\n super(message);\n this.name = \"AgentEvalSuspensionError\";\n }\n}\n\nexport function agentEvalTarget<\n Input,\n AgentOutput = string,\n Output = AgentResponse<AgentOutput>,\n Expected = unknown,\n>(\n options: AgentEvalTargetOptions<Input, AgentOutput, Output, Expected>,\n): EvalTarget<Input, Output, Expected> {\n return async (input, testCase) => {\n const maxResponses = options.interactions?.maxResponses ?? 10;\n if (!Number.isSafeInteger(maxResponses) || maxResponses < 1) {\n throw new TypeError(\"Agent eval interactions.maxResponses must be a positive integer.\");\n }\n const request = await options.request({ input, testCase });\n const runSettings = agentRunSettings(request);\n let response = await options.agent.generate(request);\n let phase = 0;\n while (response.type === \"interaction\") {\n if (options.interactions === undefined) {\n throw new AgentEvalSuspensionError(response);\n }\n if (phase >= maxResponses) {\n throw new AgentEvalSuspensionError(\n response,\n `Agent eval target exceeded the interaction response limit of ${maxResponses}.`,\n );\n }\n phase += 1;\n const interactionResponse = await options.interactions.respond({\n interaction: response.interaction,\n testCase,\n phase,\n });\n response = await options.agent.generate({\n continuation: response.continuation,\n response: interactionResponse,\n ...runSettings,\n });\n }\n if (response.type === \"blocked\") throw new AgentRunBlockedError(response);\n return options.output === undefined\n ? (response as Output)\n : await options.output({ response, testCase });\n };\n}\n\nfunction agentRunSettings<Output>(request: AgentRunOptions<Output>): AgentRunSettings<Output> {\n const {\n prompt: _prompt,\n messages: _messages,\n session: _session,\n continuation: _continuation,\n response: _response,\n ...settings\n } = request;\n return settings;\n}\n"],"mappings":";;;;;AA4DO,IAAM,2BAAN,cAAuC,MAAM;AAAA,EAClD,YACW,QACT,UAAU,iEACV;AACA,UAAM,OAAO;AAHJ;AAIT,SAAK,OAAO;AAAA,EACd;AAAA,EALW;AAMb;AAEO,SAAS,gBAMd,SACqC;AACrC,SAAO,OAAO,OAAO,aAAa;AAChC,UAAM,eAAe,QAAQ,cAAc,gBAAgB;AAC3D,QAAI,CAAC,OAAO,cAAc,YAAY,KAAK,eAAe,GAAG;AAC3D,YAAM,IAAI,UAAU,kEAAkE;AAAA,IACxF;AACA,UAAM,UAAU,MAAM,QAAQ,QAAQ,EAAE,OAAO,SAAS,CAAC;AACzD,UAAM,cAAc,iBAAiB,OAAO;AAC5C,QAAI,WAAW,MAAM,QAAQ,MAAM,SAAS,OAAO;AACnD,QAAI,QAAQ;AACZ,WAAO,SAAS,SAAS,eAAe;AACtC,UAAI,QAAQ,iBAAiB,QAAW;AACtC,cAAM,IAAI,yBAAyB,QAAQ;AAAA,MAC7C;AACA,UAAI,SAAS,cAAc;AACzB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,gEAAgE,YAAY;AAAA,QAC9E;AAAA,MACF;AACA,eAAS;AACT,YAAM,sBAAsB,MAAM,QAAQ,aAAa,QAAQ;AAAA,QAC7D,aAAa,SAAS;AAAA,QACtB;AAAA,QACA;AAAA,MACF,CAAC;AACD,iBAAW,MAAM,QAAQ,MAAM,SAAS;AAAA,QACtC,cAAc,SAAS;AAAA,QACvB,UAAU;AAAA,QACV,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AACA,QAAI,SAAS,SAAS,UAAW,OAAM,IAAI,qBAAqB,QAAQ;AACxE,WAAO,QAAQ,WAAW,SACrB,WACD,MAAM,QAAQ,OAAO,EAAE,UAAU,SAAS,CAAC;AAAA,EACjD;AACF;AAEA,SAAS,iBAAyB,SAA4D;AAC5F,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,IACV,GAAG;AAAA,EACL,IAAI;AACJ,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/internal/agent-runtime/run-validation.ts
|
|
2
|
+
function assertNonnegativeSafeInteger(value, name) {
|
|
3
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
4
|
+
throw new TypeError(`${name} must be a nonnegative safe integer.`);
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
function assertPositiveSafeInteger(value, name) {
|
|
9
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
10
|
+
throw new TypeError(`${name} must be a positive safe integer.`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
assertNonnegativeSafeInteger,
|
|
17
|
+
assertPositiveSafeInteger
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=chunk-NPJ2T3L5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/agent-runtime/run-validation.ts"],"sourcesContent":["export function assertNonnegativeSafeInteger(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${name} must be a nonnegative safe integer.`);\n }\n return value;\n}\n\nexport function assertPositiveSafeInteger(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`${name} must be a positive safe integer.`);\n }\n return value;\n}\n"],"mappings":";AAAO,SAAS,6BAA6B,OAAe,MAAsB;AAChF,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC7C,UAAM,IAAI,UAAU,GAAG,IAAI,sCAAsC;AAAA,EACnE;AACA,SAAO;AACT;AAEO,SAAS,0BAA0B,OAAe,MAAsB;AAC7E,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAC9C,UAAM,IAAI,UAAU,GAAG,IAAI,mCAAmC;AAAA,EAChE;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isVectorContext
|
|
3
|
+
} from "./chunk-ZHC5CD6J.js";
|
|
4
|
+
import {
|
|
5
|
+
assertFiniteMinScore,
|
|
6
|
+
assertPositiveSearchLimit
|
|
7
|
+
} from "./chunk-5V533R7F.js";
|
|
8
|
+
|
|
9
|
+
// src/agent/snapshot.ts
|
|
10
|
+
function snapshotAgentContext(inputs) {
|
|
11
|
+
const context = (inputs ?? []).map(snapshotContextInput);
|
|
12
|
+
for (const input of context) {
|
|
13
|
+
if (!isVectorContext(input)) continue;
|
|
14
|
+
assertPositiveSearchLimit(input.topK);
|
|
15
|
+
assertFiniteMinScore(input.minScore);
|
|
16
|
+
}
|
|
17
|
+
return Object.freeze(context);
|
|
18
|
+
}
|
|
19
|
+
function snapshotAgentObservability(observability) {
|
|
20
|
+
if (observability === void 0) return void 0;
|
|
21
|
+
const observers = {};
|
|
22
|
+
for (const [name, observer] of Object.entries(observability.observers)) {
|
|
23
|
+
if (name.trim().length === 0) {
|
|
24
|
+
throw new TypeError("Agent observer names must not be empty.");
|
|
25
|
+
}
|
|
26
|
+
if (typeof observer !== "object" || observer === null || typeof observer.startRun !== "function") {
|
|
27
|
+
throw new TypeError(`Agent observer "${name}" must implement startRun().`);
|
|
28
|
+
}
|
|
29
|
+
observers[name] = observer;
|
|
30
|
+
}
|
|
31
|
+
if (observability.primaryTrace !== void 0 && !(observability.primaryTrace in observers)) {
|
|
32
|
+
throw new TypeError(
|
|
33
|
+
`Agent primaryTrace "${observability.primaryTrace}" must name a configured observer.`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
const errorPolicy = observability.errorPolicy ?? "ignore";
|
|
37
|
+
if (errorPolicy !== "ignore" && errorPolicy !== "throw") {
|
|
38
|
+
throw new TypeError('Agent observability.errorPolicy must be "ignore" or "throw".');
|
|
39
|
+
}
|
|
40
|
+
let snapshot = {
|
|
41
|
+
observers: Object.freeze(observers),
|
|
42
|
+
errorPolicy
|
|
43
|
+
};
|
|
44
|
+
if (observability.primaryTrace !== void 0) {
|
|
45
|
+
snapshot = { ...snapshot, primaryTrace: observability.primaryTrace };
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze(snapshot);
|
|
48
|
+
}
|
|
49
|
+
function snapshotGuardrailPolicies(policies) {
|
|
50
|
+
return Object.freeze((policies ?? []).map(snapshotGuardrailPolicy));
|
|
51
|
+
}
|
|
52
|
+
function snapshotAgentMemory(memory) {
|
|
53
|
+
if (memory === void 0) {
|
|
54
|
+
return void 0;
|
|
55
|
+
}
|
|
56
|
+
const compaction = memory.compaction === void 0 ? void 0 : Object.freeze({
|
|
57
|
+
...memory.compaction,
|
|
58
|
+
trigger: Object.freeze({ ...memory.compaction.trigger }),
|
|
59
|
+
retention: Object.freeze({ ...memory.compaction.retention }),
|
|
60
|
+
conflictRetries: memory.compaction.conflictRetries === false ? false : Object.freeze({ ...memory.compaction.conflictRetries })
|
|
61
|
+
});
|
|
62
|
+
let snapshot = {
|
|
63
|
+
store: memory.store,
|
|
64
|
+
savePolicy: memory.savePolicy
|
|
65
|
+
};
|
|
66
|
+
if (compaction !== void 0) {
|
|
67
|
+
snapshot = { ...snapshot, compaction };
|
|
68
|
+
}
|
|
69
|
+
return Object.freeze(snapshot);
|
|
70
|
+
}
|
|
71
|
+
function cloneFrozenPlainData(value) {
|
|
72
|
+
if (Array.isArray(value)) {
|
|
73
|
+
return Object.freeze(value.map(cloneFrozenPlainData));
|
|
74
|
+
}
|
|
75
|
+
if (typeof value !== "object" || value === null) {
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
const prototype = Object.getPrototypeOf(value);
|
|
79
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
const clone = Object.fromEntries(
|
|
83
|
+
Object.entries(value).map(([key, item]) => [key, cloneFrozenPlainData(item)])
|
|
84
|
+
);
|
|
85
|
+
return Object.freeze(clone);
|
|
86
|
+
}
|
|
87
|
+
function snapshotContextInput(input) {
|
|
88
|
+
if (!isVectorContext(input)) {
|
|
89
|
+
let document = {
|
|
90
|
+
id: input.id,
|
|
91
|
+
text: input.text
|
|
92
|
+
};
|
|
93
|
+
if (input.additionalProps !== void 0) {
|
|
94
|
+
document = {
|
|
95
|
+
...document,
|
|
96
|
+
additionalProps: cloneFrozenPlainData(input.additionalProps)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return Object.freeze(document);
|
|
100
|
+
}
|
|
101
|
+
const format = input.format;
|
|
102
|
+
let shared = {
|
|
103
|
+
kind: "vector-context",
|
|
104
|
+
store: input.store,
|
|
105
|
+
topK: input.topK
|
|
106
|
+
};
|
|
107
|
+
if (input.minScore !== void 0) {
|
|
108
|
+
shared = { ...shared, minScore: input.minScore };
|
|
109
|
+
}
|
|
110
|
+
if (input.filter !== void 0) {
|
|
111
|
+
shared = { ...shared, filter: cloneFrozenPlainData(input.filter) };
|
|
112
|
+
}
|
|
113
|
+
if (input.retries !== void 0) {
|
|
114
|
+
shared = { ...shared, retries: cloneFrozenPlainData(input.retries) };
|
|
115
|
+
}
|
|
116
|
+
if (format !== void 0) {
|
|
117
|
+
shared = {
|
|
118
|
+
...shared,
|
|
119
|
+
format: (result) => format.call(input, result)
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (!("models" in input) || input.models === void 0) {
|
|
123
|
+
return Object.freeze({ ...shared, store: input.store, model: input.model });
|
|
124
|
+
}
|
|
125
|
+
let context = {
|
|
126
|
+
...shared,
|
|
127
|
+
store: input.store,
|
|
128
|
+
models: input.models
|
|
129
|
+
};
|
|
130
|
+
if (input.fusion !== void 0) {
|
|
131
|
+
context = { ...context, fusion: input.fusion };
|
|
132
|
+
}
|
|
133
|
+
return Object.freeze(context);
|
|
134
|
+
}
|
|
135
|
+
function snapshotGuardrailPolicy(policy) {
|
|
136
|
+
return Object.freeze({
|
|
137
|
+
...policy,
|
|
138
|
+
input: Object.freeze([...policy.input]),
|
|
139
|
+
output: Object.freeze([...policy.output])
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export {
|
|
144
|
+
snapshotAgentContext,
|
|
145
|
+
snapshotAgentObservability,
|
|
146
|
+
snapshotGuardrailPolicies,
|
|
147
|
+
snapshotAgentMemory,
|
|
148
|
+
cloneFrozenPlainData
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=chunk-NVALGVQG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/agent/snapshot.ts"],"sourcesContent":["import type { GuardrailPolicy } from \"../guardrails\";\nimport { assertFiniteMinScore, assertPositiveSearchLimit } from \"../internal/vector-search-options\";\nimport type { AgentObservabilityOptions, AgentObserverMap } from \"../observability\";\nimport type { VectorSearchResult } from \"../vector-store\";\nimport type { AgentContextInput, AgentMemory } from \"./types\";\nimport {\n isVectorContext,\n type VectorContext,\n type VectorContextBaseOptions,\n} from \"./vector-context\";\n\nexport function snapshotAgentContext<T>(\n inputs: readonly AgentContextInput<T>[] | undefined,\n): readonly AgentContextInput<T>[] {\n const context = (inputs ?? []).map(snapshotContextInput);\n for (const input of context) {\n if (!isVectorContext(input)) continue;\n assertPositiveSearchLimit(input.topK);\n assertFiniteMinScore(input.minScore);\n }\n return Object.freeze(context);\n}\n\nexport function snapshotAgentObservability(\n observability: AgentObservabilityOptions | undefined,\n): AgentObservabilityOptions | undefined {\n if (observability === undefined) return undefined;\n const observers: Record<string, AgentObserverMap[string]> = {};\n for (const [name, observer] of Object.entries(observability.observers)) {\n if (name.trim().length === 0) {\n throw new TypeError(\"Agent observer names must not be empty.\");\n }\n if (\n typeof observer !== \"object\" ||\n observer === null ||\n typeof observer.startRun !== \"function\"\n ) {\n throw new TypeError(`Agent observer \"${name}\" must implement startRun().`);\n }\n observers[name] = observer;\n }\n if (observability.primaryTrace !== undefined && !(observability.primaryTrace in observers)) {\n throw new TypeError(\n `Agent primaryTrace \"${observability.primaryTrace}\" must name a configured observer.`,\n );\n }\n const errorPolicy = observability.errorPolicy ?? \"ignore\";\n if (errorPolicy !== \"ignore\" && errorPolicy !== \"throw\") {\n throw new TypeError('Agent observability.errorPolicy must be \"ignore\" or \"throw\".');\n }\n let snapshot: AgentObservabilityOptions = {\n observers: Object.freeze(observers),\n errorPolicy,\n };\n if (observability.primaryTrace !== undefined) {\n snapshot = { ...snapshot, primaryTrace: observability.primaryTrace };\n }\n return Object.freeze(snapshot);\n}\n\nexport function snapshotGuardrailPolicies(\n policies: readonly GuardrailPolicy[] | undefined,\n): readonly GuardrailPolicy[] {\n return Object.freeze((policies ?? []).map(snapshotGuardrailPolicy));\n}\n\nexport function snapshotAgentMemory(memory: AgentMemory | undefined): AgentMemory | undefined {\n if (memory === undefined) {\n return undefined;\n }\n const compaction =\n memory.compaction === undefined\n ? undefined\n : Object.freeze({\n ...memory.compaction,\n trigger: Object.freeze({ ...memory.compaction.trigger }),\n retention: Object.freeze({ ...memory.compaction.retention }),\n conflictRetries:\n memory.compaction.conflictRetries === false\n ? false\n : Object.freeze({ ...memory.compaction.conflictRetries }),\n });\n let snapshot: AgentMemory = {\n store: memory.store,\n savePolicy: memory.savePolicy,\n };\n if (compaction !== undefined) {\n snapshot = { ...snapshot, compaction };\n }\n return Object.freeze(snapshot);\n}\n\nexport function cloneFrozenPlainData<T>(value: T): T {\n if (Array.isArray(value)) {\n return Object.freeze(value.map(cloneFrozenPlainData)) as T;\n }\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return value;\n }\n const clone = Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, cloneFrozenPlainData(item)]),\n );\n return Object.freeze(clone) as T;\n}\n\nfunction snapshotContextInput<T>(input: AgentContextInput<T>): AgentContextInput<T> {\n if (!isVectorContext(input)) {\n let document: AgentContextInput<T> = {\n id: input.id,\n text: input.text,\n };\n if (input.additionalProps !== undefined) {\n document = {\n ...document,\n additionalProps: cloneFrozenPlainData(input.additionalProps),\n };\n }\n return Object.freeze(document);\n }\n const format = input.format;\n let shared: VectorContextBaseOptions<T> & {\n kind: \"vector-context\";\n store: VectorContext<T>[\"store\"];\n } = {\n kind: \"vector-context\" as const,\n store: input.store,\n topK: input.topK,\n };\n if (input.minScore !== undefined) {\n shared = { ...shared, minScore: input.minScore };\n }\n if (input.filter !== undefined) {\n shared = { ...shared, filter: cloneFrozenPlainData(input.filter) };\n }\n if (input.retries !== undefined) {\n shared = { ...shared, retries: cloneFrozenPlainData(input.retries) };\n }\n if (format !== undefined) {\n shared = {\n ...shared,\n format: (result: VectorSearchResult<T>) => format.call(input, result),\n };\n }\n if (!(\"models\" in input) || input.models === undefined) {\n return Object.freeze<VectorContext<T>>({ ...shared, store: input.store, model: input.model });\n }\n let context: VectorContext<T> = {\n ...shared,\n store: input.store,\n models: input.models,\n };\n if (input.fusion !== undefined) {\n context = { ...context, fusion: input.fusion };\n }\n return Object.freeze(context);\n}\n\nfunction snapshotGuardrailPolicy(policy: GuardrailPolicy): GuardrailPolicy {\n return Object.freeze({\n ...policy,\n input: Object.freeze([...policy.input]),\n output: Object.freeze([...policy.output]),\n }) as GuardrailPolicy;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import {
|
|
2
|
+
runEvalSuite
|
|
3
|
+
} from "./chunk-QUS6S2NB.js";
|
|
4
|
+
|
|
5
|
+
// src/evals/cli.ts
|
|
6
|
+
var EvalAssertionError = class extends Error {
|
|
7
|
+
mismatches;
|
|
8
|
+
constructor(message, mismatches) {
|
|
9
|
+
super(`${message}
|
|
10
|
+
${mismatches.map((mismatch) => `- ${mismatch}`).join("\n")}`);
|
|
11
|
+
this.name = "EvalAssertionError";
|
|
12
|
+
this.mismatches = mismatches;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
function defineEvalExpectations(_suite, expectations) {
|
|
16
|
+
return expectations;
|
|
17
|
+
}
|
|
18
|
+
function formatEvalResult(result, options = {}) {
|
|
19
|
+
const format = options.format ?? "pretty";
|
|
20
|
+
if (format === "quiet") return "";
|
|
21
|
+
validatePrintOptions(options);
|
|
22
|
+
return format === "json" ? jsonResult(result, options) : prettyResult(result, options);
|
|
23
|
+
}
|
|
24
|
+
function printEvalResult(result, options = {}) {
|
|
25
|
+
const format = options.format ?? "pretty";
|
|
26
|
+
if (format === "quiet") return;
|
|
27
|
+
const write = options.output?.stdout ?? ((text) => process.stdout.write(text));
|
|
28
|
+
write(`${formatEvalResult(result, options)}
|
|
29
|
+
`);
|
|
30
|
+
}
|
|
31
|
+
function evalExitCode(result, expectations) {
|
|
32
|
+
const hasExpectations = expectations?.totals !== void 0 || expectations?.outcomes !== void 0;
|
|
33
|
+
const mismatches = hasExpectations ? expectationMismatches(result, expectations) : [];
|
|
34
|
+
if (hasExpectations && mismatches.length === 0) return 0;
|
|
35
|
+
if (hasExpectations && hasUnexpectedInvalid(result, expectations)) return 2;
|
|
36
|
+
if (hasExpectations) return 1;
|
|
37
|
+
if (requiredMetricCount(result, "invalid") > 0) return 2;
|
|
38
|
+
return requiredMetricCount(result, "fail") > 0 ? 1 : 0;
|
|
39
|
+
}
|
|
40
|
+
function assertEvalTotals(result, expected) {
|
|
41
|
+
const mismatches = totalMismatches(result, expected);
|
|
42
|
+
if (mismatches.length > 0) {
|
|
43
|
+
throw new EvalAssertionError("Evaluation totals did not match expectations.", mismatches);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function assertEvalOutcomes(result, expected) {
|
|
47
|
+
const mismatches = outcomeMismatches(result, expected);
|
|
48
|
+
if (mismatches.length > 0) {
|
|
49
|
+
throw new EvalAssertionError("Evaluation outcomes did not match expectations.", mismatches);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function runEvalCli(options) {
|
|
53
|
+
const { format, exitCode, expectations, output, maxValueLength, redact: redact2, ...suiteOptions } = options;
|
|
54
|
+
const result = await runEvalSuite(
|
|
55
|
+
suiteOptions
|
|
56
|
+
);
|
|
57
|
+
printEvalResult(result, { format, output, maxValueLength, redact: redact2 });
|
|
58
|
+
const code = evalExitCode(result, expectations);
|
|
59
|
+
const mismatches = expectationMismatches(result, expectations);
|
|
60
|
+
if (mismatches.length > 0 && format !== "quiet") {
|
|
61
|
+
const write = output?.stderr ?? ((text) => process.stderr.write(text));
|
|
62
|
+
write(
|
|
63
|
+
`Evaluation expectation mismatches:
|
|
64
|
+
${mismatches.map((value) => `- ${value}`).join("\n")}
|
|
65
|
+
`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
const currentExitCode = typeof process.exitCode === "number" ? process.exitCode : Number(process.exitCode ?? 0);
|
|
69
|
+
if (exitCode === true && code > currentExitCode) process.exitCode = code;
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
function prettyResult(result, options) {
|
|
73
|
+
const lines = [
|
|
74
|
+
`${result.name} (${result.run.id})`,
|
|
75
|
+
`Cases: ${totalsText(result.cases)}`,
|
|
76
|
+
`Metrics: ${totalsText(result.metrics)}`
|
|
77
|
+
];
|
|
78
|
+
for (const caseResult of result.results) {
|
|
79
|
+
lines.push(``, `[${caseResult.outcome.toUpperCase()}] ${caseResult.case.id}`);
|
|
80
|
+
if (caseResult.targetStatus === "succeeded") {
|
|
81
|
+
lines.push(
|
|
82
|
+
` output: ${displayValue(
|
|
83
|
+
redact(caseResult.output, options, { kind: "output", caseId: caseResult.case.id }),
|
|
84
|
+
options.maxValueLength
|
|
85
|
+
)}`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
if (caseResult.targetStatus === "failed") {
|
|
89
|
+
lines.push(
|
|
90
|
+
` target error: ${errorText(
|
|
91
|
+
redact(caseResult.targetError, options, { kind: "error", caseId: caseResult.case.id }),
|
|
92
|
+
options.maxValueLength
|
|
93
|
+
)}`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
for (const metric of caseResult.metrics) {
|
|
97
|
+
const parts = [` - ${metric.metricName}: ${metric.outcome.outcome}`];
|
|
98
|
+
if (metric.outcome.score !== void 0) {
|
|
99
|
+
parts.push(
|
|
100
|
+
`score=${displayValue(
|
|
101
|
+
redact(metric.outcome.score, options, {
|
|
102
|
+
kind: "score",
|
|
103
|
+
caseId: caseResult.case.id,
|
|
104
|
+
metricName: metric.metricName
|
|
105
|
+
}),
|
|
106
|
+
options.maxValueLength
|
|
107
|
+
)}`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
if (metric.threshold !== void 0) parts.push(`threshold=${metric.threshold}`);
|
|
111
|
+
if (metric.direction !== void 0) parts.push(`direction=${metric.direction}`);
|
|
112
|
+
if (!metric.required) parts.push("optional");
|
|
113
|
+
lines.push(parts.join(" | "));
|
|
114
|
+
const explanation = metric.outcome.comment ?? (metric.outcome.outcome === "invalid" ? metric.outcome.reason : void 0);
|
|
115
|
+
if (explanation !== void 0) {
|
|
116
|
+
lines.push(
|
|
117
|
+
` ${displayValue(
|
|
118
|
+
redact(explanation, options, {
|
|
119
|
+
kind: "comment",
|
|
120
|
+
caseId: caseResult.case.id,
|
|
121
|
+
metricName: metric.metricName
|
|
122
|
+
}),
|
|
123
|
+
options.maxValueLength
|
|
124
|
+
)}`
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
lines.push(
|
|
130
|
+
``,
|
|
131
|
+
`Usage: target=${result.usage.target.totalTokens} evaluation=${result.usage.evaluation.totalTokens} total=${result.usage.total.totalTokens} tokens`
|
|
132
|
+
);
|
|
133
|
+
if (result.cost !== void 0) {
|
|
134
|
+
lines.push(
|
|
135
|
+
`Cost: target=${result.cost.target} evaluation=${result.cost.evaluation} total=${result.cost.total} ${result.cost.currency}`
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
lines.push(`Duration: ${result.durationMs}ms`);
|
|
139
|
+
return lines.join("\n");
|
|
140
|
+
}
|
|
141
|
+
function jsonResult(result, options) {
|
|
142
|
+
return JSON.stringify(
|
|
143
|
+
redactJsonResult(result, options),
|
|
144
|
+
(_key, value) => {
|
|
145
|
+
if (value instanceof Error) {
|
|
146
|
+
return { name: value.name, message: value.message, stack: value.stack };
|
|
147
|
+
}
|
|
148
|
+
if (value instanceof RegExp) return String(value);
|
|
149
|
+
if (typeof value === "string") return truncate(value, options.maxValueLength);
|
|
150
|
+
return value;
|
|
151
|
+
},
|
|
152
|
+
2
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
function expectationMismatches(result, expectations) {
|
|
156
|
+
if (expectations === void 0) return [];
|
|
157
|
+
const mismatches = [];
|
|
158
|
+
if (expectations.totals !== void 0) {
|
|
159
|
+
mismatches.push(...totalMismatches(result, expectations.totals));
|
|
160
|
+
}
|
|
161
|
+
if (expectations.outcomes !== void 0) {
|
|
162
|
+
mismatches.push(...outcomeMismatches(result, expectations.outcomes));
|
|
163
|
+
}
|
|
164
|
+
return mismatches;
|
|
165
|
+
}
|
|
166
|
+
function totalMismatches(result, expected) {
|
|
167
|
+
const directMetrics = {};
|
|
168
|
+
if (expected.total !== void 0) directMetrics.total = expected.total;
|
|
169
|
+
if (expected.passed !== void 0) directMetrics.passed = expected.passed;
|
|
170
|
+
if (expected.failed !== void 0) directMetrics.failed = expected.failed;
|
|
171
|
+
if (expected.invalid !== void 0) directMetrics.invalid = expected.invalid;
|
|
172
|
+
return [
|
|
173
|
+
...totalsGroupMismatches("metrics", result.metrics, {
|
|
174
|
+
...directMetrics,
|
|
175
|
+
...expected.metrics
|
|
176
|
+
}),
|
|
177
|
+
...totalsGroupMismatches("cases", result.cases, expected.cases)
|
|
178
|
+
];
|
|
179
|
+
}
|
|
180
|
+
function totalsGroupMismatches(label, actual, expected) {
|
|
181
|
+
if (expected === void 0) return [];
|
|
182
|
+
const mismatches = [];
|
|
183
|
+
for (const key of ["total", "passed", "failed", "invalid"]) {
|
|
184
|
+
if (expected[key] !== void 0 && actual[key] !== expected[key]) {
|
|
185
|
+
mismatches.push(`${label}.${key}: expected ${expected[key]}, received ${actual[key]}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return mismatches;
|
|
189
|
+
}
|
|
190
|
+
function outcomeMismatches(result, expected) {
|
|
191
|
+
const mismatches = [];
|
|
192
|
+
const actualCases = new Map(result.results.map((caseResult) => [caseResult.case.id, caseResult]));
|
|
193
|
+
for (const [caseId, metrics] of Object.entries(expected)) {
|
|
194
|
+
const caseResult = actualCases.get(caseId);
|
|
195
|
+
if (caseResult === void 0) {
|
|
196
|
+
mismatches.push(`${caseId}: expected case was not present`);
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
for (const [metricName, expectedOutcome] of Object.entries(metrics)) {
|
|
200
|
+
const metric = caseResult.metrics.find((candidate) => candidate.metricName === metricName);
|
|
201
|
+
if (metric === void 0) {
|
|
202
|
+
mismatches.push(`${caseId}.${metricName}: expected metric was not present`);
|
|
203
|
+
} else if (metric.outcome.outcome !== expectedOutcome) {
|
|
204
|
+
mismatches.push(
|
|
205
|
+
`${caseId}.${metricName}: expected ${expectedOutcome}, received ${metric.outcome.outcome}`
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
for (const caseResult of result.results) {
|
|
211
|
+
for (const metric of caseResult.metrics) {
|
|
212
|
+
if (!metric.required) continue;
|
|
213
|
+
const expectedOutcome = expected[caseResult.case.id]?.[metric.metricName] ?? "pass";
|
|
214
|
+
if (metric.outcome.outcome !== expectedOutcome) {
|
|
215
|
+
const message = `${caseResult.case.id}.${metric.metricName}: expected ${expectedOutcome}, received ${metric.outcome.outcome}`;
|
|
216
|
+
if (!mismatches.includes(message)) mismatches.push(message);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return mismatches;
|
|
221
|
+
}
|
|
222
|
+
function hasUnexpectedInvalid(result, expectations) {
|
|
223
|
+
if (expectations?.outcomes !== void 0) {
|
|
224
|
+
return result.results.some(
|
|
225
|
+
(caseResult) => caseResult.metrics.some(
|
|
226
|
+
(metric) => metric.required && metric.outcome.outcome === "invalid" && expectations.outcomes?.[caseResult.case.id]?.[metric.metricName] !== "invalid"
|
|
227
|
+
)
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
const expectedInvalid = expectations?.totals?.metrics?.invalid ?? expectations?.totals?.invalid;
|
|
231
|
+
return result.metrics.invalid > (expectedInvalid ?? 0);
|
|
232
|
+
}
|
|
233
|
+
function requiredMetricCount(result, status) {
|
|
234
|
+
return result.results.reduce(
|
|
235
|
+
(total, caseResult) => total + caseResult.metrics.filter((metric) => metric.required && metric.outcome.outcome === status).length,
|
|
236
|
+
0
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
function totalsText(totals) {
|
|
240
|
+
return `${totals.total} total / ${totals.passed} pass / ${totals.failed} fail / ${totals.invalid} invalid`;
|
|
241
|
+
}
|
|
242
|
+
function displayValue(value, maxValueLength) {
|
|
243
|
+
let text;
|
|
244
|
+
if (typeof value === "string") text = value;
|
|
245
|
+
else {
|
|
246
|
+
try {
|
|
247
|
+
text = JSON.stringify(value) ?? String(value);
|
|
248
|
+
} catch {
|
|
249
|
+
text = String(value);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return truncate(text, maxValueLength);
|
|
253
|
+
}
|
|
254
|
+
function errorText(error, maxValueLength) {
|
|
255
|
+
return truncate(error instanceof Error ? error.message : displayValue(error), maxValueLength);
|
|
256
|
+
}
|
|
257
|
+
function truncate(value, maxValueLength) {
|
|
258
|
+
return maxValueLength !== void 0 && value.length > maxValueLength ? `${value.slice(0, maxValueLength)}\u2026` : value;
|
|
259
|
+
}
|
|
260
|
+
function redact(value, options, context) {
|
|
261
|
+
return options.redact === void 0 ? value : options.redact(value, context);
|
|
262
|
+
}
|
|
263
|
+
function redactJsonResult(result, options) {
|
|
264
|
+
return {
|
|
265
|
+
...result,
|
|
266
|
+
run: {
|
|
267
|
+
...result.run,
|
|
268
|
+
metadata: result.run.metadata === void 0 ? void 0 : redact(result.run.metadata, options, {
|
|
269
|
+
kind: "metadata"
|
|
270
|
+
})
|
|
271
|
+
},
|
|
272
|
+
results: result.results.map((caseResult) => ({
|
|
273
|
+
...caseResult,
|
|
274
|
+
case: {
|
|
275
|
+
...caseResult.case,
|
|
276
|
+
input: redact(caseResult.case.input, options, {
|
|
277
|
+
kind: "input",
|
|
278
|
+
caseId: caseResult.case.id
|
|
279
|
+
}),
|
|
280
|
+
expected: redact(caseResult.case.expected, options, {
|
|
281
|
+
kind: "expected",
|
|
282
|
+
caseId: caseResult.case.id
|
|
283
|
+
}),
|
|
284
|
+
context: redact(caseResult.case.context, options, {
|
|
285
|
+
kind: "context",
|
|
286
|
+
caseId: caseResult.case.id
|
|
287
|
+
}),
|
|
288
|
+
retrievalContext: redact(caseResult.case.retrievalContext, options, {
|
|
289
|
+
kind: "retrievalContext",
|
|
290
|
+
caseId: caseResult.case.id
|
|
291
|
+
}),
|
|
292
|
+
metadata: caseResult.case.metadata === void 0 ? void 0 : redact(caseResult.case.metadata, options, {
|
|
293
|
+
kind: "metadata",
|
|
294
|
+
caseId: caseResult.case.id
|
|
295
|
+
})
|
|
296
|
+
},
|
|
297
|
+
output: caseResult.targetStatus === "succeeded" ? redact(caseResult.output, options, { kind: "output", caseId: caseResult.case.id }) : void 0,
|
|
298
|
+
targetError: caseResult.targetStatus === "failed" ? redact(caseResult.targetError, options, {
|
|
299
|
+
kind: "error",
|
|
300
|
+
caseId: caseResult.case.id
|
|
301
|
+
}) : void 0,
|
|
302
|
+
metrics: caseResult.metrics.map((metric) => ({
|
|
303
|
+
...metric,
|
|
304
|
+
reporterErrors: metric.reporterErrors.map(
|
|
305
|
+
(error) => redact(error, options, {
|
|
306
|
+
kind: "error",
|
|
307
|
+
caseId: caseResult.case.id,
|
|
308
|
+
metricName: metric.metricName
|
|
309
|
+
})
|
|
310
|
+
),
|
|
311
|
+
outcome: redactOutcome(metric.outcome, options, caseResult.case.id, metric.metricName)
|
|
312
|
+
})),
|
|
313
|
+
scores: Object.fromEntries(
|
|
314
|
+
caseResult.metrics.map((metric) => [
|
|
315
|
+
metric.metricName,
|
|
316
|
+
redactOutcome(metric.outcome, options, caseResult.case.id, metric.metricName)
|
|
317
|
+
])
|
|
318
|
+
)
|
|
319
|
+
})),
|
|
320
|
+
reporterErrors: result.reporterErrors.map((error) => redact(error, options, { kind: "error" }))
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
function redactOutcome(outcome, options, caseId, metricName) {
|
|
324
|
+
return {
|
|
325
|
+
...outcome,
|
|
326
|
+
...outcome.score === void 0 ? {} : { score: redact(outcome.score, options, { kind: "score", caseId, metricName }) },
|
|
327
|
+
...outcome.comment === void 0 ? {} : { comment: redact(outcome.comment, options, { kind: "comment", caseId, metricName }) },
|
|
328
|
+
...!("reason" in outcome) || outcome.reason === void 0 ? {} : { reason: redact(outcome.reason, options, { kind: "comment", caseId, metricName }) },
|
|
329
|
+
...outcome.metadata === void 0 ? {} : {
|
|
330
|
+
metadata: redact(outcome.metadata, options, {
|
|
331
|
+
kind: "metadata",
|
|
332
|
+
caseId,
|
|
333
|
+
metricName
|
|
334
|
+
})
|
|
335
|
+
},
|
|
336
|
+
...!("error" in outcome) || outcome.error === void 0 ? {} : { error: redact(outcome.error, options, { kind: "error", caseId, metricName }) }
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function validatePrintOptions(options) {
|
|
340
|
+
if (options.maxValueLength !== void 0 && (!Number.isSafeInteger(options.maxValueLength) || options.maxValueLength < 1)) {
|
|
341
|
+
throw new RangeError("Evaluation maxValueLength must be a positive integer.");
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
export {
|
|
346
|
+
EvalAssertionError,
|
|
347
|
+
defineEvalExpectations,
|
|
348
|
+
formatEvalResult,
|
|
349
|
+
printEvalResult,
|
|
350
|
+
evalExitCode,
|
|
351
|
+
assertEvalTotals,
|
|
352
|
+
assertEvalOutcomes,
|
|
353
|
+
runEvalCli
|
|
354
|
+
};
|
|
355
|
+
//# sourceMappingURL=chunk-O6DTOCBM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evals/cli.ts"],"sourcesContent":["import { runEvalSuite } from \"./runner\";\nimport type {\n EvalMetric,\n EvalOutcomeStatus,\n EvalSuiteResult,\n EvalTotals,\n RunEvalSuiteOptions,\n} from \"./types\";\n\nexport type EvalOutputFormat = \"pretty\" | \"json\" | \"quiet\";\n\nexport type EvalExpectedTotals = Partial<EvalTotals> & {\n metrics?: Partial<EvalTotals> | undefined;\n cases?: Partial<EvalTotals> | undefined;\n};\n\nexport type EvalExpectedOutcomes = Record<string, Record<string, EvalOutcomeStatus>>;\n\nexport type EvalExpectations = {\n totals?: EvalExpectedTotals | undefined;\n outcomes?: EvalExpectedOutcomes | undefined;\n};\n\nexport type EvalOutputWriters = {\n stdout?(text: string): void;\n stderr?(text: string): void;\n};\n\nexport type EvalRedactionContext = {\n kind:\n | \"input\"\n | \"expected\"\n | \"context\"\n | \"retrievalContext\"\n | \"output\"\n | \"score\"\n | \"comment\"\n | \"metadata\"\n | \"error\";\n caseId?: string | undefined;\n metricName?: string | undefined;\n};\n\nexport type EvalRedactor = (value: unknown, context: EvalRedactionContext) => unknown;\n\nexport type PrintEvalResultOptions = {\n format?: EvalOutputFormat | undefined;\n output?: EvalOutputWriters | undefined;\n maxValueLength?: number | undefined;\n redact?: EvalRedactor | undefined;\n};\n\ntype EvalSuiteShape = {\n cases: readonly { id: string }[];\n metrics: readonly { name: string }[];\n};\n\nexport type EvalExpectedOutcomesFor<Suite extends EvalSuiteShape> = Partial<\n Record<\n Suite[\"cases\"][number][\"id\"],\n Partial<Record<Suite[\"metrics\"][number][\"name\"], EvalOutcomeStatus>>\n >\n>;\n\nexport type EvalExpectationsFor<Suite extends EvalSuiteShape> = Omit<\n EvalExpectations,\n \"outcomes\"\n> & {\n outcomes?: EvalExpectedOutcomesFor<Suite> | undefined;\n};\n\nexport type RunEvalCliOptions<\n Input,\n Output,\n Expected = unknown,\n Metrics extends readonly EvalMetric<\n NoInfer<Input>,\n NoInfer<Output>,\n unknown,\n NoInfer<Expected>,\n string\n >[] = readonly EvalMetric<NoInfer<Input>, NoInfer<Output>, unknown, NoInfer<Expected>, string>[],\n> = RunEvalSuiteOptions<Input, Output, Expected, Metrics> & {\n format?: EvalOutputFormat | undefined;\n exitCode?: boolean | undefined;\n expectations?: EvalExpectations | undefined;\n output?: EvalOutputWriters | undefined;\n maxValueLength?: number | undefined;\n redact?: EvalRedactor | undefined;\n};\n\nexport class EvalAssertionError extends Error {\n readonly mismatches: string[];\n\n constructor(message: string, mismatches: string[]) {\n super(`${message}\\n${mismatches.map((mismatch) => `- ${mismatch}`).join(\"\\n\")}`);\n this.name = \"EvalAssertionError\";\n this.mismatches = mismatches;\n }\n}\n\nexport function defineEvalExpectations<const Suite extends EvalSuiteShape>(\n _suite: Suite,\n expectations: EvalExpectationsFor<NoInfer<Suite>>,\n): EvalExpectationsFor<Suite> {\n return expectations;\n}\n\nexport function formatEvalResult(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n options: Omit<PrintEvalResultOptions, \"output\"> = {},\n): string {\n const format = options.format ?? \"pretty\";\n if (format === \"quiet\") return \"\";\n validatePrintOptions(options);\n return format === \"json\" ? jsonResult(result, options) : prettyResult(result, options);\n}\n\nexport function printEvalResult(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n options: PrintEvalResultOptions = {},\n): void {\n const format = options.format ?? \"pretty\";\n if (format === \"quiet\") return;\n const write = options.output?.stdout ?? ((text: string) => process.stdout.write(text));\n write(`${formatEvalResult(result, options)}\\n`);\n}\n\nexport function evalExitCode(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expectations?: EvalExpectations,\n): 0 | 1 | 2 {\n const hasExpectations =\n expectations?.totals !== undefined || expectations?.outcomes !== undefined;\n const mismatches = hasExpectations ? expectationMismatches(result, expectations) : [];\n if (hasExpectations && mismatches.length === 0) return 0;\n if (hasExpectations && hasUnexpectedInvalid(result, expectations)) return 2;\n if (hasExpectations) return 1;\n if (requiredMetricCount(result, \"invalid\") > 0) return 2;\n return requiredMetricCount(result, \"fail\") > 0 ? 1 : 0;\n}\n\nexport function assertEvalTotals(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expected: EvalExpectedTotals,\n): void {\n const mismatches = totalMismatches(result, expected);\n if (mismatches.length > 0) {\n throw new EvalAssertionError(\"Evaluation totals did not match expectations.\", mismatches);\n }\n}\n\nexport function assertEvalOutcomes(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expected: EvalExpectedOutcomes,\n): void {\n const mismatches = outcomeMismatches(result, expected);\n if (mismatches.length > 0) {\n throw new EvalAssertionError(\"Evaluation outcomes did not match expectations.\", mismatches);\n }\n}\n\nexport async function runEvalCli<\n Input,\n Output,\n Expected = unknown,\n const Metrics extends readonly EvalMetric<\n NoInfer<Input>,\n NoInfer<Output>,\n unknown,\n NoInfer<Expected>,\n string\n >[] = readonly EvalMetric<NoInfer<Input>, NoInfer<Output>, unknown, NoInfer<Expected>, string>[],\n>(\n options: RunEvalCliOptions<Input, Output, Expected, Metrics>,\n): Promise<EvalSuiteResult<Input, Output, Expected, Metrics>> {\n const { format, exitCode, expectations, output, maxValueLength, redact, ...suiteOptions } =\n options;\n const result = await runEvalSuite(\n suiteOptions as RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n );\n printEvalResult(result, { format, output, maxValueLength, redact });\n const code = evalExitCode(result, expectations);\n const mismatches = expectationMismatches(result, expectations);\n if (mismatches.length > 0 && format !== \"quiet\") {\n const write = output?.stderr ?? ((text: string) => process.stderr.write(text));\n write(\n `Evaluation expectation mismatches:\\n${mismatches.map((value) => `- ${value}`).join(\"\\n\")}\\n`,\n );\n }\n const currentExitCode =\n typeof process.exitCode === \"number\" ? process.exitCode : Number(process.exitCode ?? 0);\n if (exitCode === true && code > currentExitCode) process.exitCode = code;\n return result;\n}\n\nfunction prettyResult(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n options: Omit<PrintEvalResultOptions, \"output\">,\n): string {\n const lines = [\n `${result.name} (${result.run.id})`,\n `Cases: ${totalsText(result.cases)}`,\n `Metrics: ${totalsText(result.metrics)}`,\n ];\n for (const caseResult of result.results) {\n lines.push(``, `[${caseResult.outcome.toUpperCase()}] ${caseResult.case.id}`);\n if (caseResult.targetStatus === \"succeeded\") {\n lines.push(\n ` output: ${displayValue(\n redact(caseResult.output, options, { kind: \"output\", caseId: caseResult.case.id }),\n options.maxValueLength,\n )}`,\n );\n }\n if (caseResult.targetStatus === \"failed\") {\n lines.push(\n ` target error: ${errorText(\n redact(caseResult.targetError, options, { kind: \"error\", caseId: caseResult.case.id }),\n options.maxValueLength,\n )}`,\n );\n }\n for (const metric of caseResult.metrics) {\n const parts = [` - ${metric.metricName}: ${metric.outcome.outcome}`];\n if (metric.outcome.score !== undefined) {\n parts.push(\n `score=${displayValue(\n redact(metric.outcome.score, options, {\n kind: \"score\",\n caseId: caseResult.case.id,\n metricName: metric.metricName,\n }),\n options.maxValueLength,\n )}`,\n );\n }\n if (metric.threshold !== undefined) parts.push(`threshold=${metric.threshold}`);\n if (metric.direction !== undefined) parts.push(`direction=${metric.direction}`);\n if (!metric.required) parts.push(\"optional\");\n lines.push(parts.join(\" | \"));\n const explanation =\n metric.outcome.comment ??\n (metric.outcome.outcome === \"invalid\" ? metric.outcome.reason : undefined);\n if (explanation !== undefined) {\n lines.push(\n ` ${displayValue(\n redact(explanation, options, {\n kind: \"comment\",\n caseId: caseResult.case.id,\n metricName: metric.metricName,\n }),\n options.maxValueLength,\n )}`,\n );\n }\n }\n }\n lines.push(\n ``,\n `Usage: target=${result.usage.target.totalTokens} evaluation=${result.usage.evaluation.totalTokens} total=${result.usage.total.totalTokens} tokens`,\n );\n if (result.cost !== undefined) {\n lines.push(\n `Cost: target=${result.cost.target} evaluation=${result.cost.evaluation} total=${result.cost.total} ${result.cost.currency}`,\n );\n }\n lines.push(`Duration: ${result.durationMs}ms`);\n return lines.join(\"\\n\");\n}\n\nfunction jsonResult(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n options: Omit<PrintEvalResultOptions, \"output\">,\n): string {\n return JSON.stringify(\n redactJsonResult(result, options),\n (_key, value: unknown) => {\n if (value instanceof Error) {\n return { name: value.name, message: value.message, stack: value.stack };\n }\n if (value instanceof RegExp) return String(value);\n if (typeof value === \"string\") return truncate(value, options.maxValueLength);\n return value;\n },\n 2,\n );\n}\n\nfunction expectationMismatches(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expectations?: EvalExpectations,\n): string[] {\n if (expectations === undefined) return [];\n const mismatches: string[] = [];\n if (expectations.totals !== undefined) {\n mismatches.push(...totalMismatches(result, expectations.totals));\n }\n if (expectations.outcomes !== undefined) {\n mismatches.push(...outcomeMismatches(result, expectations.outcomes));\n }\n return mismatches;\n}\n\nfunction totalMismatches(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expected: EvalExpectedTotals,\n): string[] {\n const directMetrics: Partial<EvalTotals> = {};\n if (expected.total !== undefined) directMetrics.total = expected.total;\n if (expected.passed !== undefined) directMetrics.passed = expected.passed;\n if (expected.failed !== undefined) directMetrics.failed = expected.failed;\n if (expected.invalid !== undefined) directMetrics.invalid = expected.invalid;\n return [\n ...totalsGroupMismatches(\"metrics\", result.metrics, {\n ...directMetrics,\n ...expected.metrics,\n }),\n ...totalsGroupMismatches(\"cases\", result.cases, expected.cases),\n ];\n}\n\nfunction totalsGroupMismatches(\n label: string,\n actual: EvalTotals,\n expected: Partial<EvalTotals> | undefined,\n): string[] {\n if (expected === undefined) return [];\n const mismatches: string[] = [];\n for (const key of [\"total\", \"passed\", \"failed\", \"invalid\"] as const) {\n if (expected[key] !== undefined && actual[key] !== expected[key]) {\n mismatches.push(`${label}.${key}: expected ${expected[key]}, received ${actual[key]}`);\n }\n }\n return mismatches;\n}\n\nfunction outcomeMismatches(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expected: EvalExpectedOutcomes,\n): string[] {\n const mismatches: string[] = [];\n const actualCases = new Map(result.results.map((caseResult) => [caseResult.case.id, caseResult]));\n for (const [caseId, metrics] of Object.entries(expected)) {\n const caseResult = actualCases.get(caseId);\n if (caseResult === undefined) {\n mismatches.push(`${caseId}: expected case was not present`);\n continue;\n }\n for (const [metricName, expectedOutcome] of Object.entries(metrics)) {\n const metric = caseResult.metrics.find((candidate) => candidate.metricName === metricName);\n if (metric === undefined) {\n mismatches.push(`${caseId}.${metricName}: expected metric was not present`);\n } else if (metric.outcome.outcome !== expectedOutcome) {\n mismatches.push(\n `${caseId}.${metricName}: expected ${expectedOutcome}, received ${metric.outcome.outcome}`,\n );\n }\n }\n }\n for (const caseResult of result.results) {\n for (const metric of caseResult.metrics) {\n if (!metric.required) continue;\n const expectedOutcome = expected[caseResult.case.id]?.[metric.metricName] ?? \"pass\";\n if (metric.outcome.outcome !== expectedOutcome) {\n const message = `${caseResult.case.id}.${metric.metricName}: expected ${expectedOutcome}, received ${metric.outcome.outcome}`;\n if (!mismatches.includes(message)) mismatches.push(message);\n }\n }\n }\n return mismatches;\n}\n\nfunction hasUnexpectedInvalid(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n expectations: EvalExpectations | undefined,\n): boolean {\n if (expectations?.outcomes !== undefined) {\n return result.results.some((caseResult) =>\n caseResult.metrics.some(\n (metric) =>\n metric.required &&\n metric.outcome.outcome === \"invalid\" &&\n expectations.outcomes?.[caseResult.case.id]?.[metric.metricName] !== \"invalid\",\n ),\n );\n }\n const expectedInvalid = expectations?.totals?.metrics?.invalid ?? expectations?.totals?.invalid;\n return result.metrics.invalid > (expectedInvalid ?? 0);\n}\n\nfunction requiredMetricCount(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n status: \"fail\" | \"invalid\",\n): number {\n return result.results.reduce(\n (total, caseResult) =>\n total +\n caseResult.metrics.filter((metric) => metric.required && metric.outcome.outcome === status)\n .length,\n 0,\n );\n}\n\nfunction totalsText(totals: EvalTotals): string {\n return `${totals.total} total / ${totals.passed} pass / ${totals.failed} fail / ${totals.invalid} invalid`;\n}\n\nfunction displayValue(value: unknown, maxValueLength?: number): string {\n let text: string;\n if (typeof value === \"string\") text = value;\n else {\n try {\n text = JSON.stringify(value) ?? String(value);\n } catch {\n text = String(value);\n }\n }\n return truncate(text, maxValueLength);\n}\n\nfunction errorText(error: unknown, maxValueLength?: number): string {\n return truncate(error instanceof Error ? error.message : displayValue(error), maxValueLength);\n}\n\nfunction truncate(value: string, maxValueLength: number | undefined): string {\n return maxValueLength !== undefined && value.length > maxValueLength\n ? `${value.slice(0, maxValueLength)}…`\n : value;\n}\n\nfunction redact(\n value: unknown,\n options: Omit<PrintEvalResultOptions, \"output\">,\n context: EvalRedactionContext,\n): unknown {\n return options.redact === undefined ? value : options.redact(value, context);\n}\n\nfunction redactJsonResult(\n result: EvalSuiteResult<unknown, unknown, unknown>,\n options: Omit<PrintEvalResultOptions, \"output\">,\n): unknown {\n return {\n ...result,\n run: {\n ...result.run,\n metadata:\n result.run.metadata === undefined\n ? undefined\n : (redact(result.run.metadata, options, {\n kind: \"metadata\",\n }) as typeof result.run.metadata),\n },\n results: result.results.map((caseResult) => ({\n ...caseResult,\n case: {\n ...caseResult.case,\n input: redact(caseResult.case.input, options, {\n kind: \"input\",\n caseId: caseResult.case.id,\n }),\n expected: redact(caseResult.case.expected, options, {\n kind: \"expected\",\n caseId: caseResult.case.id,\n }),\n context: redact(caseResult.case.context, options, {\n kind: \"context\",\n caseId: caseResult.case.id,\n }),\n retrievalContext: redact(caseResult.case.retrievalContext, options, {\n kind: \"retrievalContext\",\n caseId: caseResult.case.id,\n }),\n metadata:\n caseResult.case.metadata === undefined\n ? undefined\n : (redact(caseResult.case.metadata, options, {\n kind: \"metadata\",\n caseId: caseResult.case.id,\n }) as typeof caseResult.case.metadata),\n },\n output:\n caseResult.targetStatus === \"succeeded\"\n ? redact(caseResult.output, options, { kind: \"output\", caseId: caseResult.case.id })\n : undefined,\n targetError:\n caseResult.targetStatus === \"failed\"\n ? redact(caseResult.targetError, options, {\n kind: \"error\",\n caseId: caseResult.case.id,\n })\n : undefined,\n metrics: caseResult.metrics.map((metric) => ({\n ...metric,\n reporterErrors: metric.reporterErrors.map((error) =>\n redact(error, options, {\n kind: \"error\",\n caseId: caseResult.case.id,\n metricName: metric.metricName,\n }),\n ),\n outcome: redactOutcome(metric.outcome, options, caseResult.case.id, metric.metricName),\n })),\n scores: Object.fromEntries(\n caseResult.metrics.map((metric) => [\n metric.metricName,\n redactOutcome(metric.outcome, options, caseResult.case.id, metric.metricName),\n ]),\n ),\n })),\n reporterErrors: result.reporterErrors.map((error) => redact(error, options, { kind: \"error\" })),\n };\n}\n\nfunction redactOutcome(\n outcome: EvalSuiteResult<\n unknown,\n unknown,\n unknown\n >[\"results\"][number][\"metrics\"][number][\"outcome\"],\n options: Omit<PrintEvalResultOptions, \"output\">,\n caseId: string,\n metricName: string,\n): unknown {\n return {\n ...outcome,\n ...(outcome.score === undefined\n ? {}\n : { score: redact(outcome.score, options, { kind: \"score\", caseId, metricName }) }),\n ...(outcome.comment === undefined\n ? {}\n : { comment: redact(outcome.comment, options, { kind: \"comment\", caseId, metricName }) }),\n ...(!(\"reason\" in outcome) || outcome.reason === undefined\n ? {}\n : { reason: redact(outcome.reason, options, { kind: \"comment\", caseId, metricName }) }),\n ...(outcome.metadata === undefined\n ? {}\n : {\n metadata: redact(outcome.metadata, options, {\n kind: \"metadata\",\n caseId,\n metricName,\n }),\n }),\n ...(!(\"error\" in outcome) || outcome.error === undefined\n ? {}\n : { error: redact(outcome.error, options, { kind: \"error\", caseId, metricName }) }),\n };\n}\n\nfunction validatePrintOptions(options: Omit<PrintEvalResultOptions, \"output\">): void {\n if (\n options.maxValueLength !== undefined &&\n (!Number.isSafeInteger(options.maxValueLength) || options.maxValueLength < 1)\n ) {\n throw new RangeError(\"Evaluation maxValueLength must be a positive integer.\");\n }\n}\n"],"mappings":"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","names":["redact"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-OJF67RNM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|