@abassey/aid 0.1.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 (53) hide show
  1. package/dist/agents/index.cjs +741 -0
  2. package/dist/agents/index.d.cts +78 -0
  3. package/dist/agents/index.d.ts +78 -0
  4. package/dist/agents/index.js +741 -0
  5. package/dist/ai-AWJOUXFM.js +9 -0
  6. package/dist/ai-DOAYJKKI.cjs +9 -0
  7. package/dist/chunk-2TNYBUNK.js +124 -0
  8. package/dist/chunk-3LGKZRGY.cjs +124 -0
  9. package/dist/chunk-AUR2BBB5.cjs +1436 -0
  10. package/dist/chunk-IJLTRQF4.cjs +276 -0
  11. package/dist/chunk-JPD7UBAZ.js +58 -0
  12. package/dist/chunk-M4RQALTT.js +276 -0
  13. package/dist/chunk-NB65IHJE.cjs +58 -0
  14. package/dist/chunk-YNIEOBDF.js +1436 -0
  15. package/dist/client/index.cjs +18 -0
  16. package/dist/client/index.d.cts +8 -0
  17. package/dist/client/index.d.ts +8 -0
  18. package/dist/client/index.js +18 -0
  19. package/dist/errors-CUVTnseb.d.ts +13 -0
  20. package/dist/errors-CgCce4cK.d.cts +158 -0
  21. package/dist/errors-CgCce4cK.d.ts +158 -0
  22. package/dist/errors-zAPbTlpe.d.cts +13 -0
  23. package/dist/eval/index.cjs +308 -0
  24. package/dist/eval/index.d.cts +106 -0
  25. package/dist/eval/index.d.ts +106 -0
  26. package/dist/eval/index.js +308 -0
  27. package/dist/index.cjs +35 -0
  28. package/dist/index.d.cts +107 -0
  29. package/dist/index.d.ts +107 -0
  30. package/dist/index.js +35 -0
  31. package/dist/middleware/index.cjs +201 -0
  32. package/dist/middleware/index.d.cts +36 -0
  33. package/dist/middleware/index.d.ts +36 -0
  34. package/dist/middleware/index.js +201 -0
  35. package/dist/observability/index.cjs +147 -0
  36. package/dist/observability/index.d.cts +30 -0
  37. package/dist/observability/index.d.ts +30 -0
  38. package/dist/observability/index.js +147 -0
  39. package/dist/react/index.cjs +253 -0
  40. package/dist/react/index.d.cts +64 -0
  41. package/dist/react/index.d.ts +64 -0
  42. package/dist/react/index.js +253 -0
  43. package/dist/serve/index.cjs +545 -0
  44. package/dist/serve/index.d.cts +69 -0
  45. package/dist/serve/index.d.ts +69 -0
  46. package/dist/serve/index.js +545 -0
  47. package/dist/types-BJReASS-.d.cts +196 -0
  48. package/dist/types-BJReASS-.d.ts +196 -0
  49. package/dist/types-CguX3F16.d.cts +173 -0
  50. package/dist/types-CrFH-_qp.d.cts +68 -0
  51. package/dist/types-DvdzPmW0.d.ts +173 -0
  52. package/dist/types-qfE32ADy.d.ts +68 -0
  53. package/package.json +144 -0
