@cogitator-ai/evals 0.8.0 → 0.10.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 (116) hide show
  1. package/README.md +255 -54
  2. package/dist/assertions/error-rate.d.ts +8 -0
  3. package/dist/assertions/error-rate.d.ts.map +1 -0
  4. package/dist/assertions/error-rate.js +27 -0
  5. package/dist/assertions/error-rate.js.map +1 -0
  6. package/dist/assertions/index.d.ts +3 -0
  7. package/dist/assertions/index.d.ts.map +1 -1
  8. package/dist/assertions/index.js +1 -0
  9. package/dist/assertions/index.js.map +1 -1
  10. package/dist/assertions/regression.d.ts.map +1 -1
  11. package/dist/assertions/regression.js +3 -1
  12. package/dist/assertions/regression.js.map +1 -1
  13. package/dist/assertions/threshold.d.ts.map +1 -1
  14. package/dist/assertions/threshold.js +4 -1
  15. package/dist/assertions/threshold.js.map +1 -1
  16. package/dist/datasets/csv-loader.d.ts +5 -0
  17. package/dist/datasets/csv-loader.d.ts.map +1 -1
  18. package/dist/datasets/csv-loader.js +89 -7
  19. package/dist/datasets/csv-loader.js.map +1 -1
  20. package/dist/datasets/dataset.d.ts +11 -2
  21. package/dist/datasets/dataset.d.ts.map +1 -1
  22. package/dist/datasets/dataset.js +42 -13
  23. package/dist/datasets/dataset.js.map +1 -1
  24. package/dist/datasets/issues.d.ts +4 -0
  25. package/dist/datasets/issues.d.ts.map +1 -0
  26. package/dist/datasets/issues.js +7 -0
  27. package/dist/datasets/issues.js.map +1 -0
  28. package/dist/datasets/jsonl-loader.d.ts.map +1 -1
  29. package/dist/datasets/jsonl-loader.js +6 -1
  30. package/dist/datasets/jsonl-loader.js.map +1 -1
  31. package/dist/eval-builder.d.ts +3 -0
  32. package/dist/eval-builder.d.ts.map +1 -1
  33. package/dist/eval-builder.js +7 -0
  34. package/dist/eval-builder.js.map +1 -1
  35. package/dist/eval-comparison.d.ts +7 -0
  36. package/dist/eval-comparison.d.ts.map +1 -1
  37. package/dist/eval-comparison.js +42 -12
  38. package/dist/eval-comparison.js.map +1 -1
  39. package/dist/eval-suite.d.ts +55 -8
  40. package/dist/eval-suite.d.ts.map +1 -1
  41. package/dist/eval-suite.js +254 -53
  42. package/dist/eval-suite.js.map +1 -1
  43. package/dist/index.d.ts +14 -8
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +6 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/matchers.d.ts +68 -0
  48. package/dist/matchers.d.ts.map +1 -0
  49. package/dist/matchers.js +112 -0
  50. package/dist/matchers.js.map +1 -0
  51. package/dist/metrics/custom.d.ts +19 -7
  52. package/dist/metrics/custom.d.ts.map +1 -1
  53. package/dist/metrics/custom.js +5 -0
  54. package/dist/metrics/custom.js.map +1 -1
  55. package/dist/metrics/index.d.ts +8 -4
  56. package/dist/metrics/index.d.ts.map +1 -1
  57. package/dist/metrics/index.js +4 -2
  58. package/dist/metrics/index.js.map +1 -1
  59. package/dist/metrics/llm-judge.d.ts +20 -1
  60. package/dist/metrics/llm-judge.d.ts.map +1 -1
  61. package/dist/metrics/llm-judge.js +162 -20
  62. package/dist/metrics/llm-judge.js.map +1 -1
  63. package/dist/metrics/matching.d.ts +28 -0
  64. package/dist/metrics/matching.d.ts.map +1 -0
  65. package/dist/metrics/matching.js +124 -0
  66. package/dist/metrics/matching.js.map +1 -0
  67. package/dist/metrics/retrieval.d.ts +21 -0
  68. package/dist/metrics/retrieval.d.ts.map +1 -0
  69. package/dist/metrics/retrieval.js +108 -0
  70. package/dist/metrics/retrieval.js.map +1 -0
  71. package/dist/metrics/statistical.d.ts +28 -0
  72. package/dist/metrics/statistical.d.ts.map +1 -1
  73. package/dist/metrics/statistical.js +61 -0
  74. package/dist/metrics/statistical.js.map +1 -1
  75. package/dist/metrics/tool-calls.d.ts +43 -0
  76. package/dist/metrics/tool-calls.d.ts.map +1 -0
  77. package/dist/metrics/tool-calls.js +106 -0
  78. package/dist/metrics/tool-calls.js.map +1 -0
  79. package/dist/metrics/types.d.ts +53 -5
  80. package/dist/metrics/types.d.ts.map +1 -1
  81. package/dist/metrics/types.js.map +1 -1
  82. package/dist/reporters/ci.d.ts +4 -0
  83. package/dist/reporters/ci.d.ts.map +1 -1
  84. package/dist/reporters/ci.js +5 -1
  85. package/dist/reporters/ci.js.map +1 -1
  86. package/dist/reporters/console.d.ts.map +1 -1
  87. package/dist/reporters/console.js +11 -4
  88. package/dist/reporters/console.js.map +1 -1
  89. package/dist/reporters/csv.d.ts.map +1 -1
  90. package/dist/reporters/csv.js +5 -2
  91. package/dist/reporters/csv.js.map +1 -1
  92. package/dist/reporters/format.d.ts +19 -0
  93. package/dist/reporters/format.d.ts.map +1 -0
  94. package/dist/reporters/format.js +31 -0
  95. package/dist/reporters/format.js.map +1 -0
  96. package/dist/reporters/github.d.ts +11 -0
  97. package/dist/reporters/github.d.ts.map +1 -0
  98. package/dist/reporters/github.js +95 -0
  99. package/dist/reporters/github.js.map +1 -0
  100. package/dist/reporters/index.d.ts +44 -20
  101. package/dist/reporters/index.d.ts.map +1 -1
  102. package/dist/reporters/index.js +14 -3
  103. package/dist/reporters/index.js.map +1 -1
  104. package/dist/reporters/junit.d.ts +8 -0
  105. package/dist/reporters/junit.d.ts.map +1 -0
  106. package/dist/reporters/junit.js +107 -0
  107. package/dist/reporters/junit.js.map +1 -0
  108. package/dist/schema.d.ts +25 -0
  109. package/dist/schema.d.ts.map +1 -1
  110. package/dist/schema.js +29 -0
  111. package/dist/schema.js.map +1 -1
  112. package/dist/vitest.d.ts +35 -0
  113. package/dist/vitest.d.ts.map +1 -0
  114. package/dist/vitest.js +85 -0
  115. package/dist/vitest.js.map +1 -0
  116. package/package.json +17 -3
