observability-toolkit 1.8.5 → 2.0.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 (237) hide show
  1. package/README.md +126 -5
  2. package/dist/backends/index.d.ts +163 -0
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/index.js +57 -0
  5. package/dist/backends/index.js.map +1 -1
  6. package/dist/backends/index.test.js +55 -1
  7. package/dist/backends/index.test.js.map +1 -1
  8. package/dist/backends/local-jsonl.d.ts +30 -0
  9. package/dist/backends/local-jsonl.d.ts.map +1 -1
  10. package/dist/backends/local-jsonl.js +912 -550
  11. package/dist/backends/local-jsonl.js.map +1 -1
  12. package/dist/backends/signoz-api-rate-limiter.test.js +2 -1
  13. package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -1
  14. package/dist/backends/signoz-api.d.ts +16 -2
  15. package/dist/backends/signoz-api.d.ts.map +1 -1
  16. package/dist/backends/signoz-api.js +650 -534
  17. package/dist/backends/signoz-api.js.map +1 -1
  18. package/dist/backends/signoz-api.test.js +6 -5
  19. package/dist/backends/signoz-api.test.js.map +1 -1
  20. package/dist/lib/agent-as-judge.d.ts +388 -0
  21. package/dist/lib/agent-as-judge.d.ts.map +1 -0
  22. package/dist/lib/agent-as-judge.js +740 -0
  23. package/dist/lib/agent-as-judge.js.map +1 -0
  24. package/dist/lib/agent-as-judge.test.d.ts +5 -0
  25. package/dist/lib/agent-as-judge.test.d.ts.map +1 -0
  26. package/dist/lib/agent-as-judge.test.js +816 -0
  27. package/dist/lib/agent-as-judge.test.js.map +1 -0
  28. package/dist/lib/cache.d.ts +15 -2
  29. package/dist/lib/cache.d.ts.map +1 -1
  30. package/dist/lib/cache.js +16 -2
  31. package/dist/lib/cache.js.map +1 -1
  32. package/dist/lib/circuit-breaker.d.ts +18 -0
  33. package/dist/lib/circuit-breaker.d.ts.map +1 -1
  34. package/dist/lib/circuit-breaker.js +41 -8
  35. package/dist/lib/circuit-breaker.js.map +1 -1
  36. package/dist/lib/confident-export.d.ts +101 -0
  37. package/dist/lib/confident-export.d.ts.map +1 -0
  38. package/dist/lib/confident-export.js +393 -0
  39. package/dist/lib/confident-export.js.map +1 -0
  40. package/dist/lib/confident-export.test.d.ts +7 -0
  41. package/dist/lib/confident-export.test.d.ts.map +1 -0
  42. package/dist/lib/confident-export.test.js +835 -0
  43. package/dist/lib/confident-export.test.js.map +1 -0
  44. package/dist/lib/constants.d.ts +75 -0
  45. package/dist/lib/constants.d.ts.map +1 -1
  46. package/dist/lib/constants.js +104 -1
  47. package/dist/lib/constants.js.map +1 -1
  48. package/dist/lib/datadog-export.d.ts +156 -0
  49. package/dist/lib/datadog-export.d.ts.map +1 -0
  50. package/dist/lib/datadog-export.js +464 -0
  51. package/dist/lib/datadog-export.js.map +1 -0
  52. package/dist/lib/datadog-export.test.d.ts +14 -0
  53. package/dist/lib/datadog-export.test.d.ts.map +1 -0
  54. package/dist/lib/datadog-export.test.js +890 -0
  55. package/dist/lib/datadog-export.test.js.map +1 -0
  56. package/dist/lib/evaluation-hooks.d.ts +49 -0
  57. package/dist/lib/evaluation-hooks.d.ts.map +1 -0
  58. package/dist/lib/evaluation-hooks.js +488 -0
  59. package/dist/lib/evaluation-hooks.js.map +1 -0
  60. package/dist/lib/evaluation-hooks.test.d.ts +8 -0
  61. package/dist/lib/evaluation-hooks.test.d.ts.map +1 -0
  62. package/dist/lib/evaluation-hooks.test.js +624 -0
  63. package/dist/lib/evaluation-hooks.test.js.map +1 -0
  64. package/dist/lib/export-utils.d.ts +99 -0
  65. package/dist/lib/export-utils.d.ts.map +1 -0
  66. package/dist/lib/export-utils.js +238 -0
  67. package/dist/lib/export-utils.js.map +1 -0
  68. package/dist/lib/export-utils.test.d.ts +5 -0
  69. package/dist/lib/export-utils.test.d.ts.map +1 -0
  70. package/dist/lib/export-utils.test.js +193 -0
  71. package/dist/lib/export-utils.test.js.map +1 -0
  72. package/dist/lib/file-utils.d.ts +17 -2
  73. package/dist/lib/file-utils.d.ts.map +1 -1
  74. package/dist/lib/file-utils.js +24 -5
  75. package/dist/lib/file-utils.js.map +1 -1
  76. package/dist/lib/file-utils.test.js +30 -0
  77. package/dist/lib/file-utils.test.js.map +1 -1
  78. package/dist/lib/histogram.d.ts +119 -0
  79. package/dist/lib/histogram.d.ts.map +1 -0
  80. package/dist/lib/histogram.js +202 -0
  81. package/dist/lib/histogram.js.map +1 -0
  82. package/dist/lib/histogram.test.d.ts +5 -0
  83. package/dist/lib/histogram.test.d.ts.map +1 -0
  84. package/dist/lib/histogram.test.js +381 -0
  85. package/dist/lib/histogram.test.js.map +1 -0
  86. package/dist/lib/instrumentation.d.ts +153 -0
  87. package/dist/lib/instrumentation.d.ts.map +1 -0
  88. package/dist/lib/instrumentation.integration.test.d.ts +2 -0
  89. package/dist/lib/instrumentation.integration.test.d.ts.map +1 -0
  90. package/dist/lib/instrumentation.integration.test.js +589 -0
  91. package/dist/lib/instrumentation.integration.test.js.map +1 -0
  92. package/dist/lib/instrumentation.js +520 -0
  93. package/dist/lib/instrumentation.js.map +1 -0
  94. package/dist/lib/instrumentation.test.d.ts +2 -0
  95. package/dist/lib/instrumentation.test.d.ts.map +1 -0
  96. package/dist/lib/instrumentation.test.js +821 -0
  97. package/dist/lib/instrumentation.test.js.map +1 -0
  98. package/dist/lib/langfuse-export.d.ts +125 -0
  99. package/dist/lib/langfuse-export.d.ts.map +1 -0
  100. package/dist/lib/langfuse-export.js +367 -0
  101. package/dist/lib/langfuse-export.js.map +1 -0
  102. package/dist/lib/langfuse-export.test.d.ts +7 -0
  103. package/dist/lib/langfuse-export.test.d.ts.map +1 -0
  104. package/dist/lib/langfuse-export.test.js +1007 -0
  105. package/dist/lib/langfuse-export.test.js.map +1 -0
  106. package/dist/lib/llm-as-judge.d.ts +657 -0
  107. package/dist/lib/llm-as-judge.d.ts.map +1 -0
  108. package/dist/lib/llm-as-judge.js +1397 -0
  109. package/dist/lib/llm-as-judge.js.map +1 -0
  110. package/dist/lib/llm-as-judge.test.d.ts +2 -0
  111. package/dist/lib/llm-as-judge.test.d.ts.map +1 -0
  112. package/dist/lib/llm-as-judge.test.js +2409 -0
  113. package/dist/lib/llm-as-judge.test.js.map +1 -0
  114. package/dist/lib/logger.d.ts +1 -1
  115. package/dist/lib/logger.d.ts.map +1 -1
  116. package/dist/lib/logger.js.map +1 -1
  117. package/dist/lib/metrics.d.ts +62 -0
  118. package/dist/lib/metrics.d.ts.map +1 -0
  119. package/dist/lib/metrics.js +166 -0
  120. package/dist/lib/metrics.js.map +1 -0
  121. package/dist/lib/metrics.test.d.ts +5 -0
  122. package/dist/lib/metrics.test.d.ts.map +1 -0
  123. package/dist/lib/metrics.test.js +189 -0
  124. package/dist/lib/metrics.test.js.map +1 -0
  125. package/dist/lib/parse-stats.d.ts +119 -0
  126. package/dist/lib/parse-stats.d.ts.map +1 -0
  127. package/dist/lib/parse-stats.js +206 -0
  128. package/dist/lib/parse-stats.js.map +1 -0
  129. package/dist/lib/parse-stats.test.d.ts +5 -0
  130. package/dist/lib/parse-stats.test.d.ts.map +1 -0
  131. package/dist/lib/parse-stats.test.js +283 -0
  132. package/dist/lib/parse-stats.test.js.map +1 -0
  133. package/dist/lib/phoenix-export.d.ts +109 -0
  134. package/dist/lib/phoenix-export.d.ts.map +1 -0
  135. package/dist/lib/phoenix-export.js +429 -0
  136. package/dist/lib/phoenix-export.js.map +1 -0
  137. package/dist/lib/phoenix-export.test.d.ts +11 -0
  138. package/dist/lib/phoenix-export.test.d.ts.map +1 -0
  139. package/dist/lib/phoenix-export.test.js +725 -0
  140. package/dist/lib/phoenix-export.test.js.map +1 -0
  141. package/dist/lib/server-utils.d.ts +6 -1
  142. package/dist/lib/server-utils.d.ts.map +1 -1
  143. package/dist/lib/server-utils.js +9 -1
  144. package/dist/lib/server-utils.js.map +1 -1
  145. package/dist/lib/shared-schemas.d.ts +6 -0
  146. package/dist/lib/shared-schemas.d.ts.map +1 -1
  147. package/dist/lib/shared-schemas.js +11 -4
  148. package/dist/lib/shared-schemas.js.map +1 -1
  149. package/dist/lib/verification-events.d.ts +100 -0
  150. package/dist/lib/verification-events.d.ts.map +1 -0
  151. package/dist/lib/verification-events.js +162 -0
  152. package/dist/lib/verification-events.js.map +1 -0
  153. package/dist/lib/verification-events.test.d.ts +5 -0
  154. package/dist/lib/verification-events.test.d.ts.map +1 -0
  155. package/dist/lib/verification-events.test.js +193 -0
  156. package/dist/lib/verification-events.test.js.map +1 -0
  157. package/dist/server.d.ts +5 -0
  158. package/dist/server.d.ts.map +1 -1
  159. package/dist/server.js +77 -21
  160. package/dist/server.js.map +1 -1
  161. package/dist/tools/context-stats.d.ts.map +1 -1
  162. package/dist/tools/context-stats.js +6 -8
  163. package/dist/tools/context-stats.js.map +1 -1
  164. package/dist/tools/export-confident.d.ts +145 -0
  165. package/dist/tools/export-confident.d.ts.map +1 -0
  166. package/dist/tools/export-confident.js +134 -0
  167. package/dist/tools/export-confident.js.map +1 -0
  168. package/dist/tools/export-confident.test.d.ts +7 -0
  169. package/dist/tools/export-confident.test.d.ts.map +1 -0
  170. package/dist/tools/export-confident.test.js +332 -0
  171. package/dist/tools/export-confident.test.js.map +1 -0
  172. package/dist/tools/export-datadog.d.ts +160 -0
  173. package/dist/tools/export-datadog.d.ts.map +1 -0
  174. package/dist/tools/export-datadog.js +160 -0
  175. package/dist/tools/export-datadog.js.map +1 -0
  176. package/dist/tools/export-datadog.test.d.ts +8 -0
  177. package/dist/tools/export-datadog.test.d.ts.map +1 -0
  178. package/dist/tools/export-datadog.test.js +419 -0
  179. package/dist/tools/export-datadog.test.js.map +1 -0
  180. package/dist/tools/export-langfuse.d.ts +137 -0
  181. package/dist/tools/export-langfuse.d.ts.map +1 -0
  182. package/dist/tools/export-langfuse.js +131 -0
  183. package/dist/tools/export-langfuse.js.map +1 -0
  184. package/dist/tools/export-langfuse.test.d.ts +7 -0
  185. package/dist/tools/export-langfuse.test.d.ts.map +1 -0
  186. package/dist/tools/export-langfuse.test.js +303 -0
  187. package/dist/tools/export-langfuse.test.js.map +1 -0
  188. package/dist/tools/export-phoenix.d.ts +145 -0
  189. package/dist/tools/export-phoenix.d.ts.map +1 -0
  190. package/dist/tools/export-phoenix.js +135 -0
  191. package/dist/tools/export-phoenix.js.map +1 -0
  192. package/dist/tools/export-phoenix.test.d.ts +7 -0
  193. package/dist/tools/export-phoenix.test.d.ts.map +1 -0
  194. package/dist/tools/export-phoenix.test.js +316 -0
  195. package/dist/tools/export-phoenix.test.js.map +1 -0
  196. package/dist/tools/health-check.d.ts +26 -0
  197. package/dist/tools/health-check.d.ts.map +1 -1
  198. package/dist/tools/health-check.js +36 -7
  199. package/dist/tools/health-check.js.map +1 -1
  200. package/dist/tools/index.d.ts +6 -0
  201. package/dist/tools/index.d.ts.map +1 -1
  202. package/dist/tools/index.js +6 -0
  203. package/dist/tools/index.js.map +1 -1
  204. package/dist/tools/inject-evaluations.d.ts +1315 -0
  205. package/dist/tools/inject-evaluations.d.ts.map +1 -0
  206. package/dist/tools/inject-evaluations.js +121 -0
  207. package/dist/tools/inject-evaluations.js.map +1 -0
  208. package/dist/tools/inject-evaluations.test.d.ts +5 -0
  209. package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
  210. package/dist/tools/inject-evaluations.test.js +359 -0
  211. package/dist/tools/inject-evaluations.test.js.map +1 -0
  212. package/dist/tools/query-evaluations.d.ts +25 -4
  213. package/dist/tools/query-evaluations.d.ts.map +1 -1
  214. package/dist/tools/query-evaluations.js +10 -0
  215. package/dist/tools/query-evaluations.js.map +1 -1
  216. package/dist/tools/query-llm-events.js +2 -2
  217. package/dist/tools/query-llm-events.js.map +1 -1
  218. package/dist/tools/query-logs.d.ts +8 -8
  219. package/dist/tools/query-logs.js +3 -3
  220. package/dist/tools/query-logs.js.map +1 -1
  221. package/dist/tools/query-metrics.d.ts +4 -4
  222. package/dist/tools/query-metrics.js +2 -2
  223. package/dist/tools/query-metrics.js.map +1 -1
  224. package/dist/tools/query-traces.d.ts +8 -8
  225. package/dist/tools/query-verifications.d.ts +111 -0
  226. package/dist/tools/query-verifications.d.ts.map +1 -0
  227. package/dist/tools/query-verifications.js +101 -0
  228. package/dist/tools/query-verifications.js.map +1 -0
  229. package/dist/tools/query-verifications.test.d.ts +5 -0
  230. package/dist/tools/query-verifications.test.d.ts.map +1 -0
  231. package/dist/tools/query-verifications.test.js +156 -0
  232. package/dist/tools/query-verifications.test.js.map +1 -0
  233. package/dist/types/evaluation-hooks.d.ts +176 -0
  234. package/dist/types/evaluation-hooks.d.ts.map +1 -0
  235. package/dist/types/evaluation-hooks.js +49 -0
  236. package/dist/types/evaluation-hooks.js.map +1 -0
  237. package/package.json +10 -2
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Tests for export-datadog.ts MCP tool
3
+ *
4
+ * Covers schema validation, handler execution, dry run mode,
5
+ * dependency injection, and error handling.
6
+ */
7
+ import { describe, it } from 'node:test';
8
+ import assert from 'node:assert';
9
+ import { exportDatadog, exportDatadogSchema, } from './export-datadog.js';
10
+ describe('export-datadog tool', () => {
11
+ describe('exportDatadogSchema', () => {
12
+ describe('filter parameters', () => {
13
+ it('accepts evaluationName filter', () => {
14
+ const input = { evaluationName: 'relevance' };
15
+ const result = exportDatadogSchema.parse(input);
16
+ assert.strictEqual(result.evaluationName, 'relevance');
17
+ });
18
+ it('accepts scoreMin filter', () => {
19
+ const input = { scoreMin: 0.5 };
20
+ const result = exportDatadogSchema.parse(input);
21
+ assert.strictEqual(result.scoreMin, 0.5);
22
+ });
23
+ it('accepts scoreMax filter', () => {
24
+ const input = { scoreMax: 0.9 };
25
+ const result = exportDatadogSchema.parse(input);
26
+ assert.strictEqual(result.scoreMax, 0.9);
27
+ });
28
+ it('accepts scoreLabel filter', () => {
29
+ const input = { scoreLabel: 'good' };
30
+ const result = exportDatadogSchema.parse(input);
31
+ assert.strictEqual(result.scoreLabel, 'good');
32
+ });
33
+ it('accepts evaluatorType filter', () => {
34
+ const input = { evaluatorType: 'llm' };
35
+ const result = exportDatadogSchema.parse(input);
36
+ assert.strictEqual(result.evaluatorType, 'llm');
37
+ });
38
+ it('accepts traceId filter', () => {
39
+ const input = { traceId: 'abc123' };
40
+ const result = exportDatadogSchema.parse(input);
41
+ assert.strictEqual(result.traceId, 'abc123');
42
+ });
43
+ it('accepts sessionId filter', () => {
44
+ const input = { sessionId: 'session-456' };
45
+ const result = exportDatadogSchema.parse(input);
46
+ assert.strictEqual(result.sessionId, 'session-456');
47
+ });
48
+ it('accepts date range filters', () => {
49
+ const input = { startDate: '2024-01-01', endDate: '2024-01-31' };
50
+ const result = exportDatadogSchema.parse(input);
51
+ assert.strictEqual(result.startDate, '2024-01-01');
52
+ assert.strictEqual(result.endDate, '2024-01-31');
53
+ });
54
+ });
55
+ describe('export options', () => {
56
+ it('defaults limit to 1000', () => {
57
+ const result = exportDatadogSchema.parse({});
58
+ assert.strictEqual(result.limit, 1000);
59
+ });
60
+ it('enforces max limit of 10000', () => {
61
+ assert.throws(() => exportDatadogSchema.parse({ limit: 10001 }), /Number must be less than or equal to 10000/);
62
+ });
63
+ it('accepts custom batch size', () => {
64
+ const input = { batchSize: 50 };
65
+ const result = exportDatadogSchema.parse(input);
66
+ assert.strictEqual(result.batchSize, 50);
67
+ });
68
+ it('enforces min batch size of 1', () => {
69
+ assert.throws(() => exportDatadogSchema.parse({ batchSize: 0 }), /Number must be greater than or equal to 1/);
70
+ });
71
+ it('enforces max batch size of 1000', () => {
72
+ assert.throws(() => exportDatadogSchema.parse({ batchSize: 1001 }), /Number must be less than or equal to 1000/);
73
+ });
74
+ it('defaults dryRun to false', () => {
75
+ const result = exportDatadogSchema.parse({});
76
+ assert.strictEqual(result.dryRun, false);
77
+ });
78
+ it('accepts dryRun true', () => {
79
+ const input = { dryRun: true };
80
+ const result = exportDatadogSchema.parse(input);
81
+ assert.strictEqual(result.dryRun, true);
82
+ });
83
+ });
84
+ describe('Datadog-specific options', () => {
85
+ it('accepts mlApp parameter', () => {
86
+ const input = { mlApp: 'my-app' };
87
+ const result = exportDatadogSchema.parse(input);
88
+ assert.strictEqual(result.mlApp, 'my-app');
89
+ });
90
+ it('accepts valid sites', () => {
91
+ const sites = [
92
+ 'datadoghq.com',
93
+ 'us3.datadoghq.com',
94
+ 'us5.datadoghq.com',
95
+ 'datadoghq.eu',
96
+ 'ap1.datadoghq.com',
97
+ ];
98
+ for (const site of sites) {
99
+ const result = exportDatadogSchema.parse({ site });
100
+ assert.strictEqual(result.site, site);
101
+ }
102
+ });
103
+ it('rejects invalid site', () => {
104
+ assert.throws(() => exportDatadogSchema.parse({ site: 'invalid.datadoghq.com' }), /Invalid enum value/);
105
+ });
106
+ it('defaults exportSpans to true', () => {
107
+ const result = exportDatadogSchema.parse({});
108
+ assert.strictEqual(result.exportSpans, true);
109
+ });
110
+ it('defaults exportEvals to true', () => {
111
+ const result = exportDatadogSchema.parse({});
112
+ assert.strictEqual(result.exportEvals, true);
113
+ });
114
+ it('accepts exportSpans false', () => {
115
+ const input = { exportSpans: false };
116
+ const result = exportDatadogSchema.parse(input);
117
+ assert.strictEqual(result.exportSpans, false);
118
+ });
119
+ it('accepts exportEvals false', () => {
120
+ const input = { exportEvals: false };
121
+ const result = exportDatadogSchema.parse(input);
122
+ assert.strictEqual(result.exportEvals, false);
123
+ });
124
+ it('defaults metricType to auto', () => {
125
+ const result = exportDatadogSchema.parse({});
126
+ assert.strictEqual(result.metricType, 'auto');
127
+ });
128
+ it('accepts metricType boolean', () => {
129
+ const input = { metricType: 'boolean' };
130
+ const result = exportDatadogSchema.parse(input);
131
+ assert.strictEqual(result.metricType, 'boolean');
132
+ });
133
+ it('accepts metricType score', () => {
134
+ const input = { metricType: 'score' };
135
+ const result = exportDatadogSchema.parse(input);
136
+ assert.strictEqual(result.metricType, 'score');
137
+ });
138
+ it('accepts metricType categorical', () => {
139
+ const input = { metricType: 'categorical' };
140
+ const result = exportDatadogSchema.parse(input);
141
+ assert.strictEqual(result.metricType, 'categorical');
142
+ });
143
+ it('accepts apiKey override', () => {
144
+ const input = { apiKey: 'my-api-key' };
145
+ const result = exportDatadogSchema.parse(input);
146
+ assert.strictEqual(result.apiKey, 'my-api-key');
147
+ });
148
+ });
149
+ });
150
+ describe('exportDatadog handler', () => {
151
+ // Create a mock backend for testing
152
+ function createMockBackend(evaluations) {
153
+ return {
154
+ name: 'mock',
155
+ queryTraces: async () => [],
156
+ queryMetrics: async () => [],
157
+ queryLogs: async () => [],
158
+ queryLLMEvents: async () => [],
159
+ queryEvaluations: async () => evaluations,
160
+ healthCheck: async () => ({ status: 'ok' }),
161
+ };
162
+ }
163
+ // Valid config for tests
164
+ const validConfig = {
165
+ apiKey: 'a'.repeat(32),
166
+ mlApp: 'test-app',
167
+ site: 'datadoghq.com',
168
+ };
169
+ describe('dry run mode', () => {
170
+ it('returns preview without exporting', async () => {
171
+ const evaluations = [
172
+ { timestamp: '2024-01-15T10:00:00.000Z', evaluationName: 'relevance', scoreValue: 0.9 },
173
+ { timestamp: '2024-01-15T10:00:01.000Z', evaluationName: 'safety', scoreValue: 1 },
174
+ ];
175
+ const result = await exportDatadog({ dryRun: true }, {
176
+ localBackend: createMockBackend(evaluations),
177
+ configOverrides: validConfig,
178
+ });
179
+ assert.strictEqual(result.success, true);
180
+ assert.strictEqual(result.dryRun, true);
181
+ assert.strictEqual(result.evaluationsFound, 2);
182
+ assert.strictEqual(result.evaluationsExported, 0);
183
+ assert.ok(result.preview);
184
+ assert.strictEqual(result.preview.length, 2);
185
+ });
186
+ it('includes metric type in preview', async () => {
187
+ const evaluations = [
188
+ { timestamp: '2024-01-15T10:00:00.000Z', evaluationName: 'score_test', scoreValue: 0.5 },
189
+ { timestamp: '2024-01-15T10:00:01.000Z', evaluationName: 'bool_test', scoreValue: 1 },
190
+ { timestamp: '2024-01-15T10:00:02.000Z', evaluationName: 'cat_test', scoreLabel: 'good' },
191
+ ];
192
+ const result = await exportDatadog({ dryRun: true }, {
193
+ localBackend: createMockBackend(evaluations),
194
+ configOverrides: validConfig,
195
+ });
196
+ assert.ok(result.preview);
197
+ assert.strictEqual(result.preview[0].metricType, 'score');
198
+ assert.strictEqual(result.preview[1].metricType, 'boolean');
199
+ assert.strictEqual(result.preview[2].metricType, 'categorical');
200
+ });
201
+ it('limits preview to 10 items', async () => {
202
+ const evaluations = Array(20).fill(null).map((_, i) => ({
203
+ timestamp: '2024-01-15T10:00:00.000Z',
204
+ evaluationName: `test-${i}`,
205
+ scoreValue: 0.5,
206
+ }));
207
+ const result = await exportDatadog({ dryRun: true }, {
208
+ localBackend: createMockBackend(evaluations),
209
+ configOverrides: validConfig,
210
+ });
211
+ assert.ok(result.preview);
212
+ assert.strictEqual(result.preview.length, 10);
213
+ });
214
+ it('uses forced metric type in preview', async () => {
215
+ const evaluations = [
216
+ { timestamp: '2024-01-15T10:00:00.000Z', evaluationName: 'test', scoreValue: 0.5 },
217
+ ];
218
+ const result = await exportDatadog({ dryRun: true, metricType: 'boolean' }, {
219
+ localBackend: createMockBackend(evaluations),
220
+ configOverrides: validConfig,
221
+ });
222
+ assert.ok(result.preview);
223
+ assert.strictEqual(result.preview[0].metricType, 'boolean');
224
+ });
225
+ });
226
+ describe('skipExport mode (testing)', () => {
227
+ it('returns expected counts without HTTP calls', async () => {
228
+ const evaluations = Array(5).fill(null).map((_, i) => ({
229
+ timestamp: '2024-01-15T10:00:00.000Z',
230
+ evaluationName: `test-${i}`,
231
+ scoreValue: 0.5,
232
+ }));
233
+ const result = await exportDatadog({}, {
234
+ localBackend: createMockBackend(evaluations),
235
+ configOverrides: validConfig,
236
+ skipExport: true,
237
+ });
238
+ assert.strictEqual(result.success, true);
239
+ assert.strictEqual(result.dryRun, false);
240
+ assert.strictEqual(result.evaluationsFound, 5);
241
+ assert.strictEqual(result.evaluationsExported, 5);
242
+ assert.strictEqual(result.spansExported, 5);
243
+ assert.strictEqual(result.evalMetricsExported, 5);
244
+ });
245
+ it('reports spans only when exportEvals is false', async () => {
246
+ const evaluations = [
247
+ { timestamp: '2024-01-15T10:00:00.000Z', evaluationName: 'test', scoreValue: 0.5 },
248
+ ];
249
+ const result = await exportDatadog({ exportEvals: false }, {
250
+ localBackend: createMockBackend(evaluations),
251
+ configOverrides: validConfig,
252
+ skipExport: true,
253
+ });
254
+ assert.strictEqual(result.spansExported, 1);
255
+ assert.strictEqual(result.evalMetricsExported, 0);
256
+ });
257
+ it('reports evals only when exportSpans is false', async () => {
258
+ const evaluations = [
259
+ { timestamp: '2024-01-15T10:00:00.000Z', evaluationName: 'test', scoreValue: 0.5 },
260
+ ];
261
+ const result = await exportDatadog({ exportSpans: false }, {
262
+ localBackend: createMockBackend(evaluations),
263
+ configOverrides: validConfig,
264
+ skipExport: true,
265
+ });
266
+ assert.strictEqual(result.spansExported, 0);
267
+ assert.strictEqual(result.evalMetricsExported, 1);
268
+ });
269
+ });
270
+ describe('input validation', () => {
271
+ it('validates score range', async () => {
272
+ await assert.rejects(exportDatadog({ scoreMin: 0.8, scoreMax: 0.5 }, {
273
+ localBackend: createMockBackend([]),
274
+ configOverrides: validConfig,
275
+ skipExport: true,
276
+ }), /scoreMin.*cannot exceed.*scoreMax/);
277
+ });
278
+ it('validates limit', async () => {
279
+ const result = await exportDatadog({ limit: 5 }, {
280
+ localBackend: createMockBackend([]),
281
+ configOverrides: validConfig,
282
+ skipExport: true,
283
+ });
284
+ // Should not throw, limit is valid
285
+ assert.strictEqual(result.success, true);
286
+ });
287
+ });
288
+ describe('filter propagation', () => {
289
+ it('passes filters to backend query', async () => {
290
+ let capturedOptions;
291
+ const mockBackend = {
292
+ name: 'mock',
293
+ queryTraces: async () => [],
294
+ queryMetrics: async () => [],
295
+ queryLogs: async () => [],
296
+ queryLLMEvents: async () => [],
297
+ queryEvaluations: async (options) => {
298
+ capturedOptions = options;
299
+ return [];
300
+ },
301
+ healthCheck: async () => ({ status: 'ok' }),
302
+ };
303
+ await exportDatadog({
304
+ evaluationName: 'relevance',
305
+ scoreMin: 0.5,
306
+ scoreMax: 0.9,
307
+ scoreLabel: 'good',
308
+ evaluatorType: 'llm',
309
+ traceId: 'trace-123',
310
+ sessionId: 'session-456',
311
+ startDate: '2024-01-01',
312
+ endDate: '2024-01-31',
313
+ limit: 50,
314
+ }, {
315
+ localBackend: mockBackend,
316
+ configOverrides: validConfig,
317
+ skipExport: true,
318
+ });
319
+ const opts = capturedOptions;
320
+ assert.strictEqual(opts.evaluationName, 'relevance');
321
+ assert.strictEqual(opts.scoreMin, 0.5);
322
+ assert.strictEqual(opts.scoreMax, 0.9);
323
+ assert.strictEqual(opts.scoreLabel, 'good');
324
+ assert.strictEqual(opts.evaluatorType, 'llm');
325
+ assert.strictEqual(opts.traceId, 'trace-123');
326
+ assert.strictEqual(opts.sessionId, 'session-456');
327
+ assert.strictEqual(opts.startDate, '2024-01-01');
328
+ assert.strictEqual(opts.endDate, '2024-01-31');
329
+ assert.strictEqual(opts.limit, 50);
330
+ });
331
+ });
332
+ describe('config override propagation', () => {
333
+ it('passes apiKey override to config', async () => {
334
+ // Note: This test will fail if the API key doesn't match the expected format
335
+ // We use a valid hex key for testing
336
+ const customApiKey = 'b'.repeat(32);
337
+ const result = await exportDatadog({ apiKey: customApiKey, dryRun: true }, {
338
+ localBackend: createMockBackend([]),
339
+ configOverrides: { mlApp: 'test-app' },
340
+ });
341
+ assert.strictEqual(result.success, true);
342
+ });
343
+ it('passes site override to config', async () => {
344
+ const result = await exportDatadog({ site: 'datadoghq.eu', dryRun: true }, {
345
+ localBackend: createMockBackend([]),
346
+ configOverrides: { ...validConfig, site: undefined },
347
+ });
348
+ assert.strictEqual(result.success, true);
349
+ });
350
+ it('passes mlApp override to config', async () => {
351
+ const result = await exportDatadog({ mlApp: 'custom-app', dryRun: true }, {
352
+ localBackend: createMockBackend([]),
353
+ configOverrides: { apiKey: validConfig.apiKey },
354
+ });
355
+ assert.strictEqual(result.success, true);
356
+ });
357
+ });
358
+ describe('batch size optimization', () => {
359
+ it('reduces batch size when smaller than evaluation count', async () => {
360
+ const evaluations = Array(5).fill(null).map((_, i) => ({
361
+ timestamp: '2024-01-15T10:00:00.000Z',
362
+ evaluationName: `test-${i}`,
363
+ scoreValue: 0.5,
364
+ }));
365
+ const result = await exportDatadog({ batchSize: 100 }, // Larger than 5 evaluations
366
+ {
367
+ localBackend: createMockBackend(evaluations),
368
+ configOverrides: validConfig,
369
+ skipExport: true,
370
+ });
371
+ // Should optimize to 5 batches of 1 (or 1 batch of 5)
372
+ assert.strictEqual(result.batches, 1);
373
+ });
374
+ });
375
+ describe('empty results', () => {
376
+ it('handles empty evaluation results', async () => {
377
+ const result = await exportDatadog({}, {
378
+ localBackend: createMockBackend([]),
379
+ configOverrides: validConfig,
380
+ skipExport: true,
381
+ });
382
+ assert.strictEqual(result.success, true);
383
+ assert.strictEqual(result.evaluationsFound, 0);
384
+ assert.strictEqual(result.evaluationsExported, 0);
385
+ });
386
+ });
387
+ describe('response structure', () => {
388
+ it('includes all required fields', async () => {
389
+ const evaluations = [
390
+ { timestamp: '2024-01-15T10:00:00.000Z', evaluationName: 'test', scoreValue: 0.5 },
391
+ ];
392
+ const result = await exportDatadog({}, {
393
+ localBackend: createMockBackend(evaluations),
394
+ configOverrides: validConfig,
395
+ skipExport: true,
396
+ });
397
+ assert.strictEqual(typeof result.success, 'boolean');
398
+ assert.strictEqual(typeof result.dryRun, 'boolean');
399
+ assert.strictEqual(typeof result.evaluationsFound, 'number');
400
+ assert.strictEqual(typeof result.evaluationsExported, 'number');
401
+ assert.strictEqual(typeof result.spansExported, 'number');
402
+ assert.strictEqual(typeof result.evalMetricsExported, 'number');
403
+ assert.strictEqual(typeof result.batches, 'number');
404
+ assert.strictEqual(typeof result.failed, 'number');
405
+ assert.strictEqual(typeof result.durationMs, 'number');
406
+ });
407
+ it('includes errors array on failure', async () => {
408
+ // This would require mocking fetch to fail, which is complex
409
+ // The structure is verified in the dry run tests
410
+ const result = await exportDatadog({ dryRun: true }, {
411
+ localBackend: createMockBackend([]),
412
+ configOverrides: validConfig,
413
+ });
414
+ assert.strictEqual(result.errors, undefined);
415
+ });
416
+ });
417
+ });
418
+ });
419
+ //# sourceMappingURL=export-datadog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-datadog.test.js","sourceRoot":"","sources":["../../src/tools/export-datadog.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Export evaluations to Langfuse via OTLP HTTP
3
+ *
4
+ * MCP tool for exporting gen_ai.evaluation.result events to Langfuse
5
+ * for unified tracing and evaluation analysis.
6
+ */
7
+ import { z } from 'zod';
8
+ import { type LangfuseConfig } from '../lib/langfuse-export.js';
9
+ import type { TelemetryBackend } from '../backends/index.js';
10
+ export declare const exportLangfuseSchema: z.ZodObject<{
11
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
12
+ batchSize: z.ZodOptional<z.ZodNumber>;
13
+ dryRun: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
14
+ endpoint: z.ZodOptional<z.ZodString>;
15
+ publicKey: z.ZodOptional<z.ZodString>;
16
+ secretKey: z.ZodOptional<z.ZodString>;
17
+ startDate: z.ZodOptional<z.ZodString>;
18
+ endDate: z.ZodOptional<z.ZodString>;
19
+ sessionId: z.ZodOptional<z.ZodString>;
20
+ traceId: z.ZodOptional<z.ZodString>;
21
+ evaluationName: z.ZodOptional<z.ZodString>;
22
+ scoreMin: z.ZodOptional<z.ZodNumber>;
23
+ scoreMax: z.ZodOptional<z.ZodNumber>;
24
+ scoreLabel: z.ZodOptional<z.ZodString>;
25
+ evaluatorType: z.ZodOptional<z.ZodEnum<["llm", "human", "rule", "classifier"]>>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ limit: number;
28
+ dryRun: boolean;
29
+ traceId?: string | undefined;
30
+ sessionId?: string | undefined;
31
+ evaluationName?: string | undefined;
32
+ scoreLabel?: string | undefined;
33
+ scoreMin?: number | undefined;
34
+ scoreMax?: number | undefined;
35
+ evaluatorType?: "llm" | "human" | "rule" | "classifier" | undefined;
36
+ endpoint?: string | undefined;
37
+ endDate?: string | undefined;
38
+ startDate?: string | undefined;
39
+ publicKey?: string | undefined;
40
+ secretKey?: string | undefined;
41
+ batchSize?: number | undefined;
42
+ }, {
43
+ limit?: number | undefined;
44
+ traceId?: string | undefined;
45
+ sessionId?: string | undefined;
46
+ evaluationName?: string | undefined;
47
+ scoreLabel?: string | undefined;
48
+ scoreMin?: number | undefined;
49
+ scoreMax?: number | undefined;
50
+ evaluatorType?: "llm" | "human" | "rule" | "classifier" | undefined;
51
+ endpoint?: string | undefined;
52
+ endDate?: string | undefined;
53
+ startDate?: string | undefined;
54
+ dryRun?: boolean | undefined;
55
+ publicKey?: string | undefined;
56
+ secretKey?: string | undefined;
57
+ batchSize?: number | undefined;
58
+ }>;
59
+ export type ExportLangfuseInput = z.input<typeof exportLangfuseSchema>;
60
+ /** Response from export operation */
61
+ export interface ExportLangfuseResponse {
62
+ success: boolean;
63
+ dryRun: boolean;
64
+ evaluationsFound: number;
65
+ evaluationsExported: number;
66
+ batches: number;
67
+ failed: number;
68
+ durationMs: number;
69
+ errors?: string[];
70
+ preview?: Array<{
71
+ traceId?: string;
72
+ evaluationName: string;
73
+ scoreValue?: number;
74
+ scoreLabel?: string;
75
+ }>;
76
+ }
77
+ export interface ExportLangfuseOptions {
78
+ localBackend?: TelemetryBackend;
79
+ configOverrides?: Partial<LangfuseConfig>;
80
+ skipExport?: boolean;
81
+ }
82
+ export declare function exportLangfuse(rawInput: ExportLangfuseInput, options?: ExportLangfuseOptions): Promise<ExportLangfuseResponse>;
83
+ export declare const exportLangfuseTool: {
84
+ name: string;
85
+ description: string;
86
+ inputSchema: z.ZodObject<{
87
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
88
+ batchSize: z.ZodOptional<z.ZodNumber>;
89
+ dryRun: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
90
+ endpoint: z.ZodOptional<z.ZodString>;
91
+ publicKey: z.ZodOptional<z.ZodString>;
92
+ secretKey: z.ZodOptional<z.ZodString>;
93
+ startDate: z.ZodOptional<z.ZodString>;
94
+ endDate: z.ZodOptional<z.ZodString>;
95
+ sessionId: z.ZodOptional<z.ZodString>;
96
+ traceId: z.ZodOptional<z.ZodString>;
97
+ evaluationName: z.ZodOptional<z.ZodString>;
98
+ scoreMin: z.ZodOptional<z.ZodNumber>;
99
+ scoreMax: z.ZodOptional<z.ZodNumber>;
100
+ scoreLabel: z.ZodOptional<z.ZodString>;
101
+ evaluatorType: z.ZodOptional<z.ZodEnum<["llm", "human", "rule", "classifier"]>>;
102
+ }, "strip", z.ZodTypeAny, {
103
+ limit: number;
104
+ dryRun: boolean;
105
+ traceId?: string | undefined;
106
+ sessionId?: string | undefined;
107
+ evaluationName?: string | undefined;
108
+ scoreLabel?: string | undefined;
109
+ scoreMin?: number | undefined;
110
+ scoreMax?: number | undefined;
111
+ evaluatorType?: "llm" | "human" | "rule" | "classifier" | undefined;
112
+ endpoint?: string | undefined;
113
+ endDate?: string | undefined;
114
+ startDate?: string | undefined;
115
+ publicKey?: string | undefined;
116
+ secretKey?: string | undefined;
117
+ batchSize?: number | undefined;
118
+ }, {
119
+ limit?: number | undefined;
120
+ traceId?: string | undefined;
121
+ sessionId?: string | undefined;
122
+ evaluationName?: string | undefined;
123
+ scoreLabel?: string | undefined;
124
+ scoreMin?: number | undefined;
125
+ scoreMax?: number | undefined;
126
+ evaluatorType?: "llm" | "human" | "rule" | "classifier" | undefined;
127
+ endpoint?: string | undefined;
128
+ endDate?: string | undefined;
129
+ startDate?: string | undefined;
130
+ dryRun?: boolean | undefined;
131
+ publicKey?: string | undefined;
132
+ secretKey?: string | undefined;
133
+ batchSize?: number | undefined;
134
+ }>;
135
+ handler: typeof exportLangfuse;
136
+ };
137
+ //# sourceMappingURL=export-langfuse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-langfuse.d.ts","sourceRoot":"","sources":["../../src/tools/export-langfuse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAWnC,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoB/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,qCAAqC;AACrC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAGD,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAsGjC;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK9B,CAAC"}