@anvia/core 1.0.0-rc.2 → 1.0.0-rc.4

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 (96) hide show
  1. package/README.md +77 -10
  2. package/dist/agent/index.d.ts +20 -13
  3. package/dist/agent/index.js +36 -15
  4. package/dist/{agent-yBG8e9Jj.d.ts → agent-CXScUOpX.d.ts} +12 -15
  5. package/dist/chunk-3RM57ZT2.js +31 -0
  6. package/dist/chunk-3RM57ZT2.js.map +1 -0
  7. package/dist/{chunk-DBSCKTUL.js → chunk-5GXSQYQT.js} +1744 -838
  8. package/dist/chunk-5GXSQYQT.js.map +1 -0
  9. package/dist/{chunk-KIDGIJM7.js → chunk-AZB6N7P4.js} +94 -86
  10. package/dist/chunk-AZB6N7P4.js.map +1 -0
  11. package/dist/{chunk-KR3RCCHJ.js → chunk-D2ECOWN5.js} +26 -11
  12. package/dist/chunk-D2ECOWN5.js.map +1 -0
  13. package/dist/{chunk-EINTGEGY.js → chunk-FXAIYTRE.js} +101 -26
  14. package/dist/chunk-FXAIYTRE.js.map +1 -0
  15. package/dist/{chunk-FMHLROPQ.js → chunk-GQL5KRAH.js} +13 -33
  16. package/dist/chunk-GQL5KRAH.js.map +1 -0
  17. package/dist/{chunk-D37WMSP6.js → chunk-J2W63PJI.js} +50 -10
  18. package/dist/chunk-J2W63PJI.js.map +1 -0
  19. package/dist/{chunk-OJH6HWHX.js → chunk-KFR4CDGK.js} +8 -2
  20. package/dist/chunk-KFR4CDGK.js.map +1 -0
  21. package/dist/{chunk-TIZYTPJO.js → chunk-PK5LKOFL.js} +33 -2
  22. package/dist/chunk-PK5LKOFL.js.map +1 -0
  23. package/dist/{chunk-XKYYBABH.js → chunk-RFHQY2IO.js} +2 -2
  24. package/dist/chunk-TRQ3XRFD.js +54 -0
  25. package/dist/chunk-TRQ3XRFD.js.map +1 -0
  26. package/dist/{chunk-CWM7B2OO.js → chunk-VKYZZXP5.js} +10 -2
  27. package/dist/chunk-VKYZZXP5.js.map +1 -0
  28. package/dist/{chunk-77AIYARB.js → chunk-XYTPYUGB.js} +29 -19
  29. package/dist/chunk-XYTPYUGB.js.map +1 -0
  30. package/dist/{chunk-4WI3VGZK.js → chunk-ZCPOIDAQ.js} +3 -3
  31. package/dist/{client-B8DT1vUG.d.ts → client-DvUatElp.d.ts} +4 -3
  32. package/dist/completion/index.d.ts +3 -3
  33. package/dist/completion/index.js +2 -2
  34. package/dist/documents/index.d.ts +34 -0
  35. package/dist/documents/index.js +315 -0
  36. package/dist/documents/index.js.map +1 -0
  37. package/dist/{dynamic-tools-KwEGRbHp.d.ts → dynamic-tools-AEBOTgu1.d.ts} +3 -3
  38. package/dist/embeddings/index.js +2 -1
  39. package/dist/evals/index.d.ts +19 -11
  40. package/dist/evals/index.js +88 -55
  41. package/dist/evals/index.js.map +1 -1
  42. package/dist/extractor/index.d.ts +1 -1
  43. package/dist/extractor/index.js +3 -3
  44. package/dist/guardrails/index.d.ts +6 -129
  45. package/dist/guardrails/index.js +1 -1
  46. package/dist/image-generation/index.d.ts +1 -1
  47. package/dist/index.d.ts +15 -14
  48. package/dist/index.js +49 -28
  49. package/dist/interactions-csssHYcN.d.ts +174 -0
  50. package/dist/internal/agent.d.ts +18 -22
  51. package/dist/internal/agent.js +45 -14
  52. package/dist/internal/agent.js.map +1 -1
  53. package/dist/mcp/index.d.ts +4 -4
  54. package/dist/mcp/index.js +6 -5
  55. package/dist/memory/index.d.ts +3 -3
  56. package/dist/memory/index.js +3 -3
  57. package/dist/{message-schema-Cn7ezRfJ.d.ts → message-schema-B2M7AYzR.d.ts} +1 -1
  58. package/dist/observability/index.d.ts +8 -7
  59. package/dist/observability/index.js +3 -3
  60. package/dist/pipeline/index.d.ts +18 -18
  61. package/dist/pipeline/index.js +20 -29
  62. package/dist/pipeline/index.js.map +1 -1
  63. package/dist/skills/index.d.ts +4 -4
  64. package/dist/skills/index.js +6 -5
  65. package/dist/speech-generation/index.d.ts +1 -1
  66. package/dist/text-C_6eKrbC.d.ts +32 -0
  67. package/dist/{think-tool-6H2QNQzQ.d.ts → think-tool-D8frXxwV.d.ts} +16 -2
  68. package/dist/tool/index.d.ts +6 -6
  69. package/dist/tool/index.js +9 -4
  70. package/dist/{tool--Mz4v1eL.d.ts → tool-r62gf3QY.d.ts} +3 -2
  71. package/dist/transcription/index.d.ts +1 -1
  72. package/dist/{types-Dld1TpWj.d.ts → types-C3gv9EX6.d.ts} +1 -1
  73. package/dist/{types-3x3mOLHU.d.ts → types-CElwurHZ.d.ts} +56 -35
  74. package/dist/types-CIPaIbZo.d.ts +105 -0
  75. package/dist/{types-CQ_ioXWK.d.ts → types-D9rKQ_as.d.ts} +24 -2
  76. package/dist/{types-BVzM4RsC.d.ts → types-DbolvLtZ.d.ts} +1 -1
  77. package/dist/{types-DiJqJejp.d.ts → types-RT3cuyRk.d.ts} +1 -1
  78. package/dist/vector-store/index.d.ts +7 -6
  79. package/dist/vector-store/index.js +6 -3
  80. package/package.json +6 -6
  81. package/dist/chunk-77AIYARB.js.map +0 -1
  82. package/dist/chunk-CWM7B2OO.js.map +0 -1
  83. package/dist/chunk-D37WMSP6.js.map +0 -1
  84. package/dist/chunk-DBSCKTUL.js.map +0 -1
  85. package/dist/chunk-EINTGEGY.js.map +0 -1
  86. package/dist/chunk-FMHLROPQ.js.map +0 -1
  87. package/dist/chunk-KIDGIJM7.js.map +0 -1
  88. package/dist/chunk-KR3RCCHJ.js.map +0 -1
  89. package/dist/chunk-OJH6HWHX.js.map +0 -1
  90. package/dist/chunk-TIZYTPJO.js.map +0 -1
  91. package/dist/loaders/index.d.ts +0 -87
  92. package/dist/loaders/index.js +0 -299
  93. package/dist/loaders/index.js.map +0 -1
  94. package/dist/middleware-C7PdmKF7.d.ts +0 -56
  95. /package/dist/{chunk-XKYYBABH.js.map → chunk-RFHQY2IO.js.map} +0 -0
  96. /package/dist/{chunk-4WI3VGZK.js.map → chunk-ZCPOIDAQ.js.map} +0 -0