package/dist/vitest.js ADDED
@@ -0,0 +1,85 @@
1
+ import { beforeAll, describe, it } from 'vitest';
2
+ import { caseLabel } from './reporters/format.js';
3
+ const DEFAULT_TIMEOUT = 10 * 60 * 1000;
4
+ /** Time the hook keeps after the deadline settled the outcome, for Vitest itself */
5
+ const HOOK_GRACE = 5 * 1000;
6
+ /** The longest delay `setTimeout` keeps, less the grace the hook adds to it */
7
+ const MAX_TIMEOUT = 2_147_483_647 - HOOK_GRACE;
8
+ function messageOf(error) {
9
+ return error instanceof Error ? error.message : String(error);
10
+ }
11
+ /**
12
+ * Registers a Vitest describe block for an eval suite. The suite runs once in `beforeAll`, each
13
+ * case becomes a test that fails when the case errored, and an `assertions` test fails with
14
+ * every assertion that did not pass.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { describeEval } from '@cogitator-ai/evals/vitest';
19
+ *
20
+ * const qa = describeEval('qa agent', { suite, run: { maxCases: 50 } });
21
+ *
22
+ * afterAll(() => qa.result().report('junit', { path: './reports/qa' }));
23
+ * ```
24
+ */
25
+ export function describeEval(name, options) {
26
+ const { suite, run = {}, timeout = DEFAULT_TIMEOUT } = options;
27
+ if (!Number.isFinite(timeout) || timeout <= 0 || timeout > MAX_TIMEOUT) {
28
+ throw new Error(`describeEval timeout must be a positive number of milliseconds up to ${MAX_TIMEOUT}, got ${timeout}`);
29
+ }
30
+ let outcome = { state: 'pending' };
31
+ const result = () => {
32
+ switch (outcome.state) {
33
+ case 'done':
34
+ return outcome.result;
35
+ case 'failed':
36
+ throw new Error(`Eval suite '${name}' failed to run: ${messageOf(outcome.error)}`, {
37
+ cause: outcome.error,
38
+ });
39
+ case 'pending':
40
+ throw new Error(`Eval suite '${name}' has not finished running: read the result inside its tests or afterAll`);
41
+ }
42
+ };
43
+ describe(name, () => {
44
+ beforeAll(async () => {
45
+ const deadline = new AbortController();
46
+ const late = new Error(`the run did not finish within ${timeout} ms`);
47
+ let timer;
48
+ const expired = new Promise((_resolve, reject) => {
49
+ timer = setTimeout(() => {
50
+ deadline.abort(late);
51
+ reject(late);
52
+ }, timeout);
53
+ });
54
+ const signal = run.signal ? AbortSignal.any([run.signal, deadline.signal]) : deadline.signal;
55
+ const running = suite.run({ ...run, signal });
56
+ running.catch(() => undefined);
57
+ try {
58
+ outcome = { state: 'done', result: await Promise.race([running, expired]) };
59
+ }
60
+ catch (error) {
61
+ outcome = { state: 'failed', error };
62
+ }
63
+ finally {
64
+ clearTimeout(timer);
65
+ }
66
+ }, timeout + HOOK_GRACE);
67
+ suite.cases(run.maxCases).forEach((evalCase, index) => {
68
+ it(caseLabel(index, evalCase.input), () => {
69
+ const caseResult = result().results[index];
70
+ if (caseResult?.error !== undefined) {
71
+ const attempts = caseResult.attempts === undefined ? '' : ` after ${caseResult.attempts} attempt(s)`;
72
+ throw new Error(`Case failed${attempts}: ${caseResult.error}`);
73
+ }
74
+ });
75
+ });
76
+ it('assertions', () => {
77
+ const failed = result().assertions.filter((a) => !a.passed);
78
+ if (failed.length > 0) {
79
+ throw new Error(`${failed.length} assertion(s) failed:\n${failed.map((a) => ` ${a.name}: ${a.message}`).join('\n')}`);
80
+ }
81
+ });
82
+ });
83
+ return { result };
84
+ }
85
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogitator-ai/evals",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "Evaluation framework for Cogitator AI agents",
5
5
  "keywords": [
6
6
  "cogitator",
@@ -21,6 +21,16 @@
21
21
  "types": "./dist/index.d.ts",
22
22
  "import": "./dist/index.js",
23
23
  "default": "./dist/index.js"
24
+ },
25
+ "./vitest": {
26
+ "types": "./dist/vitest.d.ts",
27
+ "import": "./dist/vitest.js",
28
+ "default": "./dist/vitest.js"
29
+ },
30
+ "./matchers": {
31
+ "types": "./dist/matchers.d.ts",
32
+ "import": "./dist/matchers.js",
33
+ "default": "./dist/matchers.js"
24
34
  }
25
35
  },
26
36
  "sideEffects": false,
@@ -34,18 +44,22 @@
34
44
  "zod": "^4.6.5"
35
45
  },
36
46
  "peerDependencies": {
37
- "@cogitator-ai/core": ">=0.53.0"
47
+ "@cogitator-ai/core": ">=0.58.0",
48
+ "vitest": ">=3.0.0"
38
49
  },
39
50
  "peerDependenciesMeta": {
40
51
  "@cogitator-ai/core": {
41
52
  "optional": true
53
+ },
54
+ "vitest": {
55
+ "optional": true
42
56
  }
43
57
  },
44
58
  "optionalDependencies": {
45
59
  "papaparse": "^5.7.0"
46
60
  },
47
61
  "devDependencies": {
48
- "@cogitator-ai/core": "0.53.0",
62
+ "@cogitator-ai/core": "0.58.0",
49
63
  "@types/papaparse": "^5.3.15",
50
64
  "typescript": "^6.0.3",
51
65
  "vitest": "^5.0.3"