@@ -0,0 +1,308 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/eval/suite.ts
2
+ function evalSuite(name) {
3
+ const cases = [];
4
+ const scorers = [];
5
+ let models = ["sonnet"];
6
+ let threshold = 0.5;
7
+ let concurrencyLimit = 1;
8
+ let aiFn = null;
9
+ const builder = {
10
+ case(caseName, testCase) {
11
+ cases.push({ name: caseName, ...testCase });
12
+ return builder;
13
+ },
14
+ scorer(scorer) {
15
+ scorers.push(scorer);
16
+ return builder;
17
+ },
18
+ models(m) {
19
+ models = m;
20
+ return builder;
21
+ },
22
+ threshold(value) {
23
+ threshold = value;
24
+ return builder;
25
+ },
26
+ concurrency(limit) {
27
+ concurrencyLimit = limit;
28
+ return builder;
29
+ },
30
+ ai(fn) {
31
+ aiFn = fn;
32
+ return builder;
33
+ },
34
+ async run() {
35
+ const ai = await _asyncNullishCoalesce(aiFn, async () => ( (await Promise.resolve().then(() => _interopRequireWildcard(require("../ai-DOAYJKKI.cjs")))).ai));
36
+ const jobs = [];
37
+ for (const evalCase of cases) {
38
+ for (const model of models) {
39
+ jobs.push({ evalCase, model });
40
+ }
41
+ }
42
+ const results = [];
43
+ if (concurrencyLimit <= 1) {
44
+ for (const job of jobs) {
45
+ results.push(await runSingleCase(ai, job.evalCase, job.model, scorers, threshold));
46
+ }
47
+ } else {
48
+ let index = 0;
49
+ const workers = Array.from({ length: Math.min(concurrencyLimit, jobs.length) }, async () => {
50
+ while (index < jobs.length) {
51
+ const jobIndex = index++;
52
+ const job = jobs[jobIndex];
53
+ const result = await runSingleCase(ai, job.evalCase, job.model, scorers, threshold);
54
+ results.push(result);
55
+ }
56
+ });
57
+ await Promise.all(workers);
58
+ }
59
+ return buildResults(name, results, scorers);
60
+ }
61
+ };
62
+ return builder;
63
+ }
64
+ async function runSingleCase(ai, evalCase, model, scorers, threshold) {
65
+ let output = "";
66
+ let tokens = { input: 0, output: 0, total: 0 };
67
+ let cost = 0;
68
+ let latencyMs = 0;
69
+ const scores = {};
70
+ try {
71
+ const startTime = Date.now();
72
+ const response = await ai(evalCase.input, {
73
+ model,
74
+ system: evalCase.system
75
+ });
76
+ latencyMs = Date.now() - startTime;
77
+ output = response.text;
78
+ tokens = response.tokens;
79
+ cost = response.cost;
80
+ for (const scorer of scorers) {
81
+ scores[scorer.name] = await scorer.score(output, evalCase.expected, evalCase.input);
82
+ }
83
+ } catch (error) {
84
+ for (const scorer of scorers) {
85
+ scores[scorer.name] = 0;
86
+ }
87
+ }
88
+ const pass = Object.values(scores).every((s) => s >= threshold);
89
+ return {
90
+ case: evalCase.name,
91
+ model,
92
+ output,
93
+ scores,
94
+ tokens,
95
+ cost,
96
+ latencyMs,
97
+ pass
98
+ };
99
+ }
100
+ function buildResults(suiteName, cases, scorers) {
101
+ const byModel = {};
102
+ const modelGroups = /* @__PURE__ */ new Map();
103
+ for (const c of cases) {
104
+ if (!modelGroups.has(c.model)) modelGroups.set(c.model, []);
105
+ modelGroups.get(c.model).push(c);
106
+ }
107
+ for (const [model, modelCases] of modelGroups) {
108
+ const allScores2 = modelCases.flatMap((c) => Object.values(c.scores));
109
+ byModel[model] = {
110
+ avgScore: allScores2.length > 0 ? allScores2.reduce((a, b) => a + b, 0) / allScores2.length : 0,
111
+ passRate: modelCases.filter((c) => c.pass).length / modelCases.length,
112
+ totalCost: modelCases.reduce((sum, c) => sum + c.cost, 0),
113
+ totalTokens: {
114
+ input: modelCases.reduce((sum, c) => sum + c.tokens.input, 0),
115
+ output: modelCases.reduce((sum, c) => sum + c.tokens.output, 0),
116
+ total: modelCases.reduce((sum, c) => sum + c.tokens.total, 0)
117
+ },
118
+ avgLatencyMs: modelCases.reduce((sum, c) => sum + c.latencyMs, 0) / modelCases.length
119
+ };
120
+ }
121
+ const byScorer = {};
122
+ for (const scorer of scorers) {
123
+ const scores = cases.map((c) => _nullishCoalesce(c.scores[scorer.name], () => ( 0)));
124
+ byScorer[scorer.name] = {
125
+ avgScore: scores.length > 0 ? scores.reduce((a, b) => a + b, 0) / scores.length : 0
126
+ };
127
+ }
128
+ const allScores = cases.flatMap((c) => Object.values(c.scores));
129
+ const overall = {
130
+ avgScore: allScores.length > 0 ? allScores.reduce((a, b) => a + b, 0) / allScores.length : 0,
131
+ passRate: cases.length > 0 ? cases.filter((c) => c.pass).length / cases.length : 0,
132
+ totalCost: cases.reduce((sum, c) => sum + c.cost, 0)
133
+ };
134
+ return {
135
+ suite: suiteName,
136
+ timestamp: /* @__PURE__ */ new Date(),
137
+ cases,
138
+ summary: { byModel, byScorer, overall }
139
+ };
140
+ }
141
+
142
+ // src/eval/scorers.ts
143
+ function exactMatch() {
144
+ return {
145
+ name: "exactMatch",
146
+ score(output, expected) {
147
+ if (expected === void 0) return 0;
148
+ return output.trim() === expected.trim() ? 1 : 0;
149
+ }
150
+ };
151
+ }
152
+ function contains(substring) {
153
+ return {
154
+ name: `contains(${substring})`,
155
+ score(output) {
156
+ return output.includes(substring) ? 1 : 0;
157
+ }
158
+ };
159
+ }
160
+ function regex(pattern) {
161
+ return {
162
+ name: `regex(${pattern})`,
163
+ score(output) {
164
+ return pattern.test(output) ? 1 : 0;
165
+ }
166
+ };
167
+ }
168
+ function custom(fn, name) {
169
+ return {
170
+ name: _nullishCoalesce(name, () => ( "custom")),
171
+ score(output, expected, input) {
172
+ const result = fn(output, expected, input);
173
+ if (result instanceof Promise) {
174
+ return result.then((raw) => Math.max(0, Math.min(1, raw)));
175
+ }
176
+ return Math.max(0, Math.min(1, result));
177
+ }
178
+ };
179
+ }
180
+
181
+ // src/eval/llm-judge.ts
182
+ var BUILT_IN_CRITERIA = {
183
+ accuracy: "Does the output correctly and factually answer the input?",
184
+ relevance: "Is the output relevant and on-topic for the input?",
185
+ coherence: "Is the output well-structured, logical, and coherent?",
186
+ helpfulness: "Is the output helpful, actionable, and complete?"
187
+ };
188
+ function llmJudge(name, options) {
189
+ const model = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.model]), () => ( "sonnet"));
190
+ const criteria = _nullishCoalesce(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _2 => _2.criteria]), () => ( BUILT_IN_CRITERIA[name])), () => ( name));
191
+ return {
192
+ name: `llmJudge(${name})`,
193
+ async score(output, expected, input) {
194
+ const ai = await _asyncNullishCoalesce(await _asyncOptionalChain([options, 'optionalAccess', async _3 => _3.ai]), async () => ( (await Promise.resolve().then(() => _interopRequireWildcard(require("../ai-DOAYJKKI.cjs")))).ai));
195
+ const prompt = [
196
+ "You are evaluating an AI output. Score from 0.0 to 1.0.",
197
+ "",
198
+ `Criteria: ${criteria}`,
199
+ `Input: ${input}`,
200
+ `Expected: ${_nullishCoalesce(expected, () => ( "Not provided"))}`,
201
+ `Actual Output: ${output}`,
202
+ "",
203
+ 'Respond with JSON only: { "score": <number 0.0-1.0>, "reasoning": "<brief explanation>" }'
204
+ ].join("\n");
205
+ try {
206
+ const response = await ai(prompt, {
207
+ model,
208
+ system: "You are a precise evaluator. Respond with valid JSON only."
209
+ });
210
+ const parsed = JSON.parse(response.text);
211
+ if (typeof parsed.score !== "number") return 0;
212
+ return Math.max(0, Math.min(1, parsed.score));
213
+ } catch (e) {
214
+ return 0;
215
+ }
216
+ }
217
+ };
218
+ }
219
+
220
+ // src/eval/agent-test.ts
221
+ async function testAgent(agent, cases) {
222
+ const results = [];
223
+ for (const testCase of cases) {
224
+ const caseResult = await runAgentTestCase(agent, testCase);
225
+ results.push(caseResult);
226
+ }
227
+ const passed = results.filter((r) => r.passed).length;
228
+ const failed = results.filter((r) => !r.passed).length;
229
+ return {
230
+ agent: agent.name,
231
+ cases: results,
232
+ summary: { passed, failed, total: results.length }
233
+ };
234
+ }
235
+ async function runAgentTestCase(agent, testCase) {
236
+ const failures = [];
237
+ let text = "";
238
+ let toolsCalled = [];
239
+ let steps = 0;
240
+ let cost = 0;
241
+ let latencyMs = 0;
242
+ try {
243
+ const result = await agent.run(testCase.input);
244
+ text = result.text;
245
+ toolsCalled = result.toolCalls.map((tc) => tc.name);
246
+ steps = result.steps.length;
247
+ cost = result.cost;
248
+ latencyMs = result.latencyMs;
249
+ if (testCase.expectContains) {
250
+ for (const expected of testCase.expectContains) {
251
+ if (!text.includes(expected)) {
252
+ failures.push(`Expected output to contain "${expected}"`);
253
+ }
254
+ }
255
+ }
256
+ if (testCase.expectNotContains) {
257
+ for (const notExpected of testCase.expectNotContains) {
258
+ if (text.includes(notExpected)) {
259
+ failures.push(`Expected output to NOT contain "${notExpected}"`);
260
+ }
261
+ }
262
+ }
263
+ if (testCase.expectToolCalled) {
264
+ if (!toolsCalled.includes(testCase.expectToolCalled)) {
265
+ failures.push(`Expected tool "${testCase.expectToolCalled}" to be called but it was not`);
266
+ }
267
+ }
268
+ if (testCase.expectToolsCalled) {
269
+ for (const tool of testCase.expectToolsCalled) {
270
+ if (!toolsCalled.includes(tool)) {
271
+ failures.push(`Expected tool "${tool}" to be called but it was not`);
272
+ }
273
+ }
274
+ }
275
+ if (testCase.expectMaxSteps !== void 0) {
276
+ if (steps > testCase.expectMaxSteps) {
277
+ failures.push(`Expected at most ${testCase.expectMaxSteps} steps but agent took ${steps}`);
278
+ }
279
+ }
280
+ if (testCase.expectMatch) {
281
+ if (!testCase.expectMatch.test(text)) {
282
+ failures.push(`Expected output to match ${testCase.expectMatch} but it did not`);
283
+ }
284
+ }
285
+ } catch (error) {
286
+ const message = error instanceof Error ? error.message : String(error);
287
+ failures.push(`Agent execution failed: ${message}`);
288
+ }
289
+ return {
290
+ name: testCase.name,
291
+ passed: failures.length === 0,
292
+ text,
293
+ toolsCalled,
294
+ steps,
295
+ cost,
296
+ latencyMs,
297
+ failures
298
+ };
299
+ }
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+ exports.contains = contains; exports.custom = custom; exports.evalSuite = evalSuite; exports.exactMatch = exactMatch; exports.llmJudge = llmJudge; exports.regex = regex; exports.testAgent = testAgent;
@@ -0,0 +1,106 @@
1
+ import { g as TokenUsage, a as AiFunction } from '../types-BJReASS-.cjs';
2
+ import { a as Agent } from '../types-CguX3F16.cjs';
3
+ import '../errors-zAPbTlpe.cjs';
4
+
5
+ interface Scorer {
6
+ name: string;
7
+ score(output: string, expected: string | undefined, input: string): number | Promise<number>;
8
+ }
9
+ interface EvalCaseInput {
10
+ input: string;
11
+ expected?: string;
12
+ system?: string;
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ interface EvalCase extends EvalCaseInput {
16
+ name: string;
17
+ }
18
+ interface EvalCaseResult {
19
+ case: string;
20
+ model: string;
21
+ output: string;
22
+ scores: Record<string, number>;
23
+ tokens: TokenUsage;
24
+ cost: number;
25
+ latencyMs: number;
26
+ pass: boolean;
27
+ }
28
+ interface ModelEvalSummary {
29
+ avgScore: number;
30
+ passRate: number;
31
+ totalCost: number;
32
+ totalTokens: TokenUsage;
33
+ avgLatencyMs: number;
34
+ }
35
+ interface EvalResults {
36
+ suite: string;
37
+ timestamp: Date;
38
+ cases: EvalCaseResult[];
39
+ summary: {
40
+ byModel: Record<string, ModelEvalSummary>;
41
+ byScorer: Record<string, {
42
+ avgScore: number;
43
+ }>;
44
+ overall: {
45
+ avgScore: number;
46
+ passRate: number;
47
+ totalCost: number;
48
+ };
49
+ };
50
+ }
51
+ interface EvalSuiteBuilder {
52
+ case(name: string, testCase: EvalCaseInput): EvalSuiteBuilder;
53
+ scorer(scorer: Scorer): EvalSuiteBuilder;
54
+ models(models: string[]): EvalSuiteBuilder;
55
+ threshold(value: number): EvalSuiteBuilder;
56
+ concurrency(limit: number): EvalSuiteBuilder;
57
+ ai(aiFn: AiFunction): EvalSuiteBuilder;
58
+ run(): Promise<EvalResults>;
59
+ }
60
+ interface LlmJudgeOptions {
61
+ model?: string;
62
+ criteria?: string;
63
+ ai?: AiFunction;
64
+ }
65
+ interface AgentTestCase {
66
+ name: string;
67
+ input: string;
68
+ expectContains?: string[];
69
+ expectNotContains?: string[];
70
+ expectToolCalled?: string;
71
+ expectToolsCalled?: string[];
72
+ expectMaxSteps?: number;
73
+ expectMatch?: RegExp;
74
+ }
75
+ interface AgentTestCaseResult {
76
+ name: string;
77
+ passed: boolean;
78
+ text: string;
79
+ toolsCalled: string[];
80
+ steps: number;
81
+ cost: number;
82
+ latencyMs: number;
83
+ failures: string[];
84
+ }
85
+ interface AgentTestResults {
86
+ agent: string;
87
+ cases: AgentTestCaseResult[];
88
+ summary: {
89
+ passed: number;
90
+ failed: number;
91
+ total: number;
92
+ };
93
+ }
94
+
95
+ declare function evalSuite(name: string): EvalSuiteBuilder;
96
+
97
+ declare function exactMatch(): Scorer;
98
+ declare function contains(substring: string): Scorer;
99
+ declare function regex(pattern: RegExp): Scorer;
100
+ declare function custom(fn: (output: string, expected: string | undefined, input: string) => number | Promise<number>, name?: string): Scorer;
101
+
102
+ declare function llmJudge(name: string, options?: LlmJudgeOptions): Scorer;
103
+
104
+ declare function testAgent(agent: Agent, cases: AgentTestCase[]): Promise<AgentTestResults>;
105
+
106
+ export { type AgentTestCase, type AgentTestCaseResult, type AgentTestResults, type EvalCase, type EvalCaseInput, type EvalCaseResult, type EvalResults, type EvalSuiteBuilder, type LlmJudgeOptions, type ModelEvalSummary, type Scorer, contains, custom, evalSuite, exactMatch, llmJudge, regex, testAgent };
@@ -0,0 +1,106 @@
1
+ import { g as TokenUsage, a as AiFunction } from '../types-BJReASS-.js';
2
+ import { a as Agent } from '../types-DvdzPmW0.js';
3
+ import '../errors-CUVTnseb.js';
4
+
5
+ interface Scorer {
6
+ name: string;
7
+ score(output: string, expected: string | undefined, input: string): number | Promise<number>;
8
+ }
9
+ interface EvalCaseInput {
10
+ input: string;
11
+ expected?: string;
12
+ system?: string;
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ interface EvalCase extends EvalCaseInput {
16
+ name: string;
17
+ }
18
+ interface EvalCaseResult {
19
+ case: string;
20
+ model: string;
21
+ output: string;
22
+ scores: Record<string, number>;
23
+ tokens: TokenUsage;
24
+ cost: number;
25
+ latencyMs: number;
26
+ pass: boolean;
27
+ }
28
+ interface ModelEvalSummary {
29
+ avgScore: number;
30
+ passRate: number;
31
+ totalCost: number;
32
+ totalTokens: TokenUsage;
33
+ avgLatencyMs: number;
34
+ }
35
+ interface EvalResults {
36
+ suite: string;
37
+ timestamp: Date;
38
+ cases: EvalCaseResult[];
39
+ summary: {
40
+ byModel: Record<string, ModelEvalSummary>;
41
+ byScorer: Record<string, {
42
+ avgScore: number;
43
+ }>;
44
+ overall: {
45
+ avgScore: number;
46
+ passRate: number;
47
+ totalCost: number;
48
+ };
49
+ };
50
+ }
51
+ interface EvalSuiteBuilder {
52
+ case(name: string, testCase: EvalCaseInput): EvalSuiteBuilder;
53
+ scorer(scorer: Scorer): EvalSuiteBuilder;
54
+ models(models: string[]): EvalSuiteBuilder;
55
+ threshold(value: number): EvalSuiteBuilder;
56
+ concurrency(limit: number): EvalSuiteBuilder;
57
+ ai(aiFn: AiFunction): EvalSuiteBuilder;
58
+ run(): Promise<EvalResults>;
59
+ }
60
+ interface LlmJudgeOptions {
61
+ model?: string;
62
+ criteria?: string;
63
+ ai?: AiFunction;
64
+ }
65
+ interface AgentTestCase {
66
+ name: string;
67
+ input: string;
68
+ expectContains?: string[];
69
+ expectNotContains?: string[];
70
+ expectToolCalled?: string;
71
+ expectToolsCalled?: string[];
72
+ expectMaxSteps?: number;
73
+ expectMatch?: RegExp;
74
+ }
75
+ interface AgentTestCaseResult {
76
+ name: string;
77
+ passed: boolean;
78
+ text: string;
79
+ toolsCalled: string[];
80
+ steps: number;
81
+ cost: number;
82
+ latencyMs: number;
83
+ failures: string[];
84
+ }
85
+ interface AgentTestResults {
86
+ agent: string;
87
+ cases: AgentTestCaseResult[];
88
+ summary: {
89
+ passed: number;
90
+ failed: number;
91
+ total: number;
92
+ };
93
+ }
94
+
95
+ declare function evalSuite(name: string): EvalSuiteBuilder;
96
+
97
+ declare function exactMatch(): Scorer;
98
+ declare function contains(substring: string): Scorer;
99
+ declare function regex(pattern: RegExp): Scorer;
100
+ declare function custom(fn: (output: string, expected: string | undefined, input: string) => number | Promise<number>, name?: string): Scorer;
101
+
102
+ declare function llmJudge(name: string, options?: LlmJudgeOptions): Scorer;
103
+
104
+ declare function testAgent(agent: Agent, cases: AgentTestCase[]): Promise<AgentTestResults>;
105
+
106
+ export { type AgentTestCase, type AgentTestCaseResult, type AgentTestResults, type EvalCase, type EvalCaseInput, type EvalCaseResult, type EvalResults, type EvalSuiteBuilder, type LlmJudgeOptions, type ModelEvalSummary, type Scorer, contains, custom, evalSuite, exactMatch, llmJudge, regex, testAgent };