@@ -0,0 +1,315 @@
1
+ // src/documents/chunk-text.ts
2
+ function chunkText(options) {
3
+ const validated = validateOptions(options);
4
+ if (validated.text.length === 0) {
5
+ return [];
6
+ }
7
+ if (validated.strategy === "fixed") {
8
+ return chunkFixed(validated.text, validated.maxSize, validated.overlap);
9
+ }
10
+ const ranges = resolveRecursiveRanges(
11
+ validated.text,
12
+ { start: 0, end: validated.text.length },
13
+ validated.maxSize,
14
+ validated.separators
15
+ );
16
+ return applyRecursiveOverlap(validated.text, ranges, validated.maxSize, validated.overlap);
17
+ }
18
+ function validateOptions(options) {
19
+ if (typeof options !== "object" || options === null) {
20
+ throw new TypeError("chunkText options must be an object");
21
+ }
22
+ const value = options;
23
+ if (typeof value.text !== "string") {
24
+ throw new TypeError("chunkText text must be a string");
25
+ }
26
+ if (!Number.isSafeInteger(value.maxSize) || value.maxSize <= 0) {
27
+ throw new RangeError("chunkText maxSize must be a positive safe integer");
28
+ }
29
+ const maxSize = value.maxSize;
30
+ const overlap = value.overlap === void 0 ? 0 : value.overlap;
31
+ if (!Number.isSafeInteger(overlap) || overlap < 0 || overlap >= maxSize) {
32
+ throw new RangeError(
33
+ "chunkText overlap must be a non-negative safe integer smaller than maxSize"
34
+ );
35
+ }
36
+ if (value.strategy === "fixed") {
37
+ if ("separators" in value) {
38
+ throw new TypeError("chunkText fixed strategy does not accept separators");
39
+ }
40
+ return {
41
+ text: value.text,
42
+ strategy: "fixed",
43
+ maxSize,
44
+ overlap
45
+ };
46
+ }
47
+ if (value.strategy !== "recursive") {
48
+ throw new TypeError('chunkText strategy must be either "fixed" or "recursive"');
49
+ }
50
+ if (!Array.isArray(value.separators) || value.separators.length === 0) {
51
+ throw new TypeError("chunkText recursive separators must be a non-empty array");
52
+ }
53
+ const separators = value.separators;
54
+ const seen = /* @__PURE__ */ new Set();
55
+ for (const separator of separators) {
56
+ if (typeof separator !== "string" || separator.length === 0) {
57
+ throw new TypeError("chunkText recursive separators must contain non-empty strings");
58
+ }
59
+ if (seen.has(separator)) {
60
+ throw new TypeError("chunkText recursive separators must not contain duplicates");
61
+ }
62
+ seen.add(separator);
63
+ }
64
+ return {
65
+ text: value.text,
66
+ strategy: "recursive",
67
+ maxSize,
68
+ overlap,
69
+ separators
70
+ };
71
+ }
72
+ function chunkFixed(text, maxSize, overlap) {
73
+ const chunks = [];
74
+ let start = 0;
75
+ while (start < text.length) {
76
+ const end = Math.min(start + maxSize, text.length);
77
+ chunks.push(createChunk(text, chunks.length, start, end));
78
+ if (end === text.length) {
79
+ break;
80
+ }
81
+ start = end - overlap;
82
+ }
83
+ return chunks;
84
+ }
85
+ function resolveRecursiveRanges(text, initialRange, maxSize, separators) {
86
+ const resolved = [];
87
+ const pending = [
88
+ { range: initialRange, separatorIndex: 0 }
89
+ ];
90
+ while (pending.length > 0) {
91
+ const current = pending.pop();
92
+ if (current === void 0) {
93
+ break;
94
+ }
95
+ if (current.range.end - current.range.start <= maxSize) {
96
+ resolved.push(current.range);
97
+ continue;
98
+ }
99
+ let pieces;
100
+ let nextSeparatorIndex = separators.length;
101
+ for (let index = current.separatorIndex; index < separators.length; index += 1) {
102
+ const candidate = splitAfterSeparator(text, current.range, separators[index]);
103
+ if (candidate.length > 1) {
104
+ pieces = candidate;
105
+ nextSeparatorIndex = index + 1;
106
+ break;
107
+ }
108
+ }
109
+ if (pieces === void 0) {
110
+ resolved.push(...hardSplit(current.range, maxSize));
111
+ continue;
112
+ }
113
+ for (let index = pieces.length - 1; index >= 0; index -= 1) {
114
+ pending.push({ range: pieces[index], separatorIndex: nextSeparatorIndex });
115
+ }
116
+ }
117
+ return resolved;
118
+ }
119
+ function splitAfterSeparator(text, range, separator) {
120
+ const ranges = [];
121
+ let start = range.start;
122
+ let searchFrom = range.start;
123
+ while (searchFrom < range.end) {
124
+ const separatorStart = text.indexOf(separator, searchFrom);
125
+ if (separatorStart < 0 || separatorStart + separator.length > range.end) {
126
+ break;
127
+ }
128
+ const end = separatorStart + separator.length;
129
+ if (end > start) {
130
+ ranges.push({ start, end });
131
+ }
132
+ start = end;
133
+ searchFrom = end;
134
+ }
135
+ if (start < range.end) {
136
+ ranges.push({ start, end: range.end });
137
+ }
138
+ return ranges;
139
+ }
140
+ function hardSplit(range, maxSize) {
141
+ const ranges = [];
142
+ for (let start = range.start; start < range.end; start += maxSize) {
143
+ ranges.push({ start, end: Math.min(start + maxSize, range.end) });
144
+ }
145
+ return ranges;
146
+ }
147
+ function applyRecursiveOverlap(text, ranges, maxSize, overlap) {
148
+ const boundaries = ranges.map((range) => range.end);
149
+ const chunks = [];
150
+ let start = 0;
151
+ let previousEnd = 0;
152
+ while (start < text.length) {
153
+ const limit = Math.min(start + maxSize, text.length);
154
+ const boundary = findLastBoundaryAtMost(boundaries, limit);
155
+ const end = boundary !== void 0 && boundary > previousEnd ? boundary : limit;
156
+ chunks.push(createChunk(text, chunks.length, start, end));
157
+ if (end === text.length) {
158
+ break;
159
+ }
160
+ previousEnd = end;
161
+ start = Math.max(0, end - overlap);
162
+ }
163
+ return chunks;
164
+ }
165
+ function findLastBoundaryAtMost(boundaries, limit) {
166
+ let low = 0;
167
+ let high = boundaries.length;
168
+ while (low < high) {
169
+ const middle = low + Math.floor((high - low) / 2);
170
+ if (boundaries[middle] <= limit) {
171
+ low = middle + 1;
172
+ } else {
173
+ high = middle;
174
+ }
175
+ }
176
+ return boundaries[low - 1];
177
+ }
178
+ function createChunk(text, index, start, end) {
179
+ return { index, text: text.slice(start, end), start, end };
180
+ }
181
+
182
+ // src/documents/pdf.ts
183
+ async function extractPdfText(options) {
184
+ if (typeof options !== "object" || options === null) {
185
+ throw new TypeError("extractPdfText options must be an object");
186
+ }
187
+ if (!(options.data instanceof Uint8Array)) {
188
+ throw new TypeError("extractPdfText data must be a Uint8Array");
189
+ }
190
+ if (options.abortSignal !== void 0 && !isAbortSignal(options.abortSignal)) {
191
+ throw new TypeError("extractPdfText abortSignal must be an AbortSignal");
192
+ }
193
+ const { abortSignal } = options;
194
+ abortSignal?.throwIfAborted();
195
+ const data = new Uint8Array(options.data);
196
+ const pdfjs = await import("pdfjs-dist/legacy/build/pdf.mjs");
197
+ abortSignal?.throwIfAborted();
198
+ const loadingTask = pdfjs.getDocument({ data });
199
+ let destroyPromise;
200
+ const destroy = () => {
201
+ destroyPromise ??= loadingTask.destroy();
202
+ return destroyPromise;
203
+ };
204
+ const abort = createAbortPromise(abortSignal, destroy);
205
+ return runWithCleanup(
206
+ async () => {
207
+ const document = await abort.wait(loadingTask.promise);
208
+ const pages = [];
209
+ for (let pageNumber = 1; pageNumber <= document.numPages; pageNumber += 1) {
210
+ abortSignal?.throwIfAborted();
211
+ const page = await abort.wait(document.getPage(pageNumber));
212
+ const content = await abort.wait(page.getTextContent());
213
+ pages.push({ pageNumber, text: extractPageText(content.items) });
214
+ }
215
+ return { pages };
216
+ },
217
+ async () => {
218
+ abort.dispose();
219
+ await destroy();
220
+ }
221
+ );
222
+ }
223
+ async function runWithCleanup(operation, cleanup) {
224
+ let outcome;
225
+ try {
226
+ outcome = { ok: true, value: await operation() };
227
+ } catch (error) {
228
+ outcome = { ok: false, error };
229
+ }
230
+ let cleanupError;
231
+ let cleanupFailed = false;
232
+ try {
233
+ await cleanup();
234
+ } catch (error) {
235
+ cleanupFailed = true;
236
+ cleanupError = error;
237
+ }
238
+ if (!outcome.ok) {
239
+ if (cleanupFailed) {
240
+ throw new AggregateError(
241
+ [outcome.error, cleanupError],
242
+ "PDF extraction and cleanup both failed",
243
+ { cause: outcome.error }
244
+ );
245
+ }
246
+ throw outcome.error;
247
+ }
248
+ if (cleanupFailed) {
249
+ throw cleanupError;
250
+ }
251
+ return outcome.value;
252
+ }
253
+ function isAbortSignal(value) {
254
+ if (typeof value !== "object" || value === null) {
255
+ return false;
256
+ }
257
+ const candidate = value;
258
+ return typeof candidate.aborted === "boolean" && typeof candidate.addEventListener === "function" && typeof candidate.removeEventListener === "function" && typeof candidate.throwIfAborted === "function";
259
+ }
260
+ function extractPageText(items) {
261
+ let text = "";
262
+ for (const item of items) {
263
+ if (typeof item !== "object" || item === null) {
264
+ throw new TypeError("PDF text content contains a malformed item");
265
+ }
266
+ if (!("str" in item)) {
267
+ if ("type" in item && (item.type === "beginMarkedContent" || item.type === "beginMarkedContentProps" || item.type === "endMarkedContent")) {
268
+ continue;
269
+ }
270
+ throw new TypeError("PDF text content contains an unknown non-text item");
271
+ }
272
+ if (typeof item.str !== "string") {
273
+ throw new TypeError("PDF text content item str must be a string");
274
+ }
275
+ if (!("hasEOL" in item) || typeof item.hasEOL !== "boolean") {
276
+ throw new TypeError("PDF text content item hasEOL must be a boolean");
277
+ }
278
+ text += item.str;
279
+ if (item.hasEOL) {
280
+ text += "\n";
281
+ }
282
+ }
283
+ return text;
284
+ }
285
+ function createAbortPromise(abortSignal, destroy) {
286
+ if (abortSignal === void 0) {
287
+ return {
288
+ wait: (promise) => promise,
289
+ dispose: () => void 0
290
+ };
291
+ }
292
+ let rejectAbort;
293
+ const aborted = new Promise((_resolve, reject) => {
294
+ rejectAbort = reject;
295
+ });
296
+ const onAbort = () => {
297
+ void destroy();
298
+ rejectAbort?.(
299
+ abortSignal.reason ?? new DOMException("The operation was aborted", "AbortError")
300
+ );
301
+ };
302
+ abortSignal.addEventListener("abort", onAbort, { once: true });
303
+ if (abortSignal.aborted) {
304
+ onAbort();
305
+ }
306
+ return {
307
+ wait: (promise) => Promise.race([promise, aborted]),
308
+ dispose: () => abortSignal.removeEventListener("abort", onAbort)
309
+ };
310
+ }
311
+ export {
312
+ chunkText,
313
+ extractPdfText
314
+ };
315
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/documents/chunk-text.ts","../../src/documents/pdf.ts"],"sourcesContent":["export type TextChunk = Readonly<{\n index: number;\n text: string;\n start: number;\n end: number;\n}>;\n\nexport type ChunkTextOptions =\n | Readonly<{\n text: string;\n strategy: \"fixed\";\n maxSize: number;\n overlap?: number;\n }>\n | Readonly<{\n text: string;\n strategy: \"recursive\";\n maxSize: number;\n overlap?: number;\n separators: readonly string[];\n }>;\n\ntype TextRange = Readonly<{\n start: number;\n end: number;\n}>;\n\nexport function chunkText(options: ChunkTextOptions): readonly TextChunk[] {\n const validated = validateOptions(options);\n if (validated.text.length === 0) {\n return [];\n }\n\n if (validated.strategy === \"fixed\") {\n return chunkFixed(validated.text, validated.maxSize, validated.overlap);\n }\n\n const ranges = resolveRecursiveRanges(\n validated.text,\n { start: 0, end: validated.text.length },\n validated.maxSize,\n validated.separators,\n );\n return applyRecursiveOverlap(validated.text, ranges, validated.maxSize, validated.overlap);\n}\n\nfunction validateOptions(options: ChunkTextOptions):\n | Readonly<{\n text: string;\n strategy: \"fixed\";\n maxSize: number;\n overlap: number;\n }>\n | Readonly<{\n text: string;\n strategy: \"recursive\";\n maxSize: number;\n overlap: number;\n separators: readonly string[];\n }> {\n if (typeof options !== \"object\" || options === null) {\n throw new TypeError(\"chunkText options must be an object\");\n }\n\n const value = options as unknown as Record<string, unknown>;\n if (typeof value.text !== \"string\") {\n throw new TypeError(\"chunkText text must be a string\");\n }\n if (!Number.isSafeInteger(value.maxSize) || (value.maxSize as number) <= 0) {\n throw new RangeError(\"chunkText maxSize must be a positive safe integer\");\n }\n\n const maxSize = value.maxSize as number;\n const overlap = value.overlap === undefined ? 0 : value.overlap;\n if (!Number.isSafeInteger(overlap) || (overlap as number) < 0 || (overlap as number) >= maxSize) {\n throw new RangeError(\n \"chunkText overlap must be a non-negative safe integer smaller than maxSize\",\n );\n }\n\n if (value.strategy === \"fixed\") {\n if (\"separators\" in value) {\n throw new TypeError(\"chunkText fixed strategy does not accept separators\");\n }\n return {\n text: value.text,\n strategy: \"fixed\",\n maxSize,\n overlap: overlap as number,\n };\n }\n\n if (value.strategy !== \"recursive\") {\n throw new TypeError('chunkText strategy must be either \"fixed\" or \"recursive\"');\n }\n if (!Array.isArray(value.separators) || value.separators.length === 0) {\n throw new TypeError(\"chunkText recursive separators must be a non-empty array\");\n }\n\n const separators = value.separators as unknown[];\n const seen = new Set<string>();\n for (const separator of separators) {\n if (typeof separator !== \"string\" || separator.length === 0) {\n throw new TypeError(\"chunkText recursive separators must contain non-empty strings\");\n }\n if (seen.has(separator)) {\n throw new TypeError(\"chunkText recursive separators must not contain duplicates\");\n }\n seen.add(separator);\n }\n\n return {\n text: value.text,\n strategy: \"recursive\",\n maxSize,\n overlap: overlap as number,\n separators: separators as string[],\n };\n}\n\nfunction chunkFixed(text: string, maxSize: number, overlap: number): readonly TextChunk[] {\n const chunks: TextChunk[] = [];\n let start = 0;\n\n while (start < text.length) {\n const end = Math.min(start + maxSize, text.length);\n chunks.push(createChunk(text, chunks.length, start, end));\n if (end === text.length) {\n break;\n }\n start = end - overlap;\n }\n\n return chunks;\n}\n\nfunction resolveRecursiveRanges(\n text: string,\n initialRange: TextRange,\n maxSize: number,\n separators: readonly string[],\n): readonly TextRange[] {\n const resolved: TextRange[] = [];\n const pending: Array<Readonly<{ range: TextRange; separatorIndex: number }>> = [\n { range: initialRange, separatorIndex: 0 },\n ];\n\n while (pending.length > 0) {\n const current = pending.pop();\n if (current === undefined) {\n break;\n }\n if (current.range.end - current.range.start <= maxSize) {\n resolved.push(current.range);\n continue;\n }\n\n let pieces: readonly TextRange[] | undefined;\n let nextSeparatorIndex = separators.length;\n for (let index = current.separatorIndex; index < separators.length; index += 1) {\n const candidate = splitAfterSeparator(text, current.range, separators[index] as string);\n if (candidate.length > 1) {\n pieces = candidate;\n nextSeparatorIndex = index + 1;\n break;\n }\n }\n\n if (pieces === undefined) {\n resolved.push(...hardSplit(current.range, maxSize));\n continue;\n }\n\n for (let index = pieces.length - 1; index >= 0; index -= 1) {\n pending.push({ range: pieces[index] as TextRange, separatorIndex: nextSeparatorIndex });\n }\n }\n\n return resolved;\n}\n\nfunction splitAfterSeparator(text: string, range: TextRange, separator: string): TextRange[] {\n const ranges: TextRange[] = [];\n let start = range.start;\n let searchFrom = range.start;\n\n while (searchFrom < range.end) {\n const separatorStart = text.indexOf(separator, searchFrom);\n if (separatorStart < 0 || separatorStart + separator.length > range.end) {\n break;\n }\n const end = separatorStart + separator.length;\n if (end > start) {\n ranges.push({ start, end });\n }\n start = end;\n searchFrom = end;\n }\n\n if (start < range.end) {\n ranges.push({ start, end: range.end });\n }\n return ranges;\n}\n\nfunction hardSplit(range: TextRange, maxSize: number): readonly TextRange[] {\n const ranges: TextRange[] = [];\n for (let start = range.start; start < range.end; start += maxSize) {\n ranges.push({ start, end: Math.min(start + maxSize, range.end) });\n }\n return ranges;\n}\n\nfunction applyRecursiveOverlap(\n text: string,\n ranges: readonly TextRange[],\n maxSize: number,\n overlap: number,\n): readonly TextChunk[] {\n const boundaries = ranges.map((range) => range.end);\n const chunks: TextChunk[] = [];\n let start = 0;\n let previousEnd = 0;\n\n while (start < text.length) {\n const limit = Math.min(start + maxSize, text.length);\n const boundary = findLastBoundaryAtMost(boundaries, limit);\n const end = boundary !== undefined && boundary > previousEnd ? boundary : limit;\n\n chunks.push(createChunk(text, chunks.length, start, end));\n if (end === text.length) {\n break;\n }\n previousEnd = end;\n start = Math.max(0, end - overlap);\n }\n\n return chunks;\n}\n\nfunction findLastBoundaryAtMost(boundaries: readonly number[], limit: number): number | undefined {\n let low = 0;\n let high = boundaries.length;\n while (low < high) {\n const middle = low + Math.floor((high - low) / 2);\n if ((boundaries[middle] as number) <= limit) {\n low = middle + 1;\n } else {\n high = middle;\n }\n }\n return boundaries[low - 1];\n}\n\nfunction createChunk(text: string, index: number, start: number, end: number): TextChunk {\n return { index, text: text.slice(start, end), start, end };\n}\n","export type PdfTextPage = Readonly<{\n pageNumber: number;\n text: string;\n}>;\n\nexport type ExtractPdfTextOptions = Readonly<{\n data: Uint8Array;\n abortSignal?: AbortSignal;\n}>;\n\nexport type ExtractPdfTextResult = Readonly<{\n pages: readonly PdfTextPage[];\n}>;\n\nexport async function extractPdfText(\n options: ExtractPdfTextOptions,\n): Promise<ExtractPdfTextResult> {\n if (typeof options !== \"object\" || options === null) {\n throw new TypeError(\"extractPdfText options must be an object\");\n }\n if (!(options.data instanceof Uint8Array)) {\n throw new TypeError(\"extractPdfText data must be a Uint8Array\");\n }\n if (options.abortSignal !== undefined && !isAbortSignal(options.abortSignal)) {\n throw new TypeError(\"extractPdfText abortSignal must be an AbortSignal\");\n }\n\n const { abortSignal } = options;\n abortSignal?.throwIfAborted();\n const data = new Uint8Array(options.data);\n const pdfjs = await import(\"pdfjs-dist/legacy/build/pdf.mjs\");\n abortSignal?.throwIfAborted();\n\n const loadingTask = pdfjs.getDocument({ data });\n let destroyPromise: Promise<void> | undefined;\n const destroy = (): Promise<void> => {\n destroyPromise ??= loadingTask.destroy();\n return destroyPromise;\n };\n const abort = createAbortPromise(abortSignal, destroy);\n\n return runWithCleanup(\n async () => {\n const document = await abort.wait(loadingTask.promise);\n const pages: PdfTextPage[] = [];\n for (let pageNumber = 1; pageNumber <= document.numPages; pageNumber += 1) {\n abortSignal?.throwIfAborted();\n const page = await abort.wait(document.getPage(pageNumber));\n const content = await abort.wait(page.getTextContent());\n pages.push({ pageNumber, text: extractPageText(content.items) });\n }\n return { pages };\n },\n async () => {\n abort.dispose();\n await destroy();\n },\n );\n}\n\nasync function runWithCleanup<Result>(\n operation: () => Promise<Result>,\n cleanup: () => Promise<void>,\n): Promise<Result> {\n let outcome: { ok: true; value: Result } | { ok: false; error: unknown };\n try {\n outcome = { ok: true, value: await operation() };\n } catch (error) {\n outcome = { ok: false, error };\n }\n\n let cleanupError: unknown;\n let cleanupFailed = false;\n try {\n await cleanup();\n } catch (error) {\n cleanupFailed = true;\n cleanupError = error;\n }\n\n if (!outcome.ok) {\n if (cleanupFailed) {\n throw new AggregateError(\n [outcome.error, cleanupError],\n \"PDF extraction and cleanup both failed\",\n { cause: outcome.error },\n );\n }\n throw outcome.error;\n }\n if (cleanupFailed) {\n throw cleanupError;\n }\n return outcome.value;\n}\n\nfunction isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const candidate = value as Partial<AbortSignal>;\n return (\n typeof candidate.aborted === \"boolean\" &&\n typeof candidate.addEventListener === \"function\" &&\n typeof candidate.removeEventListener === \"function\" &&\n typeof candidate.throwIfAborted === \"function\"\n );\n}\n\nfunction extractPageText(items: readonly unknown[]): string {\n let text = \"\";\n for (const item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new TypeError(\"PDF text content contains a malformed item\");\n }\n if (!(\"str\" in item)) {\n if (\n \"type\" in item &&\n (item.type === \"beginMarkedContent\" ||\n item.type === \"beginMarkedContentProps\" ||\n item.type === \"endMarkedContent\")\n ) {\n continue;\n }\n throw new TypeError(\"PDF text content contains an unknown non-text item\");\n }\n if (typeof item.str !== \"string\") {\n throw new TypeError(\"PDF text content item str must be a string\");\n }\n if (!(\"hasEOL\" in item) || typeof item.hasEOL !== \"boolean\") {\n throw new TypeError(\"PDF text content item hasEOL must be a boolean\");\n }\n text += item.str;\n if (item.hasEOL) {\n text += \"\\n\";\n }\n }\n return text;\n}\n\nfunction createAbortPromise(\n abortSignal: AbortSignal | undefined,\n destroy: () => Promise<void>,\n): {\n wait<T>(promise: Promise<T>): Promise<T>;\n dispose(): void;\n} {\n if (abortSignal === undefined) {\n return {\n wait: (promise) => promise,\n dispose: () => undefined,\n };\n }\n\n let rejectAbort: ((reason?: unknown) => void) | undefined;\n const aborted = new Promise<never>((_resolve, reject) => {\n rejectAbort = reject;\n });\n const onAbort = () => {\n void destroy();\n rejectAbort?.(\n abortSignal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\"),\n );\n };\n abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n if (abortSignal.aborted) {\n onAbort();\n }\n\n return {\n wait: (promise) => Promise.race([promise, aborted]),\n dispose: () => abortSignal.removeEventListener(\"abort\", onAbort),\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,8 +1,8 @@
1
1
  import { b as RetrySetting } from './retry-CjvSlKGW.js';
2
- import { v as ToolDefinition } from './types-CQ_ioXWK.js';
2
+ import { v as ToolDefinition } from './types-D9rKQ_as.js';
3
3
  import { V as VectorMetadata, E as EmbeddingModel, a as EmbeddedDocument } from './types-Cr4uiYo5.js';
4
- import { A as AnyTool } from './tool--Mz4v1eL.js';
5
- import { V as VectorFilter, a as VectorSearchResult, b as VectorInspectRequest, c as VectorInspectPage } from './types-Dld1TpWj.js';
4
+ import { A as AnyTool } from './tool-r62gf3QY.js';
5
+ import { V as VectorFilter, a as VectorSearchResult, b as VectorInspectRequest, c as VectorInspectPage } from './types-C3gv9EX6.js';
6
6
 
7
7
  type ToolSearchDocument<Metadata extends VectorMetadata = VectorMetadata> = {
8
8
  toolName: string;
@@ -10,7 +10,8 @@ import {
10
10
  embedTexts,
11
11
  euclideanDistance,
12
12
  manhattanDistance
13
- } from "../chunk-FMHLROPQ.js";
13
+ } from "../chunk-GQL5KRAH.js";
14
+ import "../chunk-3RM57ZT2.js";
14
15
  import "../chunk-FN7HLLAZ.js";
15
16
  export {
16
17
  angularDistance,
@@ -1,15 +1,15 @@
1
- import { U as Usage, J as JsonObject, C as CompletionModel, M as Message } from '../types-CQ_ioXWK.js';
1
+ import { U as Usage, J as JsonObject, C as CompletionModel, M as Message } from '../types-D9rKQ_as.js';
2
2
  import { Z as ZodSchema } from '../zod-schema-C7F4clpm.js';
3
- import { b as AgentApprovalRequiredResult, m as AgentResponse, o as AgentRunOptions, n as AgentResult } from '../types-3x3mOLHU.js';
3
+ import { a as AgentInteractionRequest, b as AgentInteractionResponse } from '../interactions-csssHYcN.js';
4
+ import { t as AgentSuspendedResult, j as AgentResponse, l as AgentRunOptions, k as AgentResult } from '../types-CElwurHZ.js';
4
5
  import { E as EmbeddingModel } from '../types-Cr4uiYo5.js';
5
6
  import '../model-call-options-CZkSw_xN.js';
6
7
  import 'zod';
7
- import '../retry-CjvSlKGW.js';
8
- import '../guardrails/index.js';
9
8
  import '../type-utils-CtHVDRn_.js';
10
- import '../types-BVzM4RsC.js';
11
- import '../tool--Mz4v1eL.js';
12
- import '../middleware-C7PdmKF7.js';
9
+ import '../retry-CjvSlKGW.js';
10
+ import '../types-CIPaIbZo.js';
11
+ import '../types-DbolvLtZ.js';
12
+ import '../tool-r62gf3QY.js';
13
13
 
14
14
  type EvalOutcome<Score = unknown> = {
15
15
  outcome: "pass";
@@ -394,6 +394,14 @@ type AgentEvalTargetOptions<Input, AgentOutput = string, Output = AgentResponse<
394
394
  input: Input;
395
395
  testCase: EvalCase<Input, Expected>;
396
396
  }): AgentRunOptions<AgentOutput> | Promise<AgentRunOptions<AgentOutput>>;
397
+ interactions?: {
398
+ maxResponses?: number | undefined;
399
+ respond(args: {
400
+ interaction: AgentInteractionRequest;
401
+ testCase: EvalCase<Input, Expected>;
402
+ phase: number;
403
+ }): AgentInteractionResponse | Promise<AgentInteractionResponse>;
404
+ } | undefined;
397
405
  } & (IsExactly<Output, AgentResponse<AgentOutput>> extends true ? {
398
406
  output?(args: {
399
407
  response: AgentResponse<AgentOutput>;
@@ -405,9 +413,9 @@ type AgentEvalTargetOptions<Input, AgentOutput = string, Output = AgentResponse<
405
413
  testCase: EvalCase<Input, Expected>;
406
414
  }): Output | Promise<Output>;
407
415
  });
