@anvia/core 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +112 -1
  2. package/dist/agent/agent-tool.js +7 -7
  3. package/dist/agent/agent.js +25 -25
  4. package/dist/agent/index.js +29 -29
  5. package/dist/agent/resolve-options.js +10 -10
  6. package/dist/agent/resolved-agent.js +26 -26
  7. package/dist/agent/team/agent-team.js +29 -29
  8. package/dist/agent/team/index.js +29 -29
  9. package/dist/agent/tool-catalog.js +9 -9
  10. package/dist/{chunk-QHGYCYV6.js → chunk-3FIX7GLM.js} +2 -2
  11. package/dist/{chunk-SIXS4CCU.js → chunk-4IOC4SP6.js} +4 -4
  12. package/dist/chunk-4IOC4SP6.js.map +1 -0
  13. package/dist/{chunk-JMMZICU7.js → chunk-4OSA3MMA.js} +39 -5
  14. package/dist/chunk-4OSA3MMA.js.map +1 -0
  15. package/dist/{chunk-Y365ABZY.js → chunk-4WSICA6D.js} +2 -2
  16. package/dist/{chunk-YOLOFTAY.js → chunk-57AUTEQ6.js} +57 -5
  17. package/dist/chunk-57AUTEQ6.js.map +1 -0
  18. package/dist/{chunk-647TQE3E.js → chunk-5BO4OTTK.js} +5 -5
  19. package/dist/{chunk-ZQC6M22O.js → chunk-7LBUXGJI.js} +2 -2
  20. package/dist/{chunk-NDAGW32C.js → chunk-7OHHMYRO.js} +2 -2
  21. package/dist/{chunk-DXW37JLZ.js → chunk-AMPQJMDG.js} +5 -5
  22. package/dist/{chunk-HAAGSIZH.js → chunk-CB2L2NIQ.js} +2 -2
  23. package/dist/{chunk-3SUEXGRA.js → chunk-D6FK5ZQR.js} +5 -5
  24. package/dist/{chunk-B57NNDEF.js → chunk-FTK6YRLN.js} +5 -5
  25. package/dist/{chunk-T3ZOZEAB.js → chunk-GB4SRUT7.js} +2 -2
  26. package/dist/{chunk-KX2TRKO2.js → chunk-GNBPXJC6.js} +2 -2
  27. package/dist/{chunk-PZ7ATNR6.js → chunk-GRI4EFNG.js} +15 -15
  28. package/dist/chunk-GRI4EFNG.js.map +1 -0
  29. package/dist/{chunk-CJKGTEN4.js → chunk-HDL5TXF7.js} +2 -2
  30. package/dist/{chunk-YMTBHHLQ.js → chunk-HG6ASDNI.js} +3 -3
  31. package/dist/{chunk-XAVSWLX5.js → chunk-IMSM4HHI.js} +3 -3
  32. package/dist/{chunk-TK2VXQVZ.js → chunk-KGVDUYZV.js} +3 -3
  33. package/dist/{chunk-PPMK7CG4.js → chunk-LW6F3IGP.js} +2 -2
  34. package/dist/{chunk-PWWKX2HA.js → chunk-MJAM7HZB.js} +8 -8
  35. package/dist/{chunk-2JZV4LUS.js → chunk-MKY7KTZY.js} +3 -13
  36. package/dist/chunk-MKY7KTZY.js.map +1 -0
  37. package/dist/{chunk-RFFOL6ON.js → chunk-MWG2PMTE.js} +18 -5
  38. package/dist/chunk-MWG2PMTE.js.map +1 -0
  39. package/dist/{chunk-JMNIWUFV.js → chunk-NKSXYOUM.js} +3 -3
  40. package/dist/{chunk-4VDDYI6P.js → chunk-OBTD3GPY.js} +2 -2
  41. package/dist/{chunk-GDY2Z2SZ.js → chunk-PFJN5OIQ.js} +2 -2
  42. package/dist/chunk-PZC5UHIN.js +190 -0
  43. package/dist/chunk-PZC5UHIN.js.map +1 -0
  44. package/dist/{chunk-UYODZ7OE.js → chunk-STEAW4JD.js} +2 -2
  45. package/dist/{chunk-LJGQ6VQB.js → chunk-TD2VYYUT.js} +90 -31
  46. package/dist/chunk-TD2VYYUT.js.map +1 -0
  47. package/dist/{chunk-AJC6YRVB.js → chunk-TOJSC4GI.js} +3 -3
  48. package/dist/{chunk-V5DWNXVH.js → chunk-W2XPREWL.js} +135 -26
  49. package/dist/chunk-W2XPREWL.js.map +1 -0
  50. package/dist/chunk-W6V63YPY.js +96 -0
  51. package/dist/chunk-W6V63YPY.js.map +1 -0
  52. package/dist/{chunk-F4BOW76L.js → chunk-XQTTPQWA.js} +4 -4
  53. package/dist/{chunk-HHMLE3TZ.js → chunk-YCTXTOOQ.js} +7 -16
  54. package/dist/chunk-YCTXTOOQ.js.map +1 -0
  55. package/dist/{chunk-7TUAAGVR.js → chunk-YKWUFYXT.js} +2 -2
  56. package/dist/{chunk-5SJBSCG2.js → chunk-YSR6KLCS.js} +8 -2
  57. package/dist/chunk-YSR6KLCS.js.map +1 -0
  58. package/dist/{chunk-6E6ABRJ6.js → chunk-ZJ4T7CEX.js} +2 -2
  59. package/dist/completion/generate-completion.js +3 -3
  60. package/dist/completion/index.js +3 -3
  61. package/dist/completion/stream-accumulator.js +1 -1
  62. package/dist/embeddings/embed.js +1 -1
  63. package/dist/embeddings/index.js +1 -1
  64. package/dist/evals/advanced-metrics.js +6 -6
  65. package/dist/evals/agent-target.js +2 -1
  66. package/dist/evals/cli.js +6 -6
  67. package/dist/evals/execution.js +3 -1
  68. package/dist/evals/index.js +12 -12
  69. package/dist/evals/judge.js +5 -5
  70. package/dist/evals/metrics.js +6 -6
  71. package/dist/evals/runner.js +5 -5
  72. package/dist/extractor/extractor.js +4 -4
  73. package/dist/extractor/index.js +4 -4
  74. package/dist/guardrails/index.js +4 -4
  75. package/dist/index.js +34 -34
  76. package/dist/internal/agent-runtime/agent-run.js +21 -21
  77. package/dist/internal/agent-runtime/continuation-state.js +3 -3
  78. package/dist/internal/agent-runtime/interaction-suspension.js +3 -3
  79. package/dist/internal/agent-runtime/memory.js +5 -5
  80. package/dist/internal/agent-runtime/prepared-tool-call.js +2 -2
  81. package/dist/internal/agent-runtime/retrieval.js +8 -8
  82. package/dist/internal/agent-runtime/tool-execution.js +15 -15
  83. package/dist/internal/agent.js +26 -26
  84. package/dist/internal/team-runtime/member.js +3 -3
  85. package/dist/internal/team-runtime/run.js +28 -28
  86. package/dist/internal/team-runtime/tools.js +4 -4
  87. package/dist/memory/compaction.js +4 -4
  88. package/dist/memory/index.js +4 -4
  89. package/dist/observability/group.js +3 -3
  90. package/dist/observability/index.js +3 -3
  91. package/dist/pipeline/index.js +6 -6
  92. package/dist/pipeline/pipeline.js +6 -6
  93. package/dist/schema/standard-json-schema.js +1 -1
  94. package/dist/skills/index.js +13 -13
  95. package/dist/skills/load.js +13 -13
  96. package/dist/skills/tools.js +12 -12
  97. package/dist/streaming/index.d.ts +2 -1
  98. package/dist/streaming/index.js +2 -1
  99. package/dist/streaming/readable-stream.js +2 -1
  100. package/dist/tool/create-tool.js +3 -3
  101. package/dist/tool/dynamic-tools.js +8 -8
  102. package/dist/tool/index.js +14 -14
  103. package/dist/tool/question-tool.js +4 -4
  104. package/dist/tool/think-tool.js +4 -4
  105. package/dist/vector-store/index.js +7 -7
  106. package/dist/vector-store/ingest.js +2 -2
  107. package/dist/vector-store/retrieve.js +2 -2
  108. package/package.json +1 -1
  109. package/dist/chunk-2JZV4LUS.js.map +0 -1
  110. package/dist/chunk-54ZZJRP2.js +0 -57
  111. package/dist/chunk-54ZZJRP2.js.map +0 -1
  112. package/dist/chunk-5SJBSCG2.js.map +0 -1
  113. package/dist/chunk-HHMLE3TZ.js.map +0 -1
  114. package/dist/chunk-JMMZICU7.js.map +0 -1
  115. package/dist/chunk-LJGQ6VQB.js.map +0 -1
  116. package/dist/chunk-NNEKBZSM.js +0 -66
  117. package/dist/chunk-NNEKBZSM.js.map +0 -1
  118. package/dist/chunk-PZ7ATNR6.js.map +0 -1
  119. package/dist/chunk-RFFOL6ON.js.map +0 -1
  120. package/dist/chunk-SIXS4CCU.js.map +0 -1
  121. package/dist/chunk-V5DWNXVH.js.map +0 -1
  122. package/dist/chunk-YOLOFTAY.js.map +0 -1
  123. /package/dist/{chunk-QHGYCYV6.js.map → chunk-3FIX7GLM.js.map} +0 -0
  124. /package/dist/{chunk-Y365ABZY.js.map → chunk-4WSICA6D.js.map} +0 -0
  125. /package/dist/{chunk-647TQE3E.js.map → chunk-5BO4OTTK.js.map} +0 -0
  126. /package/dist/{chunk-ZQC6M22O.js.map → chunk-7LBUXGJI.js.map} +0 -0
  127. /package/dist/{chunk-NDAGW32C.js.map → chunk-7OHHMYRO.js.map} +0 -0
  128. /package/dist/{chunk-DXW37JLZ.js.map → chunk-AMPQJMDG.js.map} +0 -0
  129. /package/dist/{chunk-HAAGSIZH.js.map → chunk-CB2L2NIQ.js.map} +0 -0
  130. /package/dist/{chunk-3SUEXGRA.js.map → chunk-D6FK5ZQR.js.map} +0 -0
  131. /package/dist/{chunk-B57NNDEF.js.map → chunk-FTK6YRLN.js.map} +0 -0
  132. /package/dist/{chunk-T3ZOZEAB.js.map → chunk-GB4SRUT7.js.map} +0 -0
  133. /package/dist/{chunk-KX2TRKO2.js.map → chunk-GNBPXJC6.js.map} +0 -0
  134. /package/dist/{chunk-CJKGTEN4.js.map → chunk-HDL5TXF7.js.map} +0 -0
  135. /package/dist/{chunk-YMTBHHLQ.js.map → chunk-HG6ASDNI.js.map} +0 -0
  136. /package/dist/{chunk-XAVSWLX5.js.map → chunk-IMSM4HHI.js.map} +0 -0
  137. /package/dist/{chunk-TK2VXQVZ.js.map → chunk-KGVDUYZV.js.map} +0 -0
  138. /package/dist/{chunk-PPMK7CG4.js.map → chunk-LW6F3IGP.js.map} +0 -0
  139. /package/dist/{chunk-PWWKX2HA.js.map → chunk-MJAM7HZB.js.map} +0 -0
  140. /package/dist/{chunk-JMNIWUFV.js.map → chunk-NKSXYOUM.js.map} +0 -0
  141. /package/dist/{chunk-4VDDYI6P.js.map → chunk-OBTD3GPY.js.map} +0 -0
  142. /package/dist/{chunk-GDY2Z2SZ.js.map → chunk-PFJN5OIQ.js.map} +0 -0
  143. /package/dist/{chunk-UYODZ7OE.js.map → chunk-STEAW4JD.js.map} +0 -0
  144. /package/dist/{chunk-AJC6YRVB.js.map → chunk-TOJSC4GI.js.map} +0 -0
  145. /package/dist/{chunk-F4BOW76L.js.map → chunk-XQTTPQWA.js.map} +0 -0
  146. /package/dist/{chunk-7TUAAGVR.js.map → chunk-YKWUFYXT.js.map} +0 -0
  147. /package/dist/{chunk-6E6ABRJ6.js.map → chunk-ZJ4T7CEX.js.map} +0 -0
