vieval 0.0.4 → 0.0.6

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 (59) hide show
  1. package/README.md +6 -3
  2. package/dist/bin/vieval.d.mts +1 -0
  3. package/dist/bin/vieval.mjs +33 -0
  4. package/dist/bin/vieval.mjs.map +1 -0
  5. package/dist/cli/index.d.mts +32 -0
  6. package/dist/cli/index.mjs +1 -2582
  7. package/dist/cli-sanbKtQq.mjs +2821 -0
  8. package/dist/cli-sanbKtQq.mjs.map +1 -0
  9. package/dist/config.d.mts +2 -2
  10. package/dist/config.mjs +16 -1
  11. package/dist/config.mjs.map +1 -0
  12. package/dist/core/assertions/index.d.mts +314 -2
  13. package/dist/core/assertions/index.mjs +182 -1
  14. package/dist/core/assertions/index.mjs.map +1 -0
  15. package/dist/core/inference-executors/index.d.mts +1 -1
  16. package/dist/core/inference-executors/index.mjs +1 -1
  17. package/dist/core/processors/results/index.d.mts +1 -1
  18. package/dist/core/runner/index.d.mts +3 -2
  19. package/dist/core/runner/index.mjs +637 -2
  20. package/dist/core/runner/index.mjs.map +1 -0
  21. package/dist/core/scheduler/index.d.mts +2 -0
  22. package/dist/core/scheduler/index.mjs +188 -0
  23. package/dist/core/scheduler/index.mjs.map +1 -0
  24. package/dist/{env-C7X81PWa.mjs → env--94B0UtW.mjs} +1 -1
  25. package/dist/{env-C7X81PWa.mjs.map → env--94B0UtW.mjs.map} +1 -1
  26. package/dist/{env-DtpjACOW.d.mts → env-BeHv_5mo.d.mts} +1 -1
  27. package/dist/{expect-extensions-BOzwV5EJ.mjs → expect-extensions-DCSqlneN.mjs} +2 -2
  28. package/dist/{expect-extensions-BOzwV5EJ.mjs.map → expect-extensions-DCSqlneN.mjs.map} +1 -1
  29. package/dist/expect.d.mts +10 -2
  30. package/dist/expect.mjs +16 -1
  31. package/dist/expect.mjs.map +1 -0
  32. package/dist/{index-BDMEAmf2.d.mts → index-DBZKkpBe.d.mts} +106 -4
  33. package/dist/index-fakXoZEe.d.mts +147 -0
  34. package/dist/index.d.mts +111 -12
  35. package/dist/index.mjs +216 -55
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/models-DIGdOUpJ.mjs.map +1 -1
  38. package/dist/plugins/chat-models/index.d.mts +21 -1
  39. package/dist/plugins/chat-models/index.mjs +27 -1
  40. package/dist/plugins/chat-models/index.mjs.map +1 -1
  41. package/dist/queue-DsZQkZO_.mjs +21 -0
  42. package/dist/queue-DsZQkZO_.mjs.map +1 -0
  43. package/dist/{registry-CHJcTN2W.mjs → registry-CcKZqDJY.mjs} +27 -5
  44. package/dist/registry-CcKZqDJY.mjs.map +1 -0
  45. package/dist/testing/expect-extensions.d.mts +1 -1
  46. package/dist/testing/expect-extensions.mjs +1 -1
  47. package/package.json +9 -3
  48. package/dist/assertions-DcAjfVDA.mjs +0 -183
  49. package/dist/assertions-DcAjfVDA.mjs.map +0 -1
  50. package/dist/cli/index.mjs.map +0 -1
  51. package/dist/config-CHN24egi.mjs +0 -17
  52. package/dist/config-CHN24egi.mjs.map +0 -1
  53. package/dist/expect-B2vaoRVZ.d.mts +0 -10
  54. package/dist/expect-CaXiUkwY.mjs +0 -17
  55. package/dist/expect-CaXiUkwY.mjs.map +0 -1
  56. package/dist/index-C3gPFmcR.d.mts +0 -314
  57. package/dist/registry-CHJcTN2W.mjs.map +0 -1
  58. package/dist/runner-Dpy-eivM.mjs +0 -636
  59. package/dist/runner-Dpy-eivM.mjs.map +0 -1