408
- declare class AgentEvalApprovalError extends Error {
409
- readonly result: AgentApprovalRequiredResult;
410
- constructor(result: AgentApprovalRequiredResult);
416
+ declare class AgentEvalSuspensionError extends Error {
417
+ readonly result: AgentSuspendedResult;
418
+ constructor(result: AgentSuspendedResult, message?: string);
411
419
  }
412
420
  declare function agentEvalTarget<Input, AgentOutput = string, Output = AgentResponse<AgentOutput>, Expected = unknown>(options: AgentEvalTargetOptions<Input, AgentOutput, Output, Expected>): EvalTarget<Input, Output, Expected>;
413
421
 
@@ -660,4 +668,4 @@ declare function defineEvalSuite<const Cases extends readonly EvalCaseLike[], co
660
668
  target: Target;
661
669
  };
662
670
 
663
- export { type AbstentionCategory, type AbstentionOptions, AgentEvalApprovalError, type AgentEvalTargetOptions, type AnswerRelevancyOptions, type AnyEvalMetric, type ContainsAllOptions, type ContainsAnyOptions, type ContainsListOptions, type ContainsOptions, type DefaultEvalActual, type DefinedEvalSuite, type DoesNotMatchOptions, EvalAssertionError, type EvalCase, type EvalCaseRequirements, type EvalCaseResult, type EvalCasesExpected, type EvalCasesForMetrics, type EvalCasesInput, type EvalCostCalculatorArgs, type EvalCostOptions, type EvalCostSummary, type EvalDataType, type EvalExpectations, type EvalExpectedOutcomes, type EvalExpectedTotals, type EvalMetadata, type EvalMetric, type EvalMetricArgs, type EvalMetricDescriptor, type EvalMetricResult, type EvalMetricResultFor, type EvalMetricScore, EvalOutcome, type EvalOutcomeStatus, type EvalOutputFormat, type EvalOutputWriters, type EvalReportArgs, type EvalReporter, EvalReporterDispatchError, type EvalReporterErrorPolicy, type EvalRunContext, type EvalRunEndArgs, type EvalRunOptions, type EvalRunStartArgs, type EvalScoreDirection, type EvalScoreMap, type EvalScoreProjection, type EvalSuiteResult, type EvalTarget, type EvalTargetUsageSelector, type EvalTotals, type EvalTraceCarrier, type EvalTraceRef, type EvalTraceSelector, type EvalTraceSelectorArgs, type EvalTurn, type EvalUsageSummary, type ExactMatchOptions, type FaithfulnessOptions, type GEvalOptions, type GEvalParameter, type GEvalRubric, type HallucinationOptions, type JsonCorrectnessOptions, type KnowledgeRetentionOptions, type LlmJudgeOptions, type LlmScoreMetricScore, type LlmScoreOptions, type MatchesOptions, type MaxLengthOptions, type NotContainsOptions, type PrintEvalResultOptions, type PromptAlignmentOptions, type RequiredFieldsOptions, type RunEvalCliOptions, type RunEvalSuiteOptions, type SelectorOrValue, type SemanticSimilarityOptions, type SummarizationOptions, type TurnRelevancyOptions, type ValueSelector, abstention, agentEvalTarget, answerRelevancy, assertEvalOutcomes, assertEvalTotals, contains, containsAll, containsAny, defaultEvalTraceSelector, defineEvalCases, defineEvalSuite, defineMetric, doesNotMatch, evalExitCode, exactMatch, faithfulness, gEval, hallucination, jsonCorrectness, knowledgeRetention, llmJudge, llmScore, matches, maxLength, notContains, printEvalResult, projectEvalOutcome, promptAlignment, requiredFields, resolveEvalTraceRef, runEvalCli, runEvalSuite, selectPromptOutput, semanticSimilarity, summarization, turnRelevancy };
671
+ export { type AbstentionCategory, type AbstentionOptions, AgentEvalSuspensionError, type AgentEvalTargetOptions, type AnswerRelevancyOptions, type AnyEvalMetric, type ContainsAllOptions, type ContainsAnyOptions, type ContainsListOptions, type ContainsOptions, type DefaultEvalActual, type DefinedEvalSuite, type DoesNotMatchOptions, EvalAssertionError, type EvalCase, type EvalCaseRequirements, type EvalCaseResult, type EvalCasesExpected, type EvalCasesForMetrics, type EvalCasesInput, type EvalCostCalculatorArgs, type EvalCostOptions, type EvalCostSummary, type EvalDataType, type EvalExpectations, type EvalExpectedOutcomes, type EvalExpectedTotals, type EvalMetadata, type EvalMetric, type EvalMetricArgs, type EvalMetricDescriptor, type EvalMetricResult, type EvalMetricResultFor, type EvalMetricScore, EvalOutcome, type EvalOutcomeStatus, type EvalOutputFormat, type EvalOutputWriters, type EvalReportArgs, type EvalReporter, EvalReporterDispatchError, type EvalReporterErrorPolicy, type EvalRunContext, type EvalRunEndArgs, type EvalRunOptions, type EvalRunStartArgs, type EvalScoreDirection, type EvalScoreMap, type EvalScoreProjection, type EvalSuiteResult, type EvalTarget, type EvalTargetUsageSelector, type EvalTotals, type EvalTraceCarrier, type EvalTraceRef, type EvalTraceSelector, type EvalTraceSelectorArgs, type EvalTurn, type EvalUsageSummary, type ExactMatchOptions, type FaithfulnessOptions, type GEvalOptions, type GEvalParameter, type GEvalRubric, type HallucinationOptions, type JsonCorrectnessOptions, type KnowledgeRetentionOptions, type LlmJudgeOptions, type LlmScoreMetricScore, type LlmScoreOptions, type MatchesOptions, type MaxLengthOptions, type NotContainsOptions, type PrintEvalResultOptions, type PromptAlignmentOptions, type RequiredFieldsOptions, type RunEvalCliOptions, type RunEvalSuiteOptions, type SelectorOrValue, type SemanticSimilarityOptions, type SummarizationOptions, type TurnRelevancyOptions, type ValueSelector, abstention, agentEvalTarget, answerRelevancy, assertEvalOutcomes, assertEvalTotals, contains, containsAll, containsAny, defaultEvalTraceSelector, defineEvalCases, defineEvalSuite, defineMetric, doesNotMatch, evalExitCode, exactMatch, faithfulness, gEval, hallucination, jsonCorrectness, knowledgeRetention, llmJudge, llmScore, matches, maxLength, notContains, printEvalResult, projectEvalOutcome, promptAlignment, requiredFields, resolveEvalTraceRef, runEvalCli, runEvalSuite, selectPromptOutput, semanticSimilarity, summarization, turnRelevancy };
@@ -1,28 +1,21 @@
1
1
  import {
2
- AgentRunBlockedError,
3
- cancelAgentApproval
4
- } from "../chunk-DBSCKTUL.js";
5
- import "../chunk-YK4WAAS4.js";
6
- import "../chunk-EINTGEGY.js";
7
- import "../chunk-CQNNSZPG.js";
8
- import "../chunk-D37WMSP6.js";
9
- import "../chunk-77AIYARB.js";
10
- import "../chunk-OJH6HWHX.js";
11
- import "../chunk-CWM7B2OO.js";
2
+ AgentRunBlockedError
3
+ } from "../chunk-TRQ3XRFD.js";
12
4
  import {
13
5
  cosineSimilarity,
14
- embedText,
6
+ embedText
7
+ } from "../chunk-GQL5KRAH.js";
8
+ import {
15
9
  mapWithConcurrency
16
- } from "../chunk-FMHLROPQ.js";
10
+ } from "../chunk-3RM57ZT2.js";
17
11
  import {
18
12
  extract
19
- } from "../chunk-4WI3VGZK.js";
13
+ } from "../chunk-ZCPOIDAQ.js";
20
14
  import "../chunk-MGNTXGTX.js";