@@ -1,41 +1,41 @@
1
1
  import {
2
2
  AgentTeam
3
- } from "../../chunk-TK2VXQVZ.js";
3
+ } from "../../chunk-KGVDUYZV.js";
4
4
  import "../../chunk-X6WS3XWL.js";
5
- import "../../chunk-3SUEXGRA.js";
5
+ import "../../chunk-D6FK5ZQR.js";
6
6
  import "../../chunk-PIMD4DYG.js";
7
7
  import "../../chunk-FSBDE6RF.js";
8
8
  import "../../chunk-3TAQXJBC.js";
9
- import "../../chunk-CJKGTEN4.js";
9
+ import "../../chunk-HDL5TXF7.js";
10
10
  import "../../chunk-ENZ2XX27.js";
11
- import "../../chunk-AJC6YRVB.js";
12
- import "../../chunk-PWWKX2HA.js";
13
- import "../../chunk-PZ7ATNR6.js";
14
- import "../../chunk-B57NNDEF.js";
11
+ import "../../chunk-TOJSC4GI.js";
12
+ import "../../chunk-MJAM7HZB.js";
13
+ import "../../chunk-GRI4EFNG.js";
14
+ import "../../chunk-FTK6YRLN.js";
15
15
  import "../../chunk-LAIATEUB.js";
16
- import "../../chunk-NDAGW32C.js";
17
- import "../../chunk-GDY2Z2SZ.js";
16
+ import "../../chunk-7OHHMYRO.js";
17
+ import "../../chunk-PFJN5OIQ.js";
18
18
  import "../../chunk-KITX3HDN.js";
19
19
  import "../../chunk-NPJ2T3L5.js";
20
20
  import "../../chunk-YWRXOPHC.js";
21
21
  import "../../chunk-SXE4J43E.js";
22
22
  import "../../chunk-5I2NVRHC.js";
23
23
  import "../../chunk-5IURMWFN.js";
24
- import "../../chunk-2NLINXRF.js";
25
24
  import "../../chunk-JMJFK3A4.js";
26
25
  import "../../chunk-4AW2633B.js";
27
- import "../../chunk-T3ZOZEAB.js";
28
- import "../../chunk-6E6ABRJ6.js";
26
+ import "../../chunk-GB4SRUT7.js";
27
+ import "../../chunk-2NLINXRF.js";
28
+ import "../../chunk-ZJ4T7CEX.js";
29
29
  import "../../chunk-YNA3UR42.js";
30
30
  import "../../chunk-H3H74RWJ.js";
31
- import "../../chunk-MJCMKZFP.js";
32
- import "../../chunk-PPMK7CG4.js";
31
+ import "../../chunk-LW6F3IGP.js";
33
32
  import "../../chunk-LQJ4KHMY.js";
33
+ import "../../chunk-MJCMKZFP.js";
34
34
  import "../../chunk-EZR5AV3J.js";
35
35
  import "../../chunk-OJF67RNM.js";
36
36
  import "../../chunk-FAPIZJS2.js";
37
37
  import "../../chunk-7LBPRXZP.js";
38
- import "../../chunk-ZQC6M22O.js";
38
+ import "../../chunk-7LBUXGJI.js";
39
39
  import "../../chunk-A7BXVZXZ.js";
40
40
  import "../../chunk-TP3MCUXS.js";
41
41
  import "../../chunk-6RQYWZI3.js";
@@ -43,27 +43,27 @@ import "../../chunk-NF6WBPFG.js";
43
43
  import "../../chunk-LBYJPMHC.js";
44
44
  import "../../chunk-KFAVEL5F.js";
45
45
  import "../../chunk-GLMYZ6OA.js";
46
- import "../../chunk-UYODZ7OE.js";
46
+ import "../../chunk-STEAW4JD.js";
47
47
  import "../../chunk-WLUWRBQ4.js";
48
48
  import "../../chunk-ZPJFXRQZ.js";
49
49
  import "../../chunk-MEN4AFDZ.js";
50
- import "../../chunk-VZ5ZZBNX.js";
51
50
  import "../../chunk-6TAWRKFK.js";
52
51
  import "../../chunk-6BTJC3ES.js";
52
+ import "../../chunk-VZ5ZZBNX.js";
53
53
  import "../../chunk-MT3BLVYN.js";
54
54
  import "../../chunk-ZXLCTQUX.js";
55
- import "../../chunk-F4BOW76L.js";
56
- import "../../chunk-XAVSWLX5.js";
55
+ import "../../chunk-XQTTPQWA.js";
56
+ import "../../chunk-IMSM4HHI.js";
57
57
  import "../../chunk-5WLIHNNJ.js";