@@ -1,2 +1,314 @@
1
- import { C as expectToolCallArgs, S as expectStructuredOutput, T as toRunScores, _ as expectMustExclude, a as CustomAssertionOptions, b as expectRegex, c as RegexAssertionOptions, d as StructuredOutputAssertionOptions, f as ToolCall, g as expectCustom, h as evaluateAssertions, i as AssertionState, l as RubricAssertionOptions, m as collectFailedAssertions, n as AssertionContext, o as MustExcludeAssertionOptions, p as ToolCallArgsAssertionOptions, r as AssertionOutcome, s as MustIncludeAssertionOptions, t as Assertion, u as RubricJudgeResult, v as expectMustInclude, w as normalizeMatchText, x as expectRubric, y as expectNot } from "../../index-C3gPFmcR.mjs";
2
- export { Assertion, AssertionContext, AssertionOutcome, AssertionState, CustomAssertionOptions, MustExcludeAssertionOptions, MustIncludeAssertionOptions, RegexAssertionOptions, RubricAssertionOptions, RubricJudgeResult, StructuredOutputAssertionOptions, ToolCall, ToolCallArgsAssertionOptions, collectFailedAssertions, evaluateAssertions, expectCustom, expectMustExclude, expectMustInclude, expectNot, expectRegex, expectRubric, expectStructuredOutput, expectToolCallArgs, normalizeMatchText, toRunScores };
1
+ import { G as RunScore, K as RunScoreKind } from "../../index-DBZKkpBe.mjs";
2
+
3
+ //#region src/core/assertions/index.d.ts
4
+ /**
5
+ * Stores mutable evaluation state for stateful assertion flows.
6
+ *
7
+ * Use when:
8
+ * - assertions need to share counters, rolling metrics, or memoized values
9
+ * - a scenario evaluates multiple steps and expects state-aware checks
10
+ */
11
+ type AssertionState = Map<string, unknown>;
12
+ /**
13
+ * Represents one tool call emitted by a model response.
14
+ */
15
+ interface ToolCall {
16
+ /**
17
+ * Tool name used by the call.
18
+ */
19
+ name: string;
20
+ /**
21
+ * Tool arguments payload.
22
+ */
23
+ args: unknown;
24
+ }
25
+ /**
26
+ * Normalized assertion context for one model output.
27
+ */
28
+ interface AssertionContext {
29
+ /**
30
+ * Plain text model output used by text assertions.
31
+ */
32
+ text: string;
33
+ /**
34
+ * Optional structured output parsed from the model response.
35
+ */
36
+ structuredOutput?: unknown;
37
+ /**
38
+ * Optional tool calls extracted from the model response.
39
+ */
40
+ toolCalls?: readonly ToolCall[];
41
+ /**
42
+ * Shared mutable state for stateful assertion measurement.
43
+ */
44
+ state: AssertionState;
45
+ }
46
+ /**
47
+ * Result for one assertion evaluation.
48
+ */
49
+ interface AssertionOutcome {
50
+ /**
51
+ * Stable assertion id.
52
+ */
53
+ id: string;
54
+ /**
55
+ * Assertion family emitted as run score kind.
56
+ */
57
+ scoreKind: RunScoreKind;
58
+ /**
59
+ * Whether the assertion passed.
60
+ */
61
+ pass: boolean;
62
+ /**
63
+ * Normalized score in the `0..1` range.
64
+ */
65
+ score: number;
66
+ /**
67
+ * Human-readable reason for logs and reports.
68
+ */
69
+ reason: string;
70
+ }
71
+ /**
72
+ * Async assertion function used by eval scenarios.
73
+ */
74
+ type Assertion = (context: AssertionContext) => Promise<AssertionOutcome>;
75
+ /**
76
+ * Normalizes text for matching.
77
+ *
78
+ * Before: `" Hello\nWorld "`
79
+ * After: `"hello world"`
80
+ */
81
+ declare function normalizeMatchText(value: string, caseSensitive: boolean): string;
82
+ /**
83
+ * Options for include-keyword assertions.
84
+ */
85
+ interface MustIncludeAssertionOptions {
86
+ /**
87
+ * Stable assertion id.
88
+ */
89
+ id: string;
90
+ /**
91
+ * Keywords that must be present.
92
+ */
93
+ keywords: readonly string[];
94
+ /**
95
+ * Match mode for keywords.
96
+ *
97
+ * @default 'all'
98
+ */
99
+ mode?: 'all' | 'any';
100
+ /**
101
+ * Case-sensitive matching toggle.
102
+ *
103
+ * @default false
104
+ */
105
+ caseSensitive?: boolean;
106
+ }
107
+ /**
108
+ * Creates an assertion that requires specific keywords in model text.
109
+ *
110
+ * Example:
111
+ * `expectMustInclude({ id: 'tone', keywords: ['calm', 'move'] })`
112
+ */
113
+ declare function expectMustInclude(options: MustIncludeAssertionOptions): Assertion;
114
+ /**
115
+ * Options for exclude-keyword assertions.
116
+ */
117
+ interface MustExcludeAssertionOptions {
118
+ /**
119
+ * Stable assertion id.
120
+ */
121
+ id: string;
122
+ /**
123
+ * Keywords that must not appear.
124
+ */
125
+ keywords: readonly string[];
126
+ /**
127
+ * Case-sensitive matching toggle.
128
+ *
129
+ * @default false
130
+ */
131
+ caseSensitive?: boolean;
132
+ }
133
+ /**
134
+ * Creates an assertion that forbids specific keywords.
135
+ *
136
+ * Example:
137
+ * `expectMustExclude({ id: 'no-engine-dump', keywords: ['bestmove', 'ponder'] })`
138
+ */
139
+ declare function expectMustExclude(options: MustExcludeAssertionOptions): Assertion;
140
+ /**
141
+ * Options for regular-expression assertions.
142
+ */
143
+ interface RegexAssertionOptions {
144
+ /**
145
+ * Stable assertion id.
146
+ */
147
+ id: string;
148
+ /**
149
+ * Pattern to apply to model text.
150
+ */
151
+ pattern: RegExp;
152
+ }
153
+ /**
154
+ * Creates an assertion based on a regular expression.
155
+ *
156
+ * Example:
157
+ * `expectRegex({ id: 'starts-with-act', pattern: /^<\|ACT:/ })`
158
+ */
159
+ declare function expectRegex(options: RegexAssertionOptions): Assertion;
160
+ /**
161
+ * Options for structured-output assertions.
162
+ */
163
+ interface StructuredOutputAssertionOptions<TValue> {
164
+ /**
165
+ * Stable assertion id.
166
+ */
167
+ id: string;
168
+ /**
169
+ * Runtime validator for structured output.
170
+ */
171
+ validate: (value: unknown) => value is TValue;
172
+ /**
173
+ * Optional failure reason.
174
+ */
175
+ failureReason?: string;
176
+ }
177
+ /**
178
+ * Creates an assertion for structured model output.
179
+ *
180
+ * Example:
181
+ * `expectStructuredOutput({ id: 'json-shape', validate: isMySchema })`
182
+ */
183
+ declare function expectStructuredOutput<TValue>(options: StructuredOutputAssertionOptions<TValue>): Assertion;
184
+ /**
185
+ * Options for tool-call argument assertions.
186
+ */
187
+ interface ToolCallArgsAssertionOptions {
188
+ /**
189
+ * Stable assertion id.
190
+ */
191
+ id: string;
192
+ /**
193
+ * Tool name to inspect.
194
+ */
195
+ toolName: string;
196
+ /**
197
+ * Runtime validator for tool arguments.
198
+ */
199
+ validate: (args: unknown) => boolean;
200
+ }
201
+ /**
202
+ * Creates an assertion for validating tool-call arguments.
203
+ *
204
+ * Example:
205
+ * `expectToolCallArgs({ id: 'spark-command-shape', toolName: 'builtIn_sparkCommand', validate: isSparkArgs })`
206
+ */
207
+ declare function expectToolCallArgs(options: ToolCallArgsAssertionOptions): Assertion;
208
+ /**
209
+ * Rubric judge result returned by teacher-model or rubric logic.
210
+ */
211
+ interface RubricJudgeResult {
212
+ /**
213
+ * Normalized score in the `0..1` range.
214
+ */
215
+ score: number;
216
+ /**
217
+ * Judge explanation text.
218
+ */
219
+ reason: string;
220
+ /**
221
+ * Optional judge model id.
222
+ */
223
+ judgeModel?: string;
224
+ }
225
+ /**
226
+ * Options for rubric assertions.
227
+ */
228
+ interface RubricAssertionOptions {
229
+ /**
230
+ * Stable assertion id.
231
+ */
232
+ id: string;
233
+ /**
234
+ * Async rubric judge callback.
235
+ */
236
+ judge: (context: AssertionContext) => Promise<RubricJudgeResult>;
237
+ /**
238
+ * Minimum passing score.
239
+ *
240
+ * @default 0.7
241
+ */
242
+ minScore?: number;
243
+ }
244
+ /**
245
+ * Creates a rubric assertion driven by teacher-model style scoring.
246
+ *
247
+ * Example:
248
+ * `expectRubric({ id: 'human-like-tone', judge: judgeFn, minScore: 0.8 })`
249
+ */
250
+ declare function expectRubric(options: RubricAssertionOptions): Assertion;
251
+ /**
252
+ * Options for custom assertions.
253
+ */
254
+ interface CustomAssertionOptions {
255
+ /**
256
+ * Stable assertion id.
257
+ */
258
+ id: string;
259
+ /**
260
+ * Score family emitted by this custom assertion.
261
+ */
262
+ scoreKind: RunScoreKind;
263
+ /**
264
+ * Custom evaluator callback.
265
+ */
266
+ evaluate: (context: AssertionContext) => Promise<{
267
+ pass: boolean;
268
+ reason: string;
269
+ score: number;
270
+ }> | {
271
+ pass: boolean;
272
+ reason: string;
273
+ score: number;
274
+ };
275
+ }
276
+ /**
277
+ * Creates a custom assertion with fully user-defined logic.
278
+ *
279
+ * Example:
280
+ * `expectCustom({ id: 'stateful-window', scoreKind: 'exact', evaluate: (ctx) => ... })`
281
+ */
282
+ declare function expectCustom(options: CustomAssertionOptions): Assertion;
283
+ /**
284
+ * Creates an inverse assertion.
285
+ *
286
+ * Example:
287
+ * `expectNot(expectMustInclude({ id: 'contains-engine-word', keywords: ['bestmove'] }), { id: 'no-engine-word' })`
288
+ */
289
+ declare function expectNot(assertion: Assertion, options: {
290
+ id: string;
291
+ }): Assertion;
292
+ /**
293
+ * Executes assertion list and returns all outcomes.
294
+ *
295
+ * Call stack:
296
+ *
297
+ * {@link evaluateAssertions}
298
+ * -> `assertion(context)`
299
+ * -> {@link AssertionOutcome}[]
300
+ */
301
+ declare function evaluateAssertions(assertions: readonly Assertion[], context: Omit<AssertionContext, 'state'> & {
302
+ state?: AssertionState;
303
+ }): Promise<AssertionOutcome[]>;
304
+ /**
305
+ * Converts assertion outcomes to run-score tuples consumed by aggregation.
306
+ */
307
+ declare function toRunScores(outcomes: readonly AssertionOutcome[]): RunScore[];
308
+ /**
309
+ * Returns failing assertion outcomes in original order.
310
+ */
311
+ declare function collectFailedAssertions(outcomes: readonly AssertionOutcome[]): AssertionOutcome[];
312
+ //#endregion
313
+ export { Assertion, AssertionContext, AssertionOutcome, AssertionState, CustomAssertionOptions, MustExcludeAssertionOptions, MustIncludeAssertionOptions, RegexAssertionOptions, RubricAssertionOptions, RubricJudgeResult, StructuredOutputAssertionOptions, ToolCall, ToolCallArgsAssertionOptions, collectFailedAssertions, evaluateAssertions, expectCustom, expectMustExclude, expectMustInclude, expectNot, expectRegex, expectRubric, expectStructuredOutput, expectToolCallArgs, normalizeMatchText, toRunScores };
314
+ //# sourceMappingURL=index.d.mts.map
@@ -1,2 +1,183 @@
1
- import { a as expectMustInclude, c as expectRubric, d as normalizeMatchText, f as toRunScores, i as expectMustExclude, l as expectStructuredOutput, n as evaluateAssertions, o as expectNot, r as expectCustom, s as expectRegex, t as collectFailedAssertions, u as expectToolCallArgs } from "../../assertions-DcAjfVDA.mjs";
1
+ //#region src/core/assertions/index.ts
2
+ /**
3
+ * Normalizes text for matching.
4
+ *
5
+ * Before: `" Hello\nWorld "`
6
+ * After: `"hello world"`
7
+ */
8
+ function normalizeMatchText(value, caseSensitive) {
9
+ const compactedWhitespace = value.trim().replaceAll(/\s+/g, " ");
10
+ if (caseSensitive) return compactedWhitespace;
11
+ return compactedWhitespace.toLowerCase();
12
+ }
13
+ function clampScore(score) {
14
+ if (Number.isNaN(score)) return 0;
15
+ if (score < 0) return 0;
16
+ if (score > 1) return 1;
17
+ return score;
18
+ }
19
+ function createOutcome(id, scoreKind, pass, score, reason) {
20
+ return {
21
+ id,
22
+ pass,
23
+ reason,
24
+ score: clampScore(score),
25
+ scoreKind
26
+ };
27
+ }
28
+ /**
29
+ * Creates an assertion that requires specific keywords in model text.
30
+ *
31
+ * Example:
32
+ * `expectMustInclude({ id: 'tone', keywords: ['calm', 'move'] })`
33
+ */
34
+ function expectMustInclude(options) {
35
+ return async (context) => {
36
+ if (options.keywords.length === 0) return createOutcome(options.id, "exact", true, 1, "No required keywords configured.");
37
+ const caseSensitive = options.caseSensitive ?? false;
38
+ const normalizedText = normalizeMatchText(context.text, caseSensitive);
39
+ const matches = options.keywords.filter((keyword) => {
40
+ const normalizedKeyword = normalizeMatchText(keyword, caseSensitive);
41
+ return normalizedText.includes(normalizedKeyword);
42
+ });
43
+ const pass = (options.mode ?? "all") === "all" ? matches.length === options.keywords.length : matches.length > 0;
44
+ const score = options.keywords.length === 0 ? 1 : matches.length / options.keywords.length;
45
+ return createOutcome(options.id, "exact", pass, score, pass ? `Matched ${matches.length}/${options.keywords.length} required keywords.` : `Matched ${matches.length}/${options.keywords.length} required keywords.`);
46
+ };
47
+ }
48
+ /**
49
+ * Creates an assertion that forbids specific keywords.
50
+ *
51
+ * Example:
52
+ * `expectMustExclude({ id: 'no-engine-dump', keywords: ['bestmove', 'ponder'] })`
53
+ */
54
+ function expectMustExclude(options) {
55
+ return async (context) => {
56
+ if (options.keywords.length === 0) return createOutcome(options.id, "exact", true, 1, "No excluded keywords configured.");
57
+ const caseSensitive = options.caseSensitive ?? false;
58
+ const normalizedText = normalizeMatchText(context.text, caseSensitive);
59
+ const forbiddenMatches = options.keywords.filter((keyword) => {
60
+ const normalizedKeyword = normalizeMatchText(keyword, caseSensitive);
61
+ return normalizedText.includes(normalizedKeyword);
62
+ });
63
+ const pass = forbiddenMatches.length === 0;
64
+ const score = pass ? 1 : 0;
65
+ return createOutcome(options.id, "exact", pass, score, pass ? "No forbidden keywords found." : `Forbidden keywords found: ${forbiddenMatches.join(", ")}`);
66
+ };
67
+ }
68
+ /**
69
+ * Creates an assertion based on a regular expression.
70
+ *
71
+ * Example:
72
+ * `expectRegex({ id: 'starts-with-act', pattern: /^<\|ACT:/ })`
73
+ */
74
+ function expectRegex(options) {
75
+ return async (context) => {
76
+ const pass = options.pattern.test(context.text);
77
+ return createOutcome(options.id, "exact", pass, pass ? 1 : 0, pass ? "Regex matched response text." : `Regex did not match: ${options.pattern}`);
78
+ };
79
+ }
80
+ /**
81
+ * Creates an assertion for structured model output.
82
+ *
83
+ * Example:
84
+ * `expectStructuredOutput({ id: 'json-shape', validate: isMySchema })`
85
+ */
86
+ function expectStructuredOutput(options) {
87
+ return async (context) => {
88
+ const pass = options.validate(context.structuredOutput);
89
+ return createOutcome(options.id, "exact", pass, pass ? 1 : 0, pass ? "Structured output matched validator." : options.failureReason ?? "Structured output validation failed.");
90
+ };
91
+ }
92
+ /**
93
+ * Creates an assertion for validating tool-call arguments.
94
+ *
95
+ * Example:
96
+ * `expectToolCallArgs({ id: 'spark-command-shape', toolName: 'builtIn_sparkCommand', validate: isSparkArgs })`
97
+ */
98
+ function expectToolCallArgs(options) {
99
+ return async (context) => {
100
+ const targetCall = (context.toolCalls ?? []).find((call) => call.name === options.toolName);
101
+ if (targetCall == null) return createOutcome(options.id, "exact", false, 0, `Missing tool call: ${options.toolName}`);
102
+ const pass = options.validate(targetCall.args);
103
+ return createOutcome(options.id, "exact", pass, pass ? 1 : 0, pass ? `Tool call args validated for ${options.toolName}.` : `Tool call args validation failed for ${options.toolName}.`);
104
+ };
105
+ }
106
+ /**
107
+ * Creates a rubric assertion driven by teacher-model style scoring.
108
+ *
109
+ * Example:
110
+ * `expectRubric({ id: 'human-like-tone', judge: judgeFn, minScore: 0.8 })`
111
+ */
112
+ function expectRubric(options) {
113
+ return async (context) => {
114
+ const result = await options.judge(context);
115
+ const minScore = options.minScore ?? .7;
116
+ const normalizedScore = clampScore(result.score);
117
+ const pass = normalizedScore >= minScore;
118
+ return createOutcome(options.id, "judge", pass, normalizedScore, `${result.reason}${result.judgeModel ? ` (judge: ${result.judgeModel})` : ""}`);
119
+ };
120
+ }
121
+ /**
122
+ * Creates a custom assertion with fully user-defined logic.
123
+ *
124
+ * Example:
125
+ * `expectCustom({ id: 'stateful-window', scoreKind: 'exact', evaluate: (ctx) => ... })`
126
+ */
127
+ function expectCustom(options) {
128
+ return async (context) => {
129
+ const result = await options.evaluate(context);
130
+ return createOutcome(options.id, options.scoreKind, result.pass, result.score, result.reason);
131
+ };
132
+ }
133
+ /**
134
+ * Creates an inverse assertion.
135
+ *
136
+ * Example:
137
+ * `expectNot(expectMustInclude({ id: 'contains-engine-word', keywords: ['bestmove'] }), { id: 'no-engine-word' })`
138
+ */
139
+ function expectNot(assertion, options) {
140
+ return async (context) => {
141
+ const baseOutcome = await assertion(context);
142
+ return createOutcome(options.id, baseOutcome.scoreKind, !baseOutcome.pass, 1 - baseOutcome.score, `NOT(${baseOutcome.id}): ${baseOutcome.reason}`);
143
+ };
144
+ }
145
+ /**
146
+ * Executes assertion list and returns all outcomes.
147
+ *
148
+ * Call stack:
149
+ *
150
+ * {@link evaluateAssertions}
151
+ * -> `assertion(context)`
152
+ * -> {@link AssertionOutcome}[]
153
+ */
154
+ async function evaluateAssertions(assertions, context) {
155
+ const normalizedContext = {
156
+ state: context.state ?? /* @__PURE__ */ new Map(),
157
+ structuredOutput: context.structuredOutput,
158
+ text: context.text,
159
+ toolCalls: context.toolCalls
160
+ };
161
+ const outcomes = [];
162
+ for (const assertion of assertions) outcomes.push(await assertion(normalizedContext));
163
+ return outcomes;
164
+ }
165
+ /**
166
+ * Converts assertion outcomes to run-score tuples consumed by aggregation.
167
+ */
168
+ function toRunScores(outcomes) {
169
+ return outcomes.map((outcome) => ({
170
+ kind: outcome.scoreKind,
171
+ score: outcome.score
172
+ }));
173
+ }
174
+ /**
175
+ * Returns failing assertion outcomes in original order.
176
+ */
177
+ function collectFailedAssertions(outcomes) {
178
+ return outcomes.filter((outcome) => !outcome.pass);
179
+ }
180
+ //#endregion
2
181
  export { collectFailedAssertions, evaluateAssertions, expectCustom, expectMustExclude, expectMustInclude, expectNot, expectRegex, expectRubric, expectStructuredOutput, expectToolCallArgs, normalizeMatchText, toRunScores };