21
15
  import {
22
16
  Usage
23
- } from "../chunk-KR3RCCHJ.js";
24
- import "../chunk-TIZYTPJO.js";
25
- import "../chunk-KIDGIJM7.js";
17
+ } from "../chunk-D2ECOWN5.js";
18
+ import "../chunk-PK5LKOFL.js";
26
19
  import "../chunk-FN7HLLAZ.js";
27
20
 
28
21
  // src/evals/advanced-metrics.ts
@@ -1122,26 +1115,61 @@ function contentText(content) {
1122
1115
  }
1123
1116
 
1124
1117
  // src/evals/agent-target.ts
1125
- var AgentEvalApprovalError = class extends Error {
1126
- constructor(result) {
1127
- super("Agent eval targets cannot suspend for tool approval.");
1118
+ var AgentEvalSuspensionError = class extends Error {
1119
+ constructor(result, message = "Agent eval target suspended without an interaction responder.") {
1120
+ super(message);
1128
1121
  this.result = result;
1129
- this.name = "AgentEvalApprovalError";
1122
+ this.name = "AgentEvalSuspensionError";
1130
1123
  }
1131
1124
  result;
1132
1125
  };
1133
1126
  function agentEvalTarget(options) {
1134
1127
  return async (input, testCase) => {
1128
+ const maxResponses = options.interactions?.maxResponses ?? 10;
1129
+ if (!Number.isSafeInteger(maxResponses) || maxResponses < 1) {
1130
+ throw new TypeError("Agent eval interactions.maxResponses must be a positive integer.");
1131
+ }
1135
1132
  const request = await options.request({ input, testCase });
1136
- const response = await options.agent.generate(request);
1137
- if (response.status === "approval_required") {
1138
- await cancelAgentApproval(response, "Agent eval targets cannot suspend for tool approval.");
1139
- throw new AgentEvalApprovalError(response);
1133
+ const runSettings = agentRunSettings(request);
1134
+ let response = await options.agent.generate(request);
1135
+ let phase = 0;
1136
+ while (response.status === "suspended") {
1137
+ if (options.interactions === void 0) {
1138
+ throw new AgentEvalSuspensionError(response);
1139
+ }
1140
+ if (phase >= maxResponses) {
1141
+ throw new AgentEvalSuspensionError(
1142
+ response,
1143
+ `Agent eval target exceeded the interaction response limit of ${maxResponses}.`
1144
+ );
1145
+ }
1146
+ phase += 1;
1147
+ const interactionResponse = await options.interactions.respond({
1148
+ interaction: response.interaction,
1149
+ testCase,
1150
+ phase
1151
+ });
1152
+ response = await options.agent.generate({
1153
+ continuation: response.continuation,
1154
+ response: interactionResponse,
1155
+ ...runSettings
1156
+ });
1140
1157
  }
1141
1158
  if (response.status === "blocked") throw new AgentRunBlockedError(response);
1142
1159
  return options.output === void 0 ? response : await options.output({ response, testCase });
1143
1160
  };
1144
1161
  }
1162
+ function agentRunSettings(request) {
1163
+ const {
1164
+ prompt: _prompt,
1165
+ messages: _messages,
1166
+ session: _session,
1167
+ continuation: _continuation,
1168
+ response: _response,
1169
+ ...settings
1170
+ } = request;
1171
+ return settings;
1172
+ }
1145
1173
 
1146
1174
  // src/evals/reporting.ts
1147
1175
  function projectEvalOutcome(outcome, dataType, projectScore) {
@@ -1286,25 +1314,26 @@ async function runEvalSuite(options) {
1286
1314
  metrics: aggregates.metrics,
1287
1315
  cases: aggregates.cases,
1288
1316
  usage: aggregates.usage,
1289
- ...aggregates.cost === void 0 ? {} : { cost: aggregates.cost },
1290
1317
  durationMs: Date.now() - startedAtMs,
1291
1318
  reporterErrors
1292
1319
  };
1320
+ if (aggregates.cost !== void 0) {
1321
+ result.cost = aggregates.cost;
1322
+ }
1323
+ const runEndArgs = {
1324
+ ...lifecycle,
1325
+ status: "completed",
1326
+ completedAt,
1327
+ durationMs: result.durationMs,
1328
+ metrics: result.metrics,
1329
+ cases: result.cases,
1330
+ usage: result.usage
1331
+ };
1332
+ if (result.cost !== void 0) {
1333
+ runEndArgs.cost = result.cost;
1334
+ }
1293
1335
  result.reporterErrors.push(
1294
- ...await notifyRunEnd(
1295
- reporters,
1296
- {
1297
- ...lifecycle,
1298
- status: "completed",
1299
- completedAt,
1300
- durationMs: result.durationMs,
1301
- metrics: result.metrics,
1302
- cases: result.cases,
1303
- usage: result.usage,
1304
- ...result.cost === void 0 ? {} : { cost: result.cost }
1305
- },
1306
- options.reporterErrorPolicy ?? "collect"
1307
- )
1336
+ ...await notifyRunEnd(reporters, runEndArgs, options.reporterErrorPolicy ?? "collect")
1308
1337
  );
1309
1338
  return result;
1310
1339
  }
@@ -1444,13 +1473,14 @@ function resolveRun(options, startedAtMs) {
1444
1473
  throw new TypeError(`Evaluation run ${label} must contain 1 to 256 characters`);
1445
1474
  }
1446
1475
  }
1447
- return {
1476
+ const run = {
1448
1477
  id,
1449
- startedAt: new Date(startedAtMs).toISOString(),
1450
- ...options.run?.datasetName === void 0 ? {} : { datasetName: options.run.datasetName },
1451
- ...options.run?.datasetVersion === void 0 ? {} : { datasetVersion: options.run.datasetVersion },
1452
- ...options.run?.metadata === void 0 ? {} : { metadata: options.run.metadata }
1478
+ startedAt: new Date(startedAtMs).toISOString()
1453
1479
  };
1480
+ if (options.run?.datasetName !== void 0) run.datasetName = options.run.datasetName;
1481
+ if (options.run?.datasetVersion !== void 0) run.datasetVersion = options.run.datasetVersion;
1482
+ if (options.run?.metadata !== void 0) run.metadata = options.run.metadata;
1483
+ return run;
1454
1484
  }
1455
1485
  async function notifyRunStart(reporters, args, errorPolicy) {
1456
1486
  const errors = [];
@@ -1737,18 +1767,21 @@ function jsonResult(result) {
1737
1767
  }
1738
1768
  function expectationMismatches(result, expectations) {
1739
1769
  if (expectations === void 0) return [];
1740
- return [
1741
- ...expectations.totals === void 0 ? [] : totalMismatches(result, expectations.totals),
1742
- ...expectations.outcomes === void 0 ? [] : outcomeMismatches(result, expectations.outcomes)
1743
- ];
1770
+ const mismatches = [];
1771
+ if (expectations.totals !== void 0) {
1772
+ mismatches.push(...totalMismatches(result, expectations.totals));
1773
+ }
1774
+ if (expectations.outcomes !== void 0) {
1775
+ mismatches.push(...outcomeMismatches(result, expectations.outcomes));
1776
+ }
1777
+ return mismatches;
1744
1778
  }
1745
1779
  function totalMismatches(result, expected) {
1746
- const directMetrics = {
1747
- ...expected.total === void 0 ? {} : { total: expected.total },
1748
- ...expected.passed === void 0 ? {} : { passed: expected.passed },
1749
- ...expected.failed === void 0 ? {} : { failed: expected.failed },
1750
- ...expected.invalid === void 0 ? {} : { invalid: expected.invalid }
1751
- };
1780
+ const directMetrics = {};
1781
+ if (expected.total !== void 0) directMetrics.total = expected.total;
1782
+ if (expected.passed !== void 0) directMetrics.passed = expected.passed;
1783
+ if (expected.failed !== void 0) directMetrics.failed = expected.failed;
1784
+ if (expected.invalid !== void 0) directMetrics.invalid = expected.invalid;
1752
1785
  return [
1753
1786
  ...totalsGroupMismatches("metrics", result.metrics, {
1754
1787
  ...directMetrics,
@@ -2115,7 +2148,7 @@ function defineEvalSuite(options) {
2115
2148
  };
2116
2149
  }
2117
2150
  export {
2118
- AgentEvalApprovalError,
2151
+ AgentEvalSuspensionError,
2119
2152
  EvalAssertionError,
2120
2153
  EvalOutcome,
2121
2154
  EvalReporterDispatchError,