58
- import "../../chunk-QHGYCYV6.js";
58
+ import "../../chunk-3FIX7GLM.js";
59
59
  import "../../chunk-ESOFEAYK.js";
60
- import "../../chunk-HAAGSIZH.js";
60
+ import "../../chunk-CB2L2NIQ.js";
61
61
  import "../../chunk-PJNE75WC.js";
62
62
  import "../../chunk-PLDJCCVL.js";
63
63
  import "../../chunk-3J2CSVPR.js";
64
64
  import "../../chunk-ERN7P6Q4.js";
65
65
  import "../../chunk-7F53DOML.js";
66
- import "../../chunk-HHMLE3TZ.js";
66
+ import "../../chunk-YCTXTOOQ.js";
67
67
  import "../../chunk-DU4WA6LQ.js";
68
68
  import "../../chunk-4FIVU53H.js";
69
69
  import "../../chunk-KO5NMTAM.js";
@@ -73,19 +73,19 @@ import "../../chunk-NVALGVQG.js";
73
73
  import "../../chunk-ZHC5CD6J.js";
74
74
  import "../../chunk-5V533R7F.js";
75
75
  import "../../chunk-KY4VXIN2.js";
76
- import "../../chunk-JMNIWUFV.js";
77
- import "../../chunk-YMTBHHLQ.js";
78
- import "../../chunk-YOLOFTAY.js";
76
+ import "../../chunk-NKSXYOUM.js";
77
+ import "../../chunk-HG6ASDNI.js";
78
+ import "../../chunk-57AUTEQ6.js";
79
79
  import "../../chunk-6OO5C5GW.js";
80
80
  import "../../chunk-GSVOMQEE.js";
81
81
  import "../../chunk-4ONUNWGC.js";
82
- import "../../chunk-2JZV4LUS.js";
82
+ import "../../chunk-MKY7KTZY.js";
83
83
  import "../../chunk-XQV3XNVT.js";
84
- import "../../chunk-Y365ABZY.js";
85
- import "../../chunk-647TQE3E.js";
84
+ import "../../chunk-4WSICA6D.js";
85
+ import "../../chunk-5BO4OTTK.js";
86
86
  import "../../chunk-YZVFIW5D.js";
87
- import "../../chunk-SCFWN3T2.js";
88
87
  import "../../chunk-J6S6MT7O.js";
88
+ import "../../chunk-SCFWN3T2.js";
89
89
  import "../../chunk-HJ6KTQTZ.js";
90
90
  import "../../chunk-BONQTXRQ.js";
91
91
  import "../../chunk-4C7AXYOM.js";
@@ -1,45 +1,45 @@
1
1
  import "../../chunk-53TPAXYR.js";
2
2
  import {
3
3
  AgentTeam
4
- } from "../../chunk-TK2VXQVZ.js";
4
+ } from "../../chunk-KGVDUYZV.js";
5
5
  import "../../chunk-X6WS3XWL.js";
6
- import "../../chunk-3SUEXGRA.js";
6
+ import "../../chunk-D6FK5ZQR.js";
7
7
  import "../../chunk-PIMD4DYG.js";
8
8
  import "../../chunk-FSBDE6RF.js";
9
9
  import "../../chunk-3TAQXJBC.js";
10
- import "../../chunk-CJKGTEN4.js";
10
+ import "../../chunk-HDL5TXF7.js";
11
11
  import {
12
12
  AgentTeamInteractionError,
13
13
  AgentTeamLimitError
14
14
  } from "../../chunk-ENZ2XX27.js";
15
- import "../../chunk-AJC6YRVB.js";
16
- import "../../chunk-PWWKX2HA.js";
17
- import "../../chunk-PZ7ATNR6.js";
18
- import "../../chunk-B57NNDEF.js";
15
+ import "../../chunk-TOJSC4GI.js";
16
+ import "../../chunk-MJAM7HZB.js";
17
+ import "../../chunk-GRI4EFNG.js";
18
+ import "../../chunk-FTK6YRLN.js";
19
19
  import "../../chunk-LAIATEUB.js";
20
- import "../../chunk-NDAGW32C.js";
21
- import "../../chunk-GDY2Z2SZ.js";
20
+ import "../../chunk-7OHHMYRO.js";
21
+ import "../../chunk-PFJN5OIQ.js";
22
22
  import "../../chunk-KITX3HDN.js";
23
23
  import "../../chunk-NPJ2T3L5.js";
24
24
  import "../../chunk-YWRXOPHC.js";
25
25
  import "../../chunk-SXE4J43E.js";
26
26
  import "../../chunk-5I2NVRHC.js";
27
27
  import "../../chunk-5IURMWFN.js";
28
- import "../../chunk-2NLINXRF.js";
29
28
  import "../../chunk-JMJFK3A4.js";
30
29
  import "../../chunk-4AW2633B.js";
31
- import "../../chunk-T3ZOZEAB.js";
32
- import "../../chunk-6E6ABRJ6.js";
30
+ import "../../chunk-GB4SRUT7.js";
31
+ import "../../chunk-2NLINXRF.js";
32
+ import "../../chunk-ZJ4T7CEX.js";
33
33
  import "../../chunk-YNA3UR42.js";
34
34
  import "../../chunk-H3H74RWJ.js";
35
- import "../../chunk-MJCMKZFP.js";
36
- import "../../chunk-PPMK7CG4.js";
35
+ import "../../chunk-LW6F3IGP.js";
37
36
  import "../../chunk-LQJ4KHMY.js";
37
+ import "../../chunk-MJCMKZFP.js";
38
38
  import "../../chunk-EZR5AV3J.js";
39
39
  import "../../chunk-OJF67RNM.js";
40
40
  import "../../chunk-FAPIZJS2.js";
41
41
  import "../../chunk-7LBPRXZP.js";
42
- import "../../chunk-ZQC6M22O.js";
42
+ import "../../chunk-7LBUXGJI.js";
43
43
  import "../../chunk-A7BXVZXZ.js";
44
44
  import "../../chunk-TP3MCUXS.js";
45
45
  import "../../chunk-6RQYWZI3.js";
@@ -47,27 +47,27 @@ import "../../chunk-NF6WBPFG.js";
47
47
  import "../../chunk-LBYJPMHC.js";
48
48
  import "../../chunk-KFAVEL5F.js";
49
49
  import "../../chunk-GLMYZ6OA.js";
50
- import "../../chunk-UYODZ7OE.js";
50
+ import "../../chunk-STEAW4JD.js";
51
51
  import "../../chunk-WLUWRBQ4.js";
52
52
  import "../../chunk-ZPJFXRQZ.js";
53
53
  import "../../chunk-MEN4AFDZ.js";
54
- import "../../chunk-VZ5ZZBNX.js";
55
54
  import "../../chunk-6TAWRKFK.js";
56
55
  import "../../chunk-6BTJC3ES.js";
56
+ import "../../chunk-VZ5ZZBNX.js";
57
57
  import "../../chunk-MT3BLVYN.js";
58
58
  import "../../chunk-ZXLCTQUX.js";
59
- import "../../chunk-F4BOW76L.js";
60
- import "../../chunk-XAVSWLX5.js";
59
+ import "../../chunk-XQTTPQWA.js";
60
+ import "../../chunk-IMSM4HHI.js";
61
61
  import "../../chunk-5WLIHNNJ.js";
62
- import "../../chunk-QHGYCYV6.js";
62
+ import "../../chunk-3FIX7GLM.js";
63
63
  import "../../chunk-ESOFEAYK.js";
64
- import "../../chunk-HAAGSIZH.js";
64
+ import "../../chunk-CB2L2NIQ.js";
65
65
  import "../../chunk-PJNE75WC.js";
66
66
  import "../../chunk-PLDJCCVL.js";
67
67
  import "../../chunk-3J2CSVPR.js";
68
68
  import "../../chunk-ERN7P6Q4.js";
69
69
  import "../../chunk-7F53DOML.js";
70
- import "../../chunk-HHMLE3TZ.js";
70
+ import "../../chunk-YCTXTOOQ.js";
71
71
  import "../../chunk-DU4WA6LQ.js";
72
72
  import "../../chunk-4FIVU53H.js";
73
73
  import "../../chunk-KO5NMTAM.js";
@@ -77,19 +77,19 @@ import "../../chunk-NVALGVQG.js";
77
77
  import "../../chunk-ZHC5CD6J.js";
78
78
  import "../../chunk-5V533R7F.js";
79
79
  import "../../chunk-KY4VXIN2.js";