182
+
183
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/core/assertions/index.ts"],"sourcesContent":["import type { RunScore, RunScoreKind } from '../runner/aggregate'\n\n/**\n * Stores mutable evaluation state for stateful assertion flows.\n *\n * Use when:\n * - assertions need to share counters, rolling metrics, or memoized values\n * - a scenario evaluates multiple steps and expects state-aware checks\n */\nexport type AssertionState = Map<string, unknown>\n\n/**\n * Represents one tool call emitted by a model response.\n */\nexport interface ToolCall {\n /**\n * Tool name used by the call.\n */\n name: string\n /**\n * Tool arguments payload.\n */\n args: unknown\n}\n\n/**\n * Normalized assertion context for one model output.\n */\nexport interface AssertionContext {\n /**\n * Plain text model output used by text assertions.\n */\n text: string\n /**\n * Optional structured output parsed from the model response.\n */\n structuredOutput?: unknown\n /**\n * Optional tool calls extracted from the model response.\n */\n toolCalls?: readonly ToolCall[]\n /**\n * Shared mutable state for stateful assertion measurement.\n */\n state: AssertionState\n}\n\n/**\n * Result for one assertion evaluation.\n */\nexport interface AssertionOutcome {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Assertion family emitted as run score kind.\n */\n scoreKind: RunScoreKind\n /**\n * Whether the assertion passed.\n */\n pass: boolean\n /**\n * Normalized score in the `0..1` range.\n */\n score: number\n /**\n * Human-readable reason for logs and reports.\n */\n reason: string\n}\n\n/**\n * Async assertion function used by eval scenarios.\n */\nexport type Assertion = (context: AssertionContext) => Promise<AssertionOutcome>\n\n/**\n * Normalizes text for matching.\n *\n * Before: `\" Hello\\nWorld \"`\n * After: `\"hello world\"`\n */\nexport function normalizeMatchText(value: string, caseSensitive: boolean): string {\n const compactedWhitespace = value.trim().replaceAll(/\\s+/g, ' ')\n\n if (caseSensitive) {\n return compactedWhitespace\n }\n\n return compactedWhitespace.toLowerCase()\n}\n\nfunction clampScore(score: number): number {\n if (Number.isNaN(score)) {\n return 0\n }\n\n if (score < 0) {\n return 0\n }\n\n if (score > 1) {\n return 1\n }\n\n return score\n}\n\nfunction createOutcome(\n id: string,\n scoreKind: RunScoreKind,\n pass: boolean,\n score: number,\n reason: string,\n): AssertionOutcome {\n return {\n id,\n pass,\n reason,\n score: clampScore(score),\n scoreKind,\n }\n}\n\n/**\n * Options for include-keyword assertions.\n */\nexport interface MustIncludeAssertionOptions {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Keywords that must be present.\n */\n keywords: readonly string[]\n /**\n * Match mode for keywords.\n *\n * @default 'all'\n */\n mode?: 'all' | 'any'\n /**\n * Case-sensitive matching toggle.\n *\n * @default false\n */\n caseSensitive?: boolean\n}\n\n/**\n * Creates an assertion that requires specific keywords in model text.\n *\n * Example:\n * `expectMustInclude({ id: 'tone', keywords: ['calm', 'move'] })`\n */\nexport function expectMustInclude(options: MustIncludeAssertionOptions): Assertion {\n return async (context) => {\n if (options.keywords.length === 0) {\n return createOutcome(options.id, 'exact', true, 1, 'No required keywords configured.')\n }\n\n const caseSensitive = options.caseSensitive ?? false\n const normalizedText = normalizeMatchText(context.text, caseSensitive)\n const matches = options.keywords.filter((keyword) => {\n const normalizedKeyword = normalizeMatchText(keyword, caseSensitive)\n return normalizedText.includes(normalizedKeyword)\n })\n\n const mode = options.mode ?? 'all'\n const pass = mode === 'all'\n ? matches.length === options.keywords.length\n : matches.length > 0\n\n const score = options.keywords.length === 0 ? 1 : matches.length / options.keywords.length\n\n return createOutcome(\n options.id,\n 'exact',\n pass,\n score,\n pass\n ? `Matched ${matches.length}/${options.keywords.length} required keywords.`\n : `Matched ${matches.length}/${options.keywords.length} required keywords.`,\n )\n }\n}\n\n/**\n * Options for exclude-keyword assertions.\n */\nexport interface MustExcludeAssertionOptions {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Keywords that must not appear.\n */\n keywords: readonly string[]\n /**\n * Case-sensitive matching toggle.\n *\n * @default false\n */\n caseSensitive?: boolean\n}\n\n/**\n * Creates an assertion that forbids specific keywords.\n *\n * Example:\n * `expectMustExclude({ id: 'no-engine-dump', keywords: ['bestmove', 'ponder'] })`\n */\nexport function expectMustExclude(options: MustExcludeAssertionOptions): Assertion {\n return async (context) => {\n if (options.keywords.length === 0) {\n return createOutcome(options.id, 'exact', true, 1, 'No excluded keywords configured.')\n }\n\n const caseSensitive = options.caseSensitive ?? false\n const normalizedText = normalizeMatchText(context.text, caseSensitive)\n const forbiddenMatches = options.keywords.filter((keyword) => {\n const normalizedKeyword = normalizeMatchText(keyword, caseSensitive)\n return normalizedText.includes(normalizedKeyword)\n })\n\n const pass = forbiddenMatches.length === 0\n const score = pass ? 1 : 0\n\n return createOutcome(\n options.id,\n 'exact',\n pass,\n score,\n pass\n ? 'No forbidden keywords found.'\n : `Forbidden keywords found: ${forbiddenMatches.join(', ')}`,\n )\n }\n}\n\n/**\n * Options for regular-expression assertions.\n */\nexport interface RegexAssertionOptions {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Pattern to apply to model text.\n */\n pattern: RegExp\n}\n\n/**\n * Creates an assertion based on a regular expression.\n *\n * Example:\n * `expectRegex({ id: 'starts-with-act', pattern: /^<\\|ACT:/ })`\n */\nexport function expectRegex(options: RegexAssertionOptions): Assertion {\n return async (context) => {\n const pass = options.pattern.test(context.text)\n\n return createOutcome(\n options.id,\n 'exact',\n pass,\n pass ? 1 : 0,\n pass ? 'Regex matched response text.' : `Regex did not match: ${options.pattern}`,\n )\n }\n}\n\n/**\n * Options for structured-output assertions.\n */\nexport interface StructuredOutputAssertionOptions<TValue> {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Runtime validator for structured output.\n */\n validate: (value: unknown) => value is TValue\n /**\n * Optional failure reason.\n */\n failureReason?: string\n}\n\n/**\n * Creates an assertion for structured model output.\n *\n * Example:\n * `expectStructuredOutput({ id: 'json-shape', validate: isMySchema })`\n */\nexport function expectStructuredOutput<TValue>(options: StructuredOutputAssertionOptions<TValue>): Assertion {\n return async (context) => {\n const pass = options.validate(context.structuredOutput)\n\n return createOutcome(\n options.id,\n 'exact',\n pass,\n pass ? 1 : 0,\n pass ? 'Structured output matched validator.' : (options.failureReason ?? 'Structured output validation failed.'),\n )\n }\n}\n\n/**\n * Options for tool-call argument assertions.\n */\nexport interface ToolCallArgsAssertionOptions {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Tool name to inspect.\n */\n toolName: string\n /**\n * Runtime validator for tool arguments.\n */\n validate: (args: unknown) => boolean\n}\n\n/**\n * Creates an assertion for validating tool-call arguments.\n *\n * Example:\n * `expectToolCallArgs({ id: 'spark-command-shape', toolName: 'builtIn_sparkCommand', validate: isSparkArgs })`\n */\nexport function expectToolCallArgs(options: ToolCallArgsAssertionOptions): Assertion {\n return async (context) => {\n const targetCall = (context.toolCalls ?? []).find(call => call.name === options.toolName)\n\n if (targetCall == null) {\n return createOutcome(options.id, 'exact', false, 0, `Missing tool call: ${options.toolName}`)\n }\n\n const pass = options.validate(targetCall.args)\n\n return createOutcome(\n options.id,\n 'exact',\n pass,\n pass ? 1 : 0,\n pass ? `Tool call args validated for ${options.toolName}.` : `Tool call args validation failed for ${options.toolName}.`,\n )\n }\n}\n\n/**\n * Rubric judge result returned by teacher-model or rubric logic.\n */\nexport interface RubricJudgeResult {\n /**\n * Normalized score in the `0..1` range.\n */\n score: number\n /**\n * Judge explanation text.\n */\n reason: string\n /**\n * Optional judge model id.\n */\n judgeModel?: string\n}\n\n/**\n * Options for rubric assertions.\n */\nexport interface RubricAssertionOptions {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Async rubric judge callback.\n */\n judge: (context: AssertionContext) => Promise<RubricJudgeResult>\n /**\n * Minimum passing score.\n *\n * @default 0.7\n */\n minScore?: number\n}\n\n/**\n * Creates a rubric assertion driven by teacher-model style scoring.\n *\n * Example:\n * `expectRubric({ id: 'human-like-tone', judge: judgeFn, minScore: 0.8 })`\n */\nexport function expectRubric(options: RubricAssertionOptions): Assertion {\n return async (context) => {\n const result = await options.judge(context)\n const minScore = options.minScore ?? 0.7\n const normalizedScore = clampScore(result.score)\n const pass = normalizedScore >= minScore\n\n return createOutcome(\n options.id,\n 'judge',\n pass,\n normalizedScore,\n `${result.reason}${result.judgeModel ? ` (judge: ${result.judgeModel})` : ''}`,\n )\n }\n}\n\n/**\n * Options for custom assertions.\n */\nexport interface CustomAssertionOptions {\n /**\n * Stable assertion id.\n */\n id: string\n /**\n * Score family emitted by this custom assertion.\n */\n scoreKind: RunScoreKind\n /**\n * Custom evaluator callback.\n */\n evaluate: (context: AssertionContext) => Promise<{ pass: boolean, reason: string, score: number }> | { pass: boolean, reason: string, score: number }\n}\n\n/**\n * Creates a custom assertion with fully user-defined logic.\n *\n * Example:\n * `expectCustom({ id: 'stateful-window', scoreKind: 'exact', evaluate: (ctx) => ... })`\n */\nexport function expectCustom(options: CustomAssertionOptions): Assertion {\n return async (context) => {\n const result = await options.evaluate(context)\n\n return createOutcome(options.id, options.scoreKind, result.pass, result.score, result.reason)\n }\n}\n\n/**\n * Creates an inverse assertion.\n *\n * Example:\n * `expectNot(expectMustInclude({ id: 'contains-engine-word', keywords: ['bestmove'] }), { id: 'no-engine-word' })`\n */\nexport function expectNot(assertion: Assertion, options: { id: string }): Assertion {\n return async (context) => {\n const baseOutcome = await assertion(context)\n\n return createOutcome(\n options.id,\n baseOutcome.scoreKind,\n !baseOutcome.pass,\n 1 - baseOutcome.score,\n `NOT(${baseOutcome.id}): ${baseOutcome.reason}`,\n )\n }\n}\n\n/**\n * Executes assertion list and returns all outcomes.\n *\n * Call stack:\n *\n * {@link evaluateAssertions}\n * -> `assertion(context)`\n * -> {@link AssertionOutcome}[]\n */\nexport async function evaluateAssertions(\n assertions: readonly Assertion[],\n context: Omit<AssertionContext, 'state'> & { state?: AssertionState },\n): Promise<AssertionOutcome[]> {\n const state = context.state ?? new Map<string, unknown>()\n const normalizedContext: AssertionContext = {\n state,\n structuredOutput: context.structuredOutput,\n text: context.text,\n toolCalls: context.toolCalls,\n }\n\n const outcomes: AssertionOutcome[] = []\n\n for (const assertion of assertions) {\n outcomes.push(await assertion(normalizedContext))\n }\n\n return outcomes\n}\n\n/**\n * Converts assertion outcomes to run-score tuples consumed by aggregation.\n */\nexport function toRunScores(outcomes: readonly AssertionOutcome[]): RunScore[] {\n return outcomes.map(outcome => ({\n kind: outcome.scoreKind,\n score: outcome.score,\n }))\n}\n\n/**\n * Returns failing assertion outcomes in original order.\n */\nexport function collectFailedAssertions(outcomes: readonly AssertionOutcome[]): AssertionOutcome[] {\n return outcomes.filter(outcome => !outcome.pass)\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as requiredEnvFrom, i as envFrom, n as EnvValueType, r as RequiredEnvFromOptions, t as EnvFromOptions } from "../../env-DtpjACOW.mjs";
1
+ import { a as requiredEnvFrom, i as envFrom, n as EnvValueType, r as RequiredEnvFromOptions, t as EnvFromOptions } from "../../env-BeHv_5mo.mjs";
2
2
  import { createOpenAI } from "@xsai-ext/providers/create";