80
- import "../../chunk-JMNIWUFV.js";
81
- import "../../chunk-YMTBHHLQ.js";
82
- import "../../chunk-YOLOFTAY.js";
80
+ import "../../chunk-NKSXYOUM.js";
81
+ import "../../chunk-HG6ASDNI.js";
82
+ import "../../chunk-57AUTEQ6.js";
83
83
  import "../../chunk-6OO5C5GW.js";
84
84
  import "../../chunk-GSVOMQEE.js";
85
85
  import "../../chunk-4ONUNWGC.js";
86
- import "../../chunk-2JZV4LUS.js";
86
+ import "../../chunk-MKY7KTZY.js";
87
87
  import "../../chunk-XQV3XNVT.js";
88
- import "../../chunk-Y365ABZY.js";
89
- import "../../chunk-647TQE3E.js";
88
+ import "../../chunk-4WSICA6D.js";
89
+ import "../../chunk-5BO4OTTK.js";
90
90
  import "../../chunk-YZVFIW5D.js";
91
- import "../../chunk-SCFWN3T2.js";
92
91
  import "../../chunk-J6S6MT7O.js";
92
+ import "../../chunk-SCFWN3T2.js";
93
93
  import "../../chunk-HJ6KTQTZ.js";
94
94
  import "../../chunk-BONQTXRQ.js";
95
95
  import "../../chunk-4C7AXYOM.js";
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  prepareAgentTools
3
- } from "../chunk-ZQC6M22O.js";
4
- import "../chunk-F4BOW76L.js";
5
- import "../chunk-XAVSWLX5.js";
3
+ } from "../chunk-7LBUXGJI.js";
4
+ import "../chunk-XQTTPQWA.js";
5
+ import "../chunk-IMSM4HHI.js";
6
6
  import "../chunk-5WLIHNNJ.js";
7
- import "../chunk-QHGYCYV6.js";
7
+ import "../chunk-3FIX7GLM.js";
8
8
  import "../chunk-ESOFEAYK.js";
9
- import "../chunk-HAAGSIZH.js";
9
+ import "../chunk-CB2L2NIQ.js";
10
10
  import "../chunk-PJNE75WC.js";
11
11
  import "../chunk-PLDJCCVL.js";
12
12
  import "../chunk-3J2CSVPR.js";
13
13
  import "../chunk-ERN7P6Q4.js";
14
14
  import "../chunk-7F53DOML.js";
15
- import "../chunk-HHMLE3TZ.js";
15
+ import "../chunk-YCTXTOOQ.js";
16
16
  import "../chunk-DU4WA6LQ.js";
17
17
  import "../chunk-4FIVU53H.js";
18
18
  import "../chunk-KO5NMTAM.js";
@@ -21,11 +21,11 @@ import "../chunk-GPVXCY5I.js";
21
21
  import "../chunk-NVALGVQG.js";
22
22
  import "../chunk-ZHC5CD6J.js";
23
23
  import "../chunk-5V533R7F.js";
24
- import "../chunk-Y365ABZY.js";
25
- import "../chunk-647TQE3E.js";
24
+ import "../chunk-4WSICA6D.js";
25
+ import "../chunk-5BO4OTTK.js";
26
26
  import "../chunk-YZVFIW5D.js";
27
- import "../chunk-SCFWN3T2.js";
28
27
  import "../chunk-J6S6MT7O.js";
28
+ import "../chunk-SCFWN3T2.js";
29
29
  import "../chunk-BONQTXRQ.js";
30
30
  import "../chunk-4C7AXYOM.js";
31
31
  import "../chunk-SQAAVYJG.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  embedDocuments
3
- } from "./chunk-HHMLE3TZ.js";
3
+ } from "./chunk-YCTXTOOQ.js";
4
4
  import {
5
5
  chunkTextDocuments
6
6
  } from "./chunk-TFIOU6UR.js";
@@ -88,4 +88,4 @@ export {
88
88
  ingestVectorText,
89
89
  ingestVectorDocuments
90
90
  };
91
- //# sourceMappingURL=chunk-QHGYCYV6.js.map
91
+ //# sourceMappingURL=chunk-3FIX7GLM.js.map
@@ -13,7 +13,7 @@ import {
13
13
  abortable,
14
14
  createConcurrencyLimiter,
15
15
  createEvalCaseSignal
16
- } from "./chunk-JMMZICU7.js";
16
+ } from "./chunk-4OSA3MMA.js";
17
17
  import {
18
18
  Usage
19
19
  } from "./chunk-HJ6KTQTZ.js";
@@ -201,7 +201,7 @@ async function runEvalCase(options, testCase, run, targetLimit, metricLimit, com
201
201
  });
202
202
  } catch (error) {
203
203
  if (options.signal?.aborted === true) {
204
- throw options.signal.reason ?? new EvalAbortError();
204
+ throw suiteAbortReason(options.signal);
205
205
  }
206
206
  targetStatus = "failed";
207
207
  targetError = error;
@@ -652,7 +652,7 @@ function isAborted(signal) {
652
652
  return signal?.aborted === true;
653
653
  }
654
654
  function suiteAbortReason(signal) {
655
- return signal?.reason ?? new EvalAbortError();
655
+ return signal?.reason === void 0 ? new EvalAbortError() : signal.reason;
656
656
  }
657
657
 
658
658
  export {
@@ -660,4 +660,4 @@ export {
660
660
  EvalFailFastError,
661
661
  runEvalSuite
662
662
  };
663
- //# sourceMappingURL=chunk-SIXS4CCU.js.map
663
+ //# sourceMappingURL=chunk-4IOC4SP6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/evals/runner.ts"],"sourcesContent":["import { type Usage, Usage as UsageValue } from \"../completion\";\nimport {\n abortable,\n type ConcurrencyLimiter,\n createConcurrencyLimiter,\n createEvalCaseSignal,\n EvalAbortError,\n EvalTimeoutError,\n} from \"./execution\";\nimport { errorMessage } from \"./format\";\nimport { EvalOutcome, type EvalOutcome as EvalOutcomeType } from \"./outcome\";\nimport { defaultEvalTraceSelector } from \"./reporting\";\nimport type {\n EvalCase,\n EvalCaseResult,\n EvalCostSummary,\n EvalMetric,\n EvalMetricResult,\n EvalReporter,\n EvalRunContext,\n EvalRunEndArgs,\n EvalRunStartArgs,\n EvalSuiteResult,\n EvalTotals,\n EvalTraceRef,\n EvalProgressEvent,\n RunEvalSuiteOptions,\n} from \"./types\";\n\nexport class EvalReporterDispatchError extends AggregateError {\n readonly phase: string;\n\n constructor(phase: string, errors: readonly unknown[]) {\n super(errors, `Evaluation reporter ${phase} failed ${errors.length} time(s).`);\n this.name = \"EvalReporterDispatchError\";\n this.phase = phase;\n }\n}\n\nexport class EvalFailFastError extends Error {\n constructor(\n readonly caseId: string,\n readonly outcome: \"fail\" | \"invalid\",\n ) {\n super(`Evaluation stopped after case ${caseId} produced a required ${outcome} outcome.`);\n this.name = \"EvalFailFastError\";\n }\n}\n\nexport async function runEvalSuite<\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: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n): Promise<EvalSuiteResult<Input, Output, Expected, Metrics>>;\nexport async function runEvalSuite<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n): Promise<EvalSuiteResult<Input, Output, Expected, Metrics>> {\n validateSuiteOptions(options);\n const selectedCases = selectCases(options);\n const selectedOptions = {\n ...options,\n cases: selectedCases,\n } as unknown as RunEvalSuiteOptions<Input, Output, Expected, Metrics>;\n const startedAtMs = Date.now();\n const run = resolveRun(selectedOptions, startedAtMs);\n const reporters = options.reporters ?? [];\n const lifecycle = {\n run,\n suiteName: options.name,\n caseCount: selectedCases.length,\n metricNames: options.metrics.map((metric) => metric.name),\n } satisfies EvalRunStartArgs;\n let reporterErrors: unknown[];\n try {\n reporterErrors = await notifyRunStart(\n reporters,\n lifecycle,\n options.reporterErrorPolicy ?? \"collect\",\n );\n } catch (error) {\n await notifyRunEnd(reporters, {\n ...lifecycle,\n status: \"failed\",\n completedAt: new Date().toISOString(),\n durationMs: Date.now() - startedAtMs,\n error,\n });\n throw error;\n }\n let results: Array<EvalCaseResult<Input, Output, Expected, Metrics>>;\n let aggregates: Awaited<ReturnType<typeof aggregateResult>>;\n try {\n results = await runEvalCases(selectedOptions, run);\n aggregates = await aggregateResult(selectedOptions, results);\n } catch (error) {\n await notifyRunEnd(reporters, {\n ...lifecycle,\n status: \"failed\",\n completedAt: new Date().toISOString(),\n durationMs: Date.now() - startedAtMs,\n error,\n });\n throw error;\n }\n const completedAt = new Date().toISOString();\n const result: EvalSuiteResult<Input, Output, Expected, Metrics> = {\n name: options.name,\n run: { ...run, completedAt },\n results,\n metrics: aggregates.metrics,\n cases: aggregates.cases,\n usage: aggregates.usage,\n durationMs: Date.now() - startedAtMs,\n reporterErrors,\n };\n result.reporterErrors.push(\n ...results.flatMap((caseResult) =>\n caseResult.metrics.flatMap((metricResult) => metricResult.reporterErrors),\n ),\n );\n if (aggregates.cost !== undefined) {\n result.cost = aggregates.cost;\n }\n const runEndArgs: EvalRunEndArgs = {\n ...lifecycle,\n status: \"completed\",\n completedAt,\n durationMs: result.durationMs,\n metrics: result.metrics,\n cases: result.cases,\n usage: result.usage,\n };\n if (result.cost !== undefined) {\n runEndArgs.cost = result.cost;\n }\n result.reporterErrors.push(\n ...(await notifyRunEnd(reporters, runEndArgs, options.reporterErrorPolicy ?? \"collect\")),\n );\n return result;\n}\n\nasync function runEvalCases<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n run: EvalRunContext,\n): Promise<Array<EvalCaseResult<Input, Output, Expected, Metrics>>> {\n const targetConcurrency = options.targetConcurrency ?? options.concurrency ?? 1;\n const metricConcurrency = options.metricConcurrency ?? options.concurrency ?? 1;\n const workerConcurrency = Math.max(targetConcurrency, metricConcurrency);\n const targetLimit = createConcurrencyLimiter(targetConcurrency);\n const metricLimit = createConcurrencyLimiter(metricConcurrency);\n const results = Array<EvalCaseResult<Input, Output, Expected, Metrics>>(options.cases.length);\n let nextIndex = 0;\n let completedCases = 0;\n let failure: { error: unknown } | undefined;\n\n async function worker(): Promise<void> {\n while (failure === undefined && nextIndex < options.cases.length) {\n if (isAborted(options.signal)) {\n failure ??= { error: suiteAbortReason(options.signal) };\n break;\n }\n const index = nextIndex;\n nextIndex += 1;\n try {\n results[index] = await runEvalCase(\n options,\n options.cases[index] as EvalCase<Input, Expected>,\n run,\n targetLimit,\n metricLimit,\n () => completedCases,\n );\n completedCases += 1;\n if (isAborted(options.signal)) {\n failure ??= { error: suiteAbortReason(options.signal) };\n }\n if (options.failFast === true && results[index]?.outcome !== \"pass\") {\n const result = results[index];\n if (result !== undefined && result.outcome !== \"pass\") {\n failure ??= { error: new EvalFailFastError(result.case.id, result.outcome) };\n }\n }\n } catch (error) {\n failure ??= { error };\n }\n }\n }\n\n await Promise.all(\n Array.from({ length: Math.min(workerConcurrency, options.cases.length) }, () => worker()),\n );\n if (failure !== undefined) throw failure.error;\n return results;\n}\n\nasync function runEvalCase<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n testCase: EvalCase<Input, Expected>,\n run: EvalRunContext,\n targetLimit: ConcurrencyLimiter,\n metricLimit: ConcurrencyLimiter,\n completedCases: () => number,\n): Promise<EvalCaseResult<Input, Output, Expected, Metrics>> {\n const caseStartedAt = performance.now();\n const caseSignal = createEvalCaseSignal(options.signal, options.caseTimeoutMs);\n try {\n const progress = (event: EvalProgressEvent<Input, Output, Expected>) =>\n notifyProgress(options, event);\n await progress({\n type: \"case-start\",\n suiteName: options.name,\n case: testCase,\n completedCases: completedCases(),\n totalCases: options.cases.length,\n });\n let output: Output | undefined;\n let targetError: unknown;\n let targetStatus: \"succeeded\" | \"failed\" = \"succeeded\";\n let targetDurationMs = 0;\n try {\n output = await targetLimit(async () => {\n const targetStartedAt = performance.now();\n try {\n return await (caseSignal.signal.aborted\n ? Promise.reject(caseSignal.signal.reason)\n : abortable(\n caseSignal.signal,\n Promise.resolve(\n options.target(testCase.input, testCase, { signal: caseSignal.signal }),\n ),\n ));\n } finally {\n targetDurationMs = performance.now() - targetStartedAt;\n }\n });\n } catch (error) {\n if (options.signal?.aborted === true) {\n throw suiteAbortReason(options.signal);\n }\n targetStatus = \"failed\";\n targetError = error;\n }\n await progress({\n type: \"target-complete\",\n suiteName: options.name,\n case: testCase,\n targetStatus,\n output,\n error: targetError,\n durationMs: targetDurationMs,\n completedCases: completedCases(),\n totalCases: options.cases.length,\n });\n const traceResult = await resolveTrace(options, testCase, output, targetError, targetStatus);\n\n const metrics = await Promise.all(\n options.metrics.map((metric) =>\n metricLimit(async () => {\n const metricStartedAt = performance.now();\n const outcome =\n targetStatus === \"succeeded\"\n ? await safeEvaluate(\n options.name,\n testCase,\n output as Output,\n metric,\n caseSignal.signal,\n )\n : EvalOutcome.invalid(`Target failed: ${errorMessage(targetError)}`, {\n kind: targetError instanceof EvalTimeoutError ? \"timeout\" : \"target\",\n error: targetError,\n });\n const durationMs = performance.now() - metricStartedAt;\n const reporterErrors = await reportOutcome({\n run,\n suiteName: options.name,\n testCase,\n output,\n targetError,\n targetStatus,\n metric,\n outcome,\n trace: traceResult.trace,\n traceError: traceResult.error,\n reporters: options.reporters ?? [],\n reporterErrorPolicy: options.reporterErrorPolicy ?? \"collect\",\n });\n await progress({\n type: \"metric-complete\",\n suiteName: options.name,\n case: testCase,\n metricName: metric.name,\n outcome,\n durationMs,\n completedCases: completedCases(),\n totalCases: options.cases.length,\n });\n const metricResult: EvalMetricResult = {\n metricName: metric.name,\n required: metric.required ?? true,\n outcome,\n durationMs,\n reporterErrors,\n };\n if (metric.direction !== undefined) metricResult.direction = metric.direction;\n if (metric.threshold !== undefined) metricResult.threshold = metric.threshold;\n return metricResult;\n }),\n ),\n );\n\n const scores = Object.fromEntries(\n metrics.map((metric) => [metric.metricName, metric.outcome]),\n ) as EvalCaseResult<Input, Output, Expected, Metrics>[\"scores\"];\n const result: EvalCaseResult<Input, Output, Expected, Metrics> = {\n case: testCase,\n outcome: caseOutcome(targetStatus, metrics),\n targetStatus,\n targetDurationMs,\n durationMs: performance.now() - caseStartedAt,\n metrics: metrics as EvalCaseResult<Input, Output, Expected, Metrics>[\"metrics\"],\n scores,\n usage: emptyUsageSummary(),\n };\n if (targetStatus === \"succeeded\") {\n result.output = output;\n }\n if (targetStatus === \"failed\") {\n result.targetError = targetError;\n }\n await progress({\n type: \"case-complete\",\n suiteName: options.name,\n result,\n completedCases: completedCases() + 1,\n totalCases: options.cases.length,\n });\n return result;\n } finally {\n caseSignal.dispose();\n }\n}\n\nasync function resolveTrace<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n output: Output | undefined,\n targetError: unknown,\n targetStatus: \"succeeded\" | \"failed\",\n): Promise<{ trace?: EvalTraceRef | undefined; error?: unknown }> {\n try {\n const selector = options.trace ?? defaultEvalTraceSelector;\n const trace = await selector({\n suiteName: options.name,\n case: testCase,\n output,\n targetError,\n targetStatus,\n });\n return trace === undefined ? {} : { trace };\n } catch (error) {\n return { error };\n }\n}\n\nasync function safeEvaluate<Input, Output, Expected>(\n suiteName: string,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n metric: EvalMetric<Input, Output, unknown, Expected>,\n signal: AbortSignal,\n): Promise<EvalOutcomeType> {\n if (signal.aborted) {\n return EvalOutcome.fromError(\n signal.reason,\n signal.reason instanceof EvalTimeoutError ? \"timeout\" : \"metric\",\n );\n }\n try {\n return await abortable(\n signal,\n Promise.resolve(metric.evaluate({ suiteName, case: testCase, output, signal })),\n );\n } catch (error) {\n return EvalOutcome.fromError(error, error instanceof EvalTimeoutError ? \"timeout\" : \"metric\");\n }\n}\n\nasync function reportOutcome<Input, Output, Expected>(args: {\n run: EvalRunContext;\n suiteName: string;\n testCase: EvalCase<Input, Expected>;\n output: Output | undefined;\n targetError: unknown;\n targetStatus: \"succeeded\" | \"failed\";\n metric: EvalMetric<Input, Output, unknown, Expected>;\n outcome: EvalOutcomeType;\n trace: EvalTraceRef | undefined;\n traceError: unknown;\n reporters: readonly EvalReporter<Input, Output, Expected>[];\n reporterErrorPolicy: \"collect\" | \"throw\";\n}): Promise<unknown[]> {\n const errors: unknown[] = [];\n if (args.traceError !== undefined) {\n errors.push(args.traceError);\n }\n for (const reporter of args.reporters) {\n try {\n await reporter.report({\n run: args.run,\n suiteName: args.suiteName,\n case: args.testCase,\n output: args.output,\n targetError: args.targetError,\n targetStatus: args.targetStatus,\n trace: args.trace,\n metric: args.metric,\n outcome: args.outcome,\n });\n } catch (error) {\n errors.push(error);\n }\n }\n throwReporterErrors(\"report\", errors, args.reporterErrorPolicy);\n return errors;\n}\n\nfunction resolveRun<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n startedAtMs: number,\n): EvalRunContext {\n const id = options.run?.id ?? globalThis.crypto.randomUUID();\n if (id.trim().length === 0 || id.length > 128) {\n throw new TypeError(\"Evaluation run id must contain 1 to 128 characters\");\n }\n for (const [label, value] of [\n [\"dataset name\", options.run?.datasetName],\n [\"dataset version\", options.run?.datasetVersion],\n ] as const) {\n if (value !== undefined && (value.trim().length === 0 || value.length > 256)) {\n throw new TypeError(`Evaluation run ${label} must contain 1 to 256 characters`);\n }\n }\n const run: EvalRunContext = {\n id,\n startedAt: new Date(startedAtMs).toISOString(),\n };\n if (options.run?.datasetName !== undefined) run.datasetName = options.run.datasetName;\n if (options.run?.datasetVersion !== undefined) run.datasetVersion = options.run.datasetVersion;\n if (options.run?.promptRef !== undefined) run.promptRef = options.run.promptRef;\n if (options.run?.metadata !== undefined) run.metadata = options.run.metadata;\n return run;\n}\n\nasync function notifyRunStart<Input, Output, Expected>(\n reporters: readonly EvalReporter<Input, Output, Expected>[],\n args: EvalRunStartArgs,\n errorPolicy: \"collect\" | \"throw\",\n): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of reporters) {\n if (reporter.onRunStart === undefined) continue;\n try {\n await reporter.onRunStart(args);\n } catch (error) {\n errors.push(error);\n }\n }\n throwReporterErrors(\"onRunStart\", errors, errorPolicy);\n return errors;\n}\n\nasync function notifyRunEnd<Input, Output, Expected>(\n reporters: readonly EvalReporter<Input, Output, Expected>[],\n args: EvalRunEndArgs,\n errorPolicy: \"collect\" | \"throw\" = \"collect\",\n): Promise<unknown[]> {\n const errors: unknown[] = [];\n for (const reporter of reporters) {\n if (reporter.onRunEnd === undefined) continue;\n try {\n await reporter.onRunEnd(args);\n } catch (error) {\n errors.push(error);\n }\n }\n throwReporterErrors(\"onRunEnd\", errors, errorPolicy);\n return errors;\n}\n\nfunction throwReporterErrors(\n phase: string,\n errors: readonly unknown[],\n errorPolicy: \"collect\" | \"throw\",\n): void {\n if (errorPolicy === \"throw\" && errors.length > 0) {\n throw new EvalReporterDispatchError(phase, errors);\n }\n}\n\nfunction countMetricOutcomes(\n results: Array<EvalCaseResult<unknown, unknown, unknown>>,\n): EvalTotals {\n const totals = emptyTotals();\n for (const result of results) {\n for (const metric of result.metrics) {\n totals.total += 1;\n totals[statusKey(metric.outcome.outcome)] += 1;\n }\n }\n return totals;\n}\n\nfunction countCaseOutcomes(results: Array<EvalCaseResult<unknown, unknown, unknown>>): EvalTotals {\n const totals = emptyTotals();\n for (const result of results) {\n totals.total += 1;\n totals[statusKey(result.outcome)] += 1;\n }\n return totals;\n}\n\nfunction emptyTotals(): EvalTotals {\n return { total: 0, passed: 0, failed: 0, invalid: 0 };\n}\n\nfunction emptyUsageSummary() {\n return {\n target: UsageValue.empty(),\n evaluation: UsageValue.empty(),\n total: UsageValue.empty(),\n };\n}\n\nfunction statusKey(status: \"pass\" | \"fail\" | \"invalid\"): \"passed\" | \"failed\" | \"invalid\" {\n if (status === \"pass\") return \"passed\";\n if (status === \"fail\") return \"failed\";\n return \"invalid\";\n}\n\nfunction caseOutcome(\n targetStatus: \"succeeded\" | \"failed\",\n metrics: EvalMetricResult[],\n): \"pass\" | \"fail\" | \"invalid\" {\n if (targetStatus === \"failed\") return \"invalid\";\n const required = metrics.filter((metric) => metric.required);\n if (required.some((metric) => metric.outcome.outcome === \"invalid\")) return \"invalid\";\n if (required.some((metric) => metric.outcome.outcome === \"fail\")) return \"fail\";\n return \"pass\";\n}\n\nasync function aggregateResult<\n Input,\n Output,\n Expected,\n Metrics extends readonly EvalMetric<Input, Output, unknown, Expected, string>[],\n>(\n options: RunEvalSuiteOptions<Input, Output, Expected, Metrics>,\n results: Array<EvalCaseResult<Input, Output, Expected, Metrics>>,\n): Promise<{\n metrics: EvalTotals;\n cases: EvalTotals;\n usage: { target: Usage; evaluation: Usage; total: Usage };\n cost?: EvalCostSummary | undefined;\n}> {\n let targetUsage = UsageValue.empty();\n let evaluationUsage = UsageValue.empty();\n let targetCost = 0;\n let evaluationCost = 0;\n\n for (const result of results) {\n let caseTargetUsage = UsageValue.empty();\n let caseEvaluationUsage = UsageValue.empty();\n let caseTargetCost = 0;\n let caseEvaluationCost = 0;\n if (result.targetStatus === \"succeeded\") {\n const usage = await resolveTargetUsage(options, result.case, result.output as Output);\n if (usage !== undefined) {\n caseTargetUsage = usage;\n targetUsage = UsageValue.add(targetUsage, usage);\n if (options.cost !== undefined) {\n caseTargetCost = await calculateCost(\n options.cost.calculate({\n kind: \"target\",\n suiteName: options.name,\n case: result.case,\n output: result.output as Output,\n usage,\n }),\n );\n targetCost += caseTargetCost;\n }\n }\n }\n for (const metricResult of result.metrics) {\n const usage = metricResult.outcome.usage;\n if (usage === undefined) continue;\n assertUsage(usage, `Evaluation usage for metric ${metricResult.metricName}`);\n caseEvaluationUsage = UsageValue.add(caseEvaluationUsage, usage);\n evaluationUsage = UsageValue.add(evaluationUsage, usage);\n if (options.cost !== undefined && result.targetStatus === \"succeeded\") {\n const metric = options.metrics.find(\n (candidate) => candidate.name === metricResult.metricName,\n );\n if (metric !== undefined) {\n const metricCost = await calculateCost(\n options.cost.calculate({\n kind: \"evaluation\",\n suiteName: options.name,\n case: result.case,\n output: result.output as Output,\n metric,\n usage,\n }),\n );\n metricResult.cost = metricCost;\n caseEvaluationCost += metricCost;\n evaluationCost += metricCost;\n }\n }\n }\n result.usage = {\n target: caseTargetUsage,\n evaluation: caseEvaluationUsage,\n total: UsageValue.add(caseTargetUsage, caseEvaluationUsage),\n };\n if (options.cost !== undefined) {\n result.cost = {\n currency: options.cost.currency,\n target: caseTargetCost,\n evaluation: caseEvaluationCost,\n total: caseTargetCost + caseEvaluationCost,\n };\n }\n }\n\n const usage = {\n target: targetUsage,\n evaluation: evaluationUsage,\n total: UsageValue.add(targetUsage, evaluationUsage),\n };\n const aggregates: {\n metrics: EvalTotals;\n cases: EvalTotals;\n usage: typeof usage;\n cost?: EvalCostSummary | undefined;\n } = {\n metrics: countMetricOutcomes(results),\n cases: countCaseOutcomes(results),\n usage,\n };\n if (options.cost !== undefined) {\n aggregates.cost = {\n currency: options.cost.currency,\n target: targetCost,\n evaluation: evaluationCost,\n total: targetCost + evaluationCost,\n };\n }\n return aggregates;\n}\n\nasync function resolveTargetUsage<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n testCase: EvalCase<Input, Expected>,\n output: Output,\n): Promise<Usage | undefined> {\n const usage =\n options.targetUsage === undefined\n ? usageFromOutput(output)\n : await options.targetUsage({\n suiteName: options.name,\n case: testCase,\n output,\n signal: new AbortController().signal,\n });\n if (usage !== undefined) assertUsage(usage, `Target usage for case ${testCase.id}`);\n return usage;\n}\n\nfunction usageFromOutput(output: unknown): Usage | undefined {\n if (typeof output !== \"object\" || output === null || !(\"usage\" in output)) return undefined;\n return (output as { usage?: Usage | undefined }).usage;\n}\n\nfunction assertUsage(usage: Usage, label: string): void {\n for (const [key, value] of Object.entries(usage)) {\n if (key === \"details\") continue;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new TypeError(`${label} must contain finite, non-negative token counts`);\n }\n }\n}\n\nasync function calculateCost(value: number | Promise<number>): Promise<number> {\n const cost = await value;\n if (!Number.isFinite(cost) || cost < 0) {\n throw new TypeError(\"Evaluation cost calculator must return a finite, non-negative number\");\n }\n return cost;\n}\n\nfunction validateSuiteOptions<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): void {\n if (options.name.trim().length === 0) {\n throw new TypeError(\"Evaluation suite name must not be empty\");\n }\n if (options.cases.length === 0) {\n throw new TypeError(\"Evaluation suite must contain at least one case\");\n }\n if (options.metrics.length === 0) {\n throw new TypeError(\"Evaluation suite must contain at least one metric\");\n }\n for (const testCase of options.cases) {\n if (testCase.id.trim().length === 0) {\n throw new TypeError(\"Evaluation case id must not be empty\");\n }\n }\n for (const metric of options.metrics) {\n if (metric.name.trim().length === 0) {\n throw new TypeError(\"Evaluation metric name must not be empty\");\n }\n }\n assertUnique(\n options.cases.map((testCase) => testCase.id),\n \"Evaluation case id\",\n );\n assertUnique(\n options.metrics.map((metric) => metric.name),\n \"Evaluation metric name\",\n );\n if (options.cost !== undefined && options.cost.currency.trim().length === 0) {\n throw new TypeError(\"Evaluation cost currency must not be empty\");\n }\n for (const [label, value] of [\n [\"concurrency\", options.concurrency],\n [\"targetConcurrency\", options.targetConcurrency],\n [\"metricConcurrency\", options.metricConcurrency],\n ] as const) {\n if (value !== undefined && (!Number.isSafeInteger(value) || value < 1)) {\n throw new RangeError(`Evaluation ${label} must be a positive integer`);\n }\n }\n if (\n options.caseTimeoutMs !== undefined &&\n (!Number.isSafeInteger(options.caseTimeoutMs) || options.caseTimeoutMs < 1)\n ) {\n throw new RangeError(\"Evaluation caseTimeoutMs must be a positive integer\");\n }\n if (options.shard !== undefined) {\n if (!Number.isSafeInteger(options.shard.count) || options.shard.count < 1) {\n throw new RangeError(\"Evaluation shard count must be a positive integer\");\n }\n if (\n !Number.isSafeInteger(options.shard.index) ||\n options.shard.index < 0 ||\n options.shard.index >= options.shard.count\n ) {\n throw new RangeError(\"Evaluation shard index must be between 0 and count - 1\");\n }\n }\n}\n\nfunction assertUnique(values: string[], label: string): void {\n const seen = new Set<string>();\n for (const value of values) {\n if (seen.has(value)) throw new TypeError(`${label} must be unique: ${value}`);\n seen.add(value);\n }\n}\n\nfunction selectCases<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n): readonly EvalCase<Input, Expected>[] {\n const requested = options.caseIds === undefined ? undefined : new Set(options.caseIds);\n if (requested !== undefined) {\n assertUnique([...options.caseIds!], \"Evaluation selected case id\");\n const available = new Set(options.cases.map((testCase) => testCase.id));\n for (const id of requested) {\n if (!available.has(id))\n throw new TypeError(`Evaluation selected case id was not found: ${id}`);\n }\n }\n const filtered = options.cases.filter(\n (testCase, index) =>\n (requested === undefined || requested.has(testCase.id)) &&\n (options.caseFilter === undefined || options.caseFilter(testCase, index)),\n );\n if (options.shard === undefined) return filtered;\n return filtered.filter((_, index) => index % options.shard!.count === options.shard!.index);\n}\n\nasync function notifyProgress<Input, Output, Expected>(\n options: RunEvalSuiteOptions<Input, Output, Expected>,\n event: EvalProgressEvent<Input, Output, Expected>,\n): Promise<void> {\n await options.onProgress?.(event);\n}\n\nfunction isAborted(signal: AbortSignal | undefined): boolean {\n return signal?.aborted === true;\n}\n\nfunction suiteAbortReason(signal: AbortSignal | undefined): unknown {\n return signal?.reason === undefined ? new EvalAbortError() : signal.reason;\n}\n"],"mappings":"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","names":["usage"]}
@@ -15,7 +15,7 @@ var EvalAbortError = class extends Error {
15
15
  };
16
16
  function createEvalCaseSignal(parent, timeoutMs) {
17
17
  const controller = new AbortController();
18
- const abortFromParent = () => controller.abort(parent?.reason ?? new EvalAbortError());
18
+ const abortFromParent = () => controller.abort(parent === void 0 ? new EvalAbortError() : abortReason(parent));
19
19
  if (parent?.aborted === true) abortFromParent();
20
20
  else parent?.addEventListener("abort", abortFromParent, { once: true });
21
21
  const timeout = timeoutMs === void 0 ? void 0 : setTimeout(() => controller.abort(new EvalTimeoutError(timeoutMs)), timeoutMs);
@@ -27,10 +27,43 @@ function createEvalCaseSignal(parent, timeoutMs) {
27
27
  }
28
28
  };
29
29
  }
30
+ function composeEvalSignals(caseSignal, requestSignal) {
31
+ const signals = [.../* @__PURE__ */ new Set([caseSignal, requestSignal])].filter(
32
+ (signal) => signal !== void 0
33
+ );
34
+ if (signals.length < 2) return { signal: signals[0], dispose() {
35
+ } };
36
+ const aborted = signals.find((signal) => signal.aborted);
37
+ if (aborted !== void 0) return { signal: aborted, dispose() {
38
+ } };
39
+ const controller = new AbortController();
40
+ const links = /* @__PURE__ */ new Map();
41
+ const dispose = () => {
42
+ for (const [signal, listener] of links) signal.removeEventListener("abort", listener);
43
+ links.clear();
44
+ };
45
+ for (const signal of signals) {
46
+ const listener = () => {
47
+ controller.abort(abortReason(signal));
48
+ dispose();
49
+ };
50
+ links.set(signal, listener);
51
+ signal.addEventListener("abort", listener, { once: true });
52
+ }
53
+ return { signal: controller.signal, dispose };
54
+ }
30
55
  function abortable(signal, operation) {
31
- if (signal.aborted) return Promise.reject(abortReason(signal));
56
+ if (signal === void 0) return operation;
57
+ if (signal.aborted) {
58
+ void operation.catch(() => {
59
+ });
60
+ return Promise.reject(abortReason(signal));
61
+ }
32
62
  return new Promise((resolve, reject) => {
33
- const onAbort = () => reject(abortReason(signal));
63
+ const onAbort = () => {
64
+ signal.removeEventListener("abort", onAbort);
65
+ reject(abortReason(signal));
66
+ };
34
67
  signal.addEventListener("abort", onAbort, { once: true });
35
68
  operation.then(
36
69
  (value) => {
@@ -61,14 +94,15 @@ function createConcurrencyLimiter(concurrency) {
61
94
  };
62
95
  }
63
96
  function abortReason(signal) {
64
- return signal.reason ?? new EvalAbortError();
97
+ return signal.reason === void 0 ? new EvalAbortError() : signal.reason;
65
98
  }
66
99
 
67
100
  export {
68
101
  EvalTimeoutError,
69
102
  EvalAbortError,
70
103
  createEvalCaseSignal,
104
+ composeEvalSignals,
71
105
  abortable,
72
106
  createConcurrencyLimiter
73
107
  };
74
- //# sourceMappingURL=chunk-JMMZICU7.js.map
108
+ //# sourceMappingURL=chunk-4OSA3MMA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/evals/execution.ts"],"sourcesContent":["export class EvalTimeoutError extends Error {\n constructor(readonly timeoutMs: number) {\n super(`Evaluation case exceeded its timeout of ${timeoutMs}ms.`);\n this.name = \"EvalTimeoutError\";\n }\n}\n\nexport class EvalAbortError extends Error {\n constructor(message = \"Evaluation run was aborted.\") {\n super(message);\n this.name = \"EvalAbortError\";\n }\n}\n\nexport type EvalCaseSignal = {\n signal: AbortSignal;\n dispose(): void;\n};\n\nexport function createEvalCaseSignal(\n parent: AbortSignal | undefined,\n timeoutMs: number | undefined,\n): EvalCaseSignal {\n const controller = new AbortController();\n const abortFromParent = () =>\n controller.abort(parent === undefined ? new EvalAbortError() : abortReason(parent));\n if (parent?.aborted === true) abortFromParent();\n else parent?.addEventListener(\"abort\", abortFromParent, { once: true });\n const timeout =\n timeoutMs === undefined\n ? undefined\n : setTimeout(() => controller.abort(new EvalTimeoutError(timeoutMs)), timeoutMs);\n return {\n signal: controller.signal,\n dispose() {\n if (timeout !== undefined) clearTimeout(timeout);\n parent?.removeEventListener(\"abort\", abortFromParent);\n },\n };\n}\n\nexport type EvalInvocationSignal = {\n signal: AbortSignal | undefined;\n dispose(): void;\n};\n\nexport function composeEvalSignals(\n caseSignal: AbortSignal | undefined,\n requestSignal: AbortSignal | undefined,\n): EvalInvocationSignal {\n const signals = [...new Set([caseSignal, requestSignal])].filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n if (signals.length < 2) return { signal: signals[0], dispose() {} };\n const aborted = signals.find((signal) => signal.aborted);\n if (aborted !== undefined) return { signal: aborted, dispose() {} };\n\n const controller = new AbortController();\n const links = new Map<AbortSignal, () => void>();\n const dispose = () => {\n for (const [signal, listener] of links) signal.removeEventListener(\"abort\", listener);\n links.clear();\n };\n for (const signal of signals) {\n const listener = () => {\n controller.abort(abortReason(signal));\n dispose();\n };\n links.set(signal, listener);\n signal.addEventListener(\"abort\", listener, { once: true });\n }\n return { signal: controller.signal, dispose };\n}\n\nexport function abortable<T>(signal: AbortSignal | undefined, operation: Promise<T>): Promise<T> {\n if (signal === undefined) return operation;\n if (signal.aborted) {\n void operation.catch(() => {});\n return Promise.reject(abortReason(signal));\n }\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(abortReason(signal));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n operation.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n\nexport type ConcurrencyLimiter = <T>(operation: () => Promise<T>) => Promise<T>;\n\nexport function createConcurrencyLimiter(concurrency: number): ConcurrencyLimiter {\n let active = 0;\n const waiting: Array<() => void> = [];\n return async <T>(operation: () => Promise<T>): Promise<T> => {\n if (active >= concurrency) {\n await new Promise<void>((resolve) => waiting.push(resolve));\n }\n active += 1;\n try {\n return await operation();\n } finally {\n active -= 1;\n waiting.shift()?.();\n }\n };\n}\n\nfunction abortReason(signal: AbortSignal): unknown {\n return signal.reason === undefined ? new EvalAbortError() : signal.reason;\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  attachPreparedToolOwner,
3
3
  preparedToolInput,
4
4
  withoutPreparedToolInput
5
- } from "./chunk-647TQE3E.js";
5
+ } from "./chunk-5BO4OTTK.js";
6
6
  import {
7
7
  assertToolApprovalRequirement
8
8
  } from "./chunk-YZVFIW5D.js";
@@ -55,4 +55,4 @@ function snapshotApprovalRequirement(requirement) {
55
55
  export {
56
56
  createTool
57
57
  };
58
- //# sourceMappingURL=chunk-Y365ABZY.js.map
58
+ //# sourceMappingURL=chunk-4WSICA6D.js.map
@@ -7,9 +7,9 @@ var JSON_SCHEMA_TARGET = "draft-2020-12";
7
7
  function tryToProviderJsonSchemaFromStandardSchema(schema) {
8
8
  const props = schema["~standard"];
9
9
  if (props.vendor === "zod") {
10
- const jsonSchema2 = toProviderZodJsonSchema(schema);
11
- completeStrictObjectRefinements(jsonSchema2);
12
- return { jsonSchema: jsonSchema2 };
10
+ return {
11
+ jsonSchema: toProviderJsonSchemaShape(toProviderZodJsonSchema(schema))
12
+ };
13
13
  }
14
14
  const jsonSchema = props.jsonSchema;
15
15
  if (typeof jsonSchema === "object" && jsonSchema !== null) {
@@ -85,10 +85,62 @@ async function valibotToProviderJsonSchema(schema) {
85
85
  return toProviderJsonSchemaShape(jsonSchema);
86
86
  }
87
87
  function toProviderJsonSchemaShape(jsonSchema) {
88
- const { $schema: _schema, ...providerSchema } = jsonSchema;
88
+ const providerSchema = copyProviderSchema(jsonSchema);
89
89
  completeStrictObjectRefinements(providerSchema);
90
90
  return providerSchema;
91
91
  }
92
+ function copyProviderSchema(source) {
93
+ if (typeof source !== "object" || source === null || Array.isArray(source)) {
94
+ throw new TypeError("Provider JSON schema must be a plain or null-prototype record.");
95
+ }
96
+ return copyJsonData(source, /* @__PURE__ */ new WeakSet(), true);
97
+ }
98
+ function copyJsonData(value, ancestors, omitRootSchema = false) {
99
+ if (value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value)) {
100
+ return value;
101
+ }
102
+ if (typeof value !== "object") {
103
+ throw new TypeError("Provider JSON schema must contain only finite JSON data.");
104
+ }
105
+ if (ancestors.has(value)) {
106
+ throw new TypeError("Provider JSON schema must not contain cycles.");
107
+ }
108
+ ancestors.add(value);
109
+ if (Array.isArray(value)) {
110
+ const copy2 = [];
111
+ for (let index = 0; index < value.length; index++) {
112
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
113
+ if (descriptor === void 0 || !("value" in descriptor)) {
114
+ throw new TypeError(
115
+ "Provider JSON schema arrays must be dense data arrays without accessors."
116
+ );
117
+ }
118
+ copy2.push(copyJsonData(descriptor.value, ancestors));
119
+ }
120
+ ancestors.delete(value);
121
+ return copy2;
122
+ }
123
+ const prototype = Object.getPrototypeOf(value);
124
+ if (prototype !== Object.prototype && prototype !== null) {
125
+ throw new TypeError("Provider JSON schema must contain only plain or null-prototype records.");
126
+ }
127
+ const copy = {};
128
+ for (const key of Object.keys(value)) {
129
+ if (omitRootSchema && key === "$schema") continue;
130
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
131
+ if (descriptor === void 0 || !("value" in descriptor)) {
132
+ throw new TypeError("Provider JSON schema records must not contain enumerable accessors.");
133
+ }
134
+ Object.defineProperty(copy, key, {
135
+ value: copyJsonData(descriptor.value, ancestors),
136
+ enumerable: true,
137
+ configurable: true,
138
+ writable: true
139
+ });
140
+ }
141
+ ancestors.delete(value);
142
+ return copy;
143
+ }
92
144
  function completeStrictObjectRefinements(jsonSchema) {
93
145
  completeSchemaNode(jsonSchema);
94
146
  }
@@ -141,4 +193,4 @@ export {
141
193
  tryToProviderJsonSchemaFromStandardSchema,
142
194
  toProviderJsonSchemaFromStandardSchema
143
195
  };
144
- //# sourceMappingURL=chunk-YOLOFTAY.js.map
196
+ //# sourceMappingURL=chunk-57AUTEQ6.js.map