3
3
 
4
4
  //#region src/core/inference-executors/retry-policy.d.ts
@@ -1,4 +1,4 @@
1
- import { n as requiredEnvFrom, t as envFrom } from "../../env-C7X81PWa.mjs";
1
+ import { n as requiredEnvFrom, t as envFrom } from "../../env--94B0UtW.mjs";
2
2
  import process from "node:process";
3
3
  import { errorMessageFrom, errorNameFrom, sleep } from "@moeru/std";
4
4
  import { createOpenAI } from "@xsai-ext/providers/create";
@@ -1,4 +1,4 @@
1
- import { B as AggregatedRunResults } from "../../../index-BDMEAmf2.mjs";
1
+ import { H as AggregatedRunResults } from "../../../index-DBZKkpBe.mjs";
2
2
 
3
3
  //#region src/core/processors/results/policies/hybrid-threshold.d.ts
4
4
  /**
@@ -1,2 +1,3 @@
1
- import { $ as ScheduledTaskMatrixMeta, A as TaskModelSelectionOptions, B as AggregatedRunResults, C as RunScheduledTasksOptions, D as runScheduledTasks, E as ScheduledTaskExecutor, F as collectEvalEntries, G as aggregateRunResults, H as RunResult, I as CreateVievalRunnerRuntimeContextOptions, J as RunnerMatrixDefinition, K as CreateRunnerScheduleOptions, L as RunnerRuntimeContext, O as CreateTaskExecutionContextOptions, P as asProjectRelativePath, Q as ScheduledTaskMatrix, R as createRunnerRuntimeContext, T as RunnerTaskState, U as RunScore, V as AggregatedRunSummary, W as RunScoreKind, X as RunnerMatrixSelection, Y as RunnerMatrixInput, Z as ScheduledTask, at as CacheFileOptions, et as createRunnerSchedule, it as CacheFileHandle, j as createTaskExecutionContext, k as TaskExecutionContext, nt as createFilesystemTaskCacheRuntime, ot as CacheNamespace, q as InferenceExecutor, rt as normalizeCacheFilePathSegments, st as TaskCacheRuntime, tt as CreateFilesystemTaskCacheRuntimeOptions, w as RunnerExecutionError, z as AggregatedProviderSummary } from "../../index-BDMEAmf2.mjs";
2
- export { AggregatedProviderSummary, AggregatedRunResults, AggregatedRunSummary, CacheFileHandle, CacheFileOptions, CacheNamespace, CreateFilesystemTaskCacheRuntimeOptions, CreateRunnerScheduleOptions, CreateTaskExecutionContextOptions, CreateVievalRunnerRuntimeContextOptions, InferenceExecutor, RunResult, RunScheduledTasksOptions, RunScore, RunScoreKind, RunnerExecutionError, RunnerMatrixDefinition, RunnerMatrixInput, RunnerMatrixSelection, RunnerRuntimeContext, RunnerTaskState, ScheduledTask, ScheduledTaskExecutor, ScheduledTaskMatrix, ScheduledTaskMatrixMeta, TaskCacheRuntime, TaskExecutionContext, TaskModelSelectionOptions, aggregateRunResults, asProjectRelativePath, collectEvalEntries, createFilesystemTaskCacheRuntime, createRunnerRuntimeContext, createRunnerSchedule, createTaskExecutionContext, normalizeCacheFilePathSegments, runScheduledTasks };
1
+ import { $ as ScheduledTask, A as CreateTaskExecutionContextOptions, B as createRunnerRuntimeContext, D as RunnerTaskState, E as RunnerExecutionError, G as RunScore, H as AggregatedRunResults, I as asProjectRelativePath, J as CreateRunnerScheduleOptions, K as RunScoreKind, L as collectEvalEntries, M as TaskModelSelectionOptions, N as createTaskExecutionContext, O as ScheduledTaskExecutor, Q as RunnerMatrixSelection, R as CreateVievalRunnerRuntimeContextOptions, T as RunScheduledTasksOptions, U as AggregatedRunSummary, V as AggregatedProviderSummary, W as RunResult, X as RunnerMatrixDefinition, Y as InferenceExecutor, Z as RunnerMatrixInput, at as normalizeCacheFilePathSegments, ct as CacheNamespace, et as ScheduledTaskMatrix, it as createFilesystemTaskCacheRuntime, j as TaskExecutionContext, k as runScheduledTasks, lt as TaskCacheRuntime, nt as createRunnerSchedule, ot as CacheFileHandle, q as aggregateRunResults, rt as CreateFilesystemTaskCacheRuntimeOptions, st as CacheFileOptions, tt as ScheduledTaskMatrixMeta, z as RunnerRuntimeContext } from "../../index-DBZKkpBe.mjs";
2
+ import { a as SchedulerMiddleware, c as SchedulerScopeContext, i as SchedulerConcurrencyConfig, n as getActiveScopes, o as SchedulerRuntime, r as CreateSchedulerRuntimeOptions, s as SchedulerScope, t as createSchedulerRuntime } from "../../index-fakXoZEe.mjs";
3
+ export { AggregatedProviderSummary, AggregatedRunResults, AggregatedRunSummary, CacheFileHandle, CacheFileOptions, CacheNamespace, CreateFilesystemTaskCacheRuntimeOptions, CreateRunnerScheduleOptions, CreateSchedulerRuntimeOptions, CreateTaskExecutionContextOptions, CreateVievalRunnerRuntimeContextOptions, InferenceExecutor, RunResult, RunScheduledTasksOptions, RunScore, RunScoreKind, RunnerExecutionError, RunnerMatrixDefinition, RunnerMatrixInput, RunnerMatrixSelection, RunnerRuntimeContext, RunnerTaskState, ScheduledTask, ScheduledTaskExecutor, ScheduledTaskMatrix, ScheduledTaskMatrixMeta, SchedulerConcurrencyConfig, SchedulerMiddleware, SchedulerRuntime, SchedulerScope, SchedulerScopeContext, TaskCacheRuntime, TaskExecutionContext, TaskModelSelectionOptions, aggregateRunResults, asProjectRelativePath, collectEvalEntries, createFilesystemTaskCacheRuntime, createRunnerRuntimeContext, createRunnerSchedule, createSchedulerRuntime, createTaskExecutionContext, getActiveScopes, normalizeCacheFilePathSegments, runScheduledTasks };