judgeval 0.2.3 → 0.2.5

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 (110) hide show
  1. package/dist/cjs/common/logger.js +28 -24
  2. package/dist/cjs/common/logger.js.map +1 -1
  3. package/dist/cjs/common/tracer.js +104 -130
  4. package/dist/cjs/common/tracer.js.map +1 -1
  5. package/dist/cjs/constants.js +2 -1
  6. package/dist/cjs/constants.js.map +1 -1
  7. package/dist/cjs/data/datasets/eval-dataset-client.js +45 -0
  8. package/dist/cjs/data/datasets/eval-dataset-client.js.map +1 -1
  9. package/dist/cjs/e2etests/eval-operations.test.js +3 -3
  10. package/dist/cjs/exporters/otel-exporter.js +352 -0
  11. package/dist/cjs/exporters/otel-exporter.js.map +1 -0
  12. package/dist/cjs/judges/index.js +217 -0
  13. package/dist/cjs/judges/index.js.map +1 -0
  14. package/dist/cjs/run-evaluation.js +13 -13
  15. package/dist/cjs/run-evaluation.js.map +1 -1
  16. package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js +610 -0
  17. package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
  18. package/dist/cjs/scorers/metrics/answer-correctness/index.js +19 -0
  19. package/dist/cjs/scorers/metrics/answer-correctness/index.js.map +1 -0
  20. package/dist/cjs/scorers/metrics/answer-correctness/prompts.js +175 -0
  21. package/dist/cjs/scorers/metrics/answer-correctness/prompts.js.map +1 -0
  22. package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js +525 -0
  23. package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
  24. package/dist/cjs/scorers/metrics/answer-relevancy/index.js +19 -0
  25. package/dist/cjs/scorers/metrics/answer-relevancy/index.js.map +1 -0
  26. package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js +179 -0
  27. package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
  28. package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js +524 -0
  29. package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
  30. package/dist/cjs/scorers/metrics/faithfulness/index.js +19 -0
  31. package/dist/cjs/scorers/metrics/faithfulness/index.js.map +1 -0
  32. package/dist/cjs/scorers/metrics/faithfulness/prompts.js +232 -0
  33. package/dist/cjs/scorers/metrics/faithfulness/prompts.js.map +1 -0
  34. package/dist/cjs/scorers/metrics/hallucination/hallucination.js +390 -0
  35. package/dist/cjs/scorers/metrics/hallucination/hallucination.js.map +1 -0
  36. package/dist/cjs/scorers/metrics/hallucination/index.js +11 -0
  37. package/dist/cjs/scorers/metrics/hallucination/index.js.map +1 -0
  38. package/dist/cjs/scorers/metrics/hallucination/prompts.js +106 -0
  39. package/dist/cjs/scorers/metrics/hallucination/prompts.js.map +1 -0
  40. package/dist/cjs/scorers/metrics/instruction-adherence/index.js +19 -0
  41. package/dist/cjs/scorers/metrics/instruction-adherence/index.js.map +1 -0
  42. package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js +382 -0
  43. package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
  44. package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js +124 -0
  45. package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
  46. package/dist/esm/common/logger.js +16 -11
  47. package/dist/esm/common/logger.js.map +1 -1
  48. package/dist/esm/common/tracer.js +102 -128
  49. package/dist/esm/common/tracer.js.map +1 -1
  50. package/dist/esm/constants.js +1 -0
  51. package/dist/esm/constants.js.map +1 -1
  52. package/dist/esm/data/datasets/eval-dataset-client.js +46 -1
  53. package/dist/esm/data/datasets/eval-dataset-client.js.map +1 -1
  54. package/dist/esm/e2etests/eval-operations.test.js +3 -3
  55. package/dist/esm/exporters/otel-exporter.js +348 -0
  56. package/dist/esm/exporters/otel-exporter.js.map +1 -0
  57. package/dist/esm/judges/index.js +185 -0
  58. package/dist/esm/judges/index.js.map +1 -0
  59. package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js +601 -0
  60. package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
  61. package/dist/esm/scorers/metrics/answer-correctness/index.js +3 -0
  62. package/dist/esm/scorers/metrics/answer-correctness/index.js.map +1 -0
  63. package/dist/esm/scorers/metrics/answer-correctness/prompts.js +171 -0
  64. package/dist/esm/scorers/metrics/answer-correctness/prompts.js.map +1 -0
  65. package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js +521 -0
  66. package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
  67. package/dist/esm/scorers/metrics/answer-relevancy/index.js +3 -0
  68. package/dist/esm/scorers/metrics/answer-relevancy/index.js.map +1 -0
  69. package/dist/esm/scorers/metrics/answer-relevancy/prompts.js +175 -0
  70. package/dist/esm/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
  71. package/dist/esm/scorers/metrics/faithfulness/faithfulness.js +520 -0
  72. package/dist/esm/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
  73. package/dist/esm/scorers/metrics/faithfulness/index.js +3 -0
  74. package/dist/esm/scorers/metrics/faithfulness/index.js.map +1 -0
  75. package/dist/esm/scorers/metrics/faithfulness/prompts.js +228 -0
  76. package/dist/esm/scorers/metrics/faithfulness/prompts.js.map +1 -0
  77. package/dist/esm/scorers/metrics/hallucination/hallucination.js +386 -0
  78. package/dist/esm/scorers/metrics/hallucination/hallucination.js.map +1 -0
  79. package/dist/esm/scorers/metrics/hallucination/index.js +3 -0
  80. package/dist/esm/scorers/metrics/hallucination/index.js.map +1 -0
  81. package/dist/esm/scorers/metrics/hallucination/prompts.js +102 -0
  82. package/dist/esm/scorers/metrics/hallucination/prompts.js.map +1 -0
  83. package/dist/esm/scorers/metrics/instruction-adherence/index.js +3 -0
  84. package/dist/esm/scorers/metrics/instruction-adherence/index.js.map +1 -0
  85. package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js +378 -0
  86. package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
  87. package/dist/esm/scorers/metrics/instruction-adherence/prompts.js +120 -0
  88. package/dist/esm/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
  89. package/dist/types/common/logger.d.ts +1 -1
  90. package/dist/types/common/tracer.d.ts +6 -0
  91. package/dist/types/constants.d.ts +1 -0
  92. package/dist/types/data/datasets/eval-dataset-client.d.ts +5 -0
  93. package/dist/types/exporters/otel-exporter.d.ts +16 -0
  94. package/dist/types/judges/index.d.ts +50 -0
  95. package/dist/types/scorers/metrics/answer-correctness/answer-correctness.d.ts +99 -0
  96. package/dist/types/scorers/metrics/answer-correctness/index.d.ts +2 -0
  97. package/dist/types/scorers/metrics/answer-correctness/prompts.d.ts +71 -0
  98. package/dist/types/scorers/metrics/answer-relevancy/answer-relevancy.d.ts +78 -0
  99. package/dist/types/scorers/metrics/answer-relevancy/index.d.ts +2 -0
  100. package/dist/types/scorers/metrics/answer-relevancy/prompts.d.ts +71 -0
  101. package/dist/types/scorers/metrics/faithfulness/faithfulness.d.ts +77 -0
  102. package/dist/types/scorers/metrics/faithfulness/index.d.ts +2 -0
  103. package/dist/types/scorers/metrics/faithfulness/prompts.d.ts +94 -0
  104. package/dist/types/scorers/metrics/hallucination/hallucination.d.ts +67 -0
  105. package/dist/types/scorers/metrics/hallucination/index.d.ts +3 -0
  106. package/dist/types/scorers/metrics/hallucination/prompts.d.ts +63 -0
  107. package/dist/types/scorers/metrics/instruction-adherence/index.d.ts +2 -0
  108. package/dist/types/scorers/metrics/instruction-adherence/instruction-adherence.d.ts +67 -0
  109. package/dist/types/scorers/metrics/instruction-adherence/prompts.d.ts +78 -0
  110. package/package.json +32 -14
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.JudgevalExporter = void 0;
13
+ const core_1 = require("@opentelemetry/core");
14
+ const uuid_1 = require("uuid");
15
+ // Import using relative path from within the src directory - ADD .js EXTENSION
16
+ const tracer_js_1 = require("../common/tracer.js");
17
+ // --- Helper Functions --- Reintroduce types
18
+ function parseOtelAttributes(attributesMap) {
19
+ const attributes = {};
20
+ for (const key in attributesMap) {
21
+ attributes[key] = attributesMap[key];
22
+ }
23
+ return attributes;
24
+ }
25
+ function mapToInternalInput(attributes) {
26
+ const kwargs = {};
27
+ for (const [key, value] of Object.entries(attributes)) {
28
+ if (key.startsWith('ai.telemetry.metadata.')) {
29
+ kwargs[key.replace('ai.telemetry.metadata.', 'metadata_')] = value;
30
+ }
31
+ }
32
+ let messages = attributes['ai.prompt.messages'];
33
+ if (typeof messages === 'string') {
34
+ try {
35
+ messages = JSON.parse(messages);
36
+ }
37
+ catch (e) {
38
+ console.warn(`[OtelExporter] Could not parse messages JSON: ${messages}`);
39
+ messages = [];
40
+ }
41
+ }
42
+ else if (!Array.isArray(messages)) {
43
+ console.warn(`[OtelExporter] Messages attribute is not an array or valid JSON string: ${messages}`);
44
+ messages = [];
45
+ }
46
+ return {
47
+ model: attributes['gen_ai.request.model'],
48
+ messages: messages || [],
49
+ kwargs: kwargs,
50
+ };
51
+ }
52
+ function mapToInternalOutput(attributes) {
53
+ const inputTokens = attributes['gen_ai.usage.input_tokens'] || attributes['ai.usage.promptTokens'];
54
+ const outputTokens = attributes['gen_ai.usage.output_tokens'] || attributes['ai.usage.completionTokens'];
55
+ let totalTokens = null;
56
+ if (inputTokens != null && outputTokens != null) {
57
+ totalTokens = inputTokens + outputTokens;
58
+ }
59
+ return {
60
+ content: attributes['ai.response.text'],
61
+ usage: {
62
+ prompt_tokens: inputTokens,
63
+ completion_tokens: outputTokens,
64
+ total_tokens: totalTokens,
65
+ prompt_tokens_cost_usd: 0.0, // Initialize to 0.0
66
+ completion_tokens_cost_usd: 0.0, // Initialize to 0.0
67
+ total_cost_usd: 0.0 // Initialize to 0.0
68
+ },
69
+ };
70
+ }
71
+ // Revert buildTraceTree to return a FLAT list, relying on parent_span_id for hierarchy
72
+ // parent_span_id here refers to the GENERATED UUID of the parent.
73
+ function buildTraceTree(spansList) {
74
+ if (!spansList || spansList.length === 0) {
75
+ return [];
76
+ }
77
+ // Assign depth using parent references (UUIDs)
78
+ const spansById = {};
79
+ // Use the generated span_id (UUID) for the map key
80
+ spansList.forEach(span => { spansById[span.span_id] = span; });
81
+ const depths = {};
82
+ const visited = new Set();
83
+ function calculateDepth(spanId) {
84
+ if (depths[spanId] !== undefined)
85
+ return depths[spanId];
86
+ if (visited.has(spanId)) {
87
+ console.warn(`[OtelExporter BuildTree] Cycle or re-visit detected for span ${spanId}`);
88
+ return 0;
89
+ }
90
+ visited.add(spanId);
91
+ const span = spansById[spanId];
92
+ if (!span) {
93
+ console.warn(`[OtelExporter BuildTree] Span ${spanId} not found in spansById map.`);
94
+ visited.delete(spanId); // Clean up visited set
95
+ return 0;
96
+ }
97
+ // Check parent_span_id (which should be the parent's generated UUID)
98
+ if (!span.parent_span_id || !spansById[span.parent_span_id]) {
99
+ depths[spanId] = 0; // Root span
100
+ }
101
+ else {
102
+ try {
103
+ depths[spanId] = calculateDepth(span.parent_span_id) + 1;
104
+ }
105
+ catch (e) {
106
+ console.error(`[OtelExporter BuildTree] Error calculating depth for span ${spanId}, parent ${span.parent_span_id}: ${e.message}`);
107
+ depths[spanId] = -1; // Indicate an error
108
+ }
109
+ }
110
+ // visited.delete(spanId); // Optional: remove if cycles/revisits need different handling
111
+ return depths[spanId];
112
+ }
113
+ spansList.forEach(span => {
114
+ // Use the generated span_id (UUID) here
115
+ if (depths[span.span_id] === undefined) {
116
+ visited.clear();
117
+ try {
118
+ span.depth = calculateDepth(span.span_id);
119
+ }
120
+ catch (e) {
121
+ console.error(`[OtelExporter BuildTree] Failed initial depth calculation for ${span.span_id}: ${e.message}`);
122
+ span.depth = -1; // Assign error depth
123
+ }
124
+ }
125
+ else {
126
+ span.depth = depths[span.span_id];
127
+ }
128
+ });
129
+ // Create the final flat list, ensuring no 'children' field
130
+ const sortedSpans = spansList.map(span => {
131
+ const finalSpan = {
132
+ span_id: span.span_id, // Generated UUID
133
+ function: span.function,
134
+ depth: span.depth < 0 ? 0 : span.depth, // Reset error depth to 0
135
+ created_at: span.created_at,
136
+ parent_span_id: span.parent_span_id, // Parent's generated UUID or null/undefined
137
+ span_type: span.span_type,
138
+ inputs: span.inputs,
139
+ output: span.output,
140
+ duration: span.duration,
141
+ trace_id: span.trace_id,
142
+ };
143
+ // Explicitly remove children property if it somehow exists on the object
144
+ delete finalSpan.children;
145
+ return finalSpan;
146
+ });
147
+ // Sort the flat list by creation time as a fallback ordering
148
+ sortedSpans.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
149
+ return sortedSpans;
150
+ }
151
+ class JudgevalExporter {
152
+ constructor(config) {
153
+ this.serviceName = config.serviceName || 'otel-judgeval-export';
154
+ if (!config.apiKey) {
155
+ throw new Error("JudgevalExporter requires apiKey in config");
156
+ }
157
+ if (!config.organizationId) {
158
+ throw new Error("JudgevalExporter requires organizationId in config");
159
+ }
160
+ this.apiKey = config.apiKey;
161
+ this.organizationId = config.organizationId;
162
+ console.log('[OtelExporter] Initialized with API Key and Org ID.');
163
+ }
164
+ export(spans, resultCallback) {
165
+ return __awaiter(this, void 0, void 0, function* () {
166
+ var _a;
167
+ console.log('[OtelExporter] Export method called.');
168
+ console.log(`[OtelExporter] Number of spans received: ${spans.length}`);
169
+ if (spans.length === 0) {
170
+ return resultCallback({ code: core_1.ExportResultCode.SUCCESS });
171
+ }
172
+ const traces = new Map();
173
+ for (const span of spans) {
174
+ const traceId = span.spanContext().traceId;
175
+ if (!traces.has(traceId)) {
176
+ traces.set(traceId, []);
177
+ }
178
+ traces.get(traceId).push(span);
179
+ }
180
+ console.log(`[OtelExporter] Processing ${traces.size} unique trace(s).`);
181
+ const exportPromises = [];
182
+ const traceManager = new tracer_js_1.TraceManagerClient(this.apiKey, this.organizationId);
183
+ for (const [otelTraceId, traceSpans] of traces.entries()) {
184
+ const backendTraceId = (0, uuid_1.v4)();
185
+ console.log(`[OtelExporter] Mapping OTEL trace ${otelTraceId} to backend UUID ${backendTraceId}`);
186
+ const processAndSave = () => __awaiter(this, void 0, void 0, function* () {
187
+ var _a, _b, _c, _d;
188
+ try {
189
+ console.log(`[OtelExporter] Processing trace data for backend UUID ${backendTraceId} (${traceSpans.length} span(s)).`);
190
+ const otelIdToDbUuidMap = {};
191
+ const processedSpans = [];
192
+ let traceMetadata = {
193
+ projectName: 'default-otel-project',
194
+ traceName: 'Unnamed OTel Trace',
195
+ };
196
+ for (const span of traceSpans) {
197
+ const ctx = span.spanContext();
198
+ const attributes = parseOtelAttributes(span.attributes);
199
+ const dbSpanUuid = (0, uuid_1.v4)();
200
+ otelIdToDbUuidMap[ctx.spanId] = dbSpanUuid;
201
+ if (attributes['ai.telemetry.metadata.project_name']) {
202
+ traceMetadata.projectName = attributes['ai.telemetry.metadata.project_name'];
203
+ }
204
+ if (attributes['ai.telemetry.metadata.trace_name']) {
205
+ traceMetadata.traceName = attributes['ai.telemetry.metadata.trace_name'];
206
+ }
207
+ const startTime = span.startTime[0] + span.startTime[1] / 1e9;
208
+ const endTime = span.endTime[0] + span.endTime[1] / 1e9;
209
+ const duration = endTime - startTime;
210
+ // --- Determine Span Type --- START
211
+ let determinedSpanType = 'span'; // Default to 'span' (Use string type)
212
+ if (span.name === 'ai.generateText') {
213
+ // If it's the main generateText call, maybe treat it as a chain or agent span?
214
+ determinedSpanType = 'chain'; // Or 'agent' or 'span' depending on backend expectation
215
+ }
216
+ else if (span.name === 'ai.generateText.doGenerate') {
217
+ // The actual LLM call part
218
+ determinedSpanType = 'llm';
219
+ }
220
+ else if (span.name.includes('tool') || span.attributes['ai.tool.name']) {
221
+ determinedSpanType = 'tool'; // Example for tool spans
222
+ }
223
+ // Add more heuristics based on span.name or span.attributes if needed
224
+ // --- Determine Span Type --- END
225
+ processedSpans.push({
226
+ trace_id: backendTraceId,
227
+ span_id: dbSpanUuid,
228
+ otel_span_id: ctx.spanId,
229
+ otel_parent_span_id: span.parentSpanId,
230
+ parent_span_id: undefined,
231
+ function: span.name, // Keep using OTel span name for now
232
+ depth: 0,
233
+ created_at: new Date(startTime * 1000).toISOString(),
234
+ duration: duration < 0 ? 0 : duration,
235
+ inputs: mapToInternalInput(attributes),
236
+ output: mapToInternalOutput(attributes),
237
+ span_type: determinedSpanType,
238
+ });
239
+ }
240
+ processedSpans.forEach(span => {
241
+ if (span.otel_parent_span_id && otelIdToDbUuidMap[span.otel_parent_span_id]) {
242
+ span.parent_span_id = otelIdToDbUuidMap[span.otel_parent_span_id];
243
+ }
244
+ });
245
+ const traceEntries = buildTraceTree(processedSpans);
246
+ const traceStartTimeIso = traceEntries.length > 0 ? traceEntries.reduce((min, p) => (p.created_at < min ? p.created_at : min), traceEntries[0].created_at) : new Date().toISOString();
247
+ const traceEndTime = traceEntries.length > 0 ? traceEntries.reduce((max, p) => {
248
+ const endTs = new Date(p.created_at).getTime() + ((p.duration || 0) * 1000);
249
+ return endTs > max ? endTs : max;
250
+ }, 0) : Date.now();
251
+ const overallDuration = (traceEndTime - new Date(traceStartTimeIso).getTime()) / 1000;
252
+ const tokenCounts = {
253
+ prompt_tokens: 0,
254
+ completion_tokens: 0,
255
+ total_tokens: 0,
256
+ prompt_tokens_cost_usd: 0.0,
257
+ completion_tokens_cost_usd: 0.0,
258
+ total_cost_usd: 0.0
259
+ };
260
+ let firstModel = null;
261
+ for (const entry of traceEntries) {
262
+ if (entry.span_type === 'llm' && ((_a = entry.output) === null || _a === void 0 ? void 0 : _a.usage)) {
263
+ tokenCounts.prompt_tokens += entry.output.usage.prompt_tokens || 0;
264
+ tokenCounts.completion_tokens += entry.output.usage.completion_tokens || 0;
265
+ tokenCounts.total_tokens += entry.output.usage.total_tokens ||
266
+ ((entry.output.usage.prompt_tokens || 0) +
267
+ (entry.output.usage.completion_tokens || 0));
268
+ if (!firstModel && ((_b = entry.inputs) === null || _b === void 0 ? void 0 : _b.model)) {
269
+ firstModel = entry.inputs.model;
270
+ }
271
+ }
272
+ }
273
+ if (firstModel && (tokenCounts.prompt_tokens > 0 || tokenCounts.completion_tokens > 0)) {
274
+ try {
275
+ console.log(`[OtelExporter] Calculating token costs for model ${firstModel}...`);
276
+ const costResponse = yield traceManager.calculateTokenCosts(firstModel, tokenCounts.prompt_tokens, tokenCounts.completion_tokens);
277
+ if (costResponse) {
278
+ tokenCounts.prompt_tokens_cost_usd = costResponse.prompt_tokens_cost_usd;
279
+ tokenCounts.completion_tokens_cost_usd = costResponse.completion_tokens_cost_usd;
280
+ tokenCounts.total_cost_usd = costResponse.total_cost_usd;
281
+ console.log(`[OtelExporter] Calculated costs for model ${firstModel}: $${tokenCounts.total_cost_usd.toFixed(6)}`);
282
+ }
283
+ else {
284
+ console.log(`[OtelExporter] Could not fetch token costs for model ${firstModel}. Costs will be 0.`);
285
+ }
286
+ }
287
+ catch (error) {
288
+ console.error(`[OtelExporter] Error fetching token costs: ${error}`);
289
+ }
290
+ }
291
+ // <<< NEW: Update individual span costs >>>
292
+ // Assign the calculated *total* costs back to individual LLM spans
293
+ // Note: This might not be perfectly accurate if multiple models were used,
294
+ // but it ensures costs are numeric and mirrors native client approach.
295
+ for (const entry of traceEntries) {
296
+ if (entry.span_type === 'llm' && ((_c = entry.output) === null || _c === void 0 ? void 0 : _c.usage)) {
297
+ entry.output.usage.prompt_tokens_cost_usd = tokenCounts.prompt_tokens_cost_usd;
298
+ entry.output.usage.completion_tokens_cost_usd = tokenCounts.completion_tokens_cost_usd;
299
+ entry.output.usage.total_cost_usd = tokenCounts.total_cost_usd;
300
+ }
301
+ }
302
+ // <<< END NEW >>>
303
+ const traceSavePayload = {
304
+ trace_id: backendTraceId,
305
+ name: traceMetadata.traceName || ((_d = traceEntries[0]) === null || _d === void 0 ? void 0 : _d.function) || 'Unnamed OTel Trace',
306
+ project_name: traceMetadata.projectName,
307
+ created_at: traceStartTimeIso,
308
+ duration: overallDuration < 0 ? 0 : overallDuration,
309
+ token_counts: tokenCounts,
310
+ entries: traceEntries,
311
+ evaluation_runs: [],
312
+ overwrite: true,
313
+ parent_trace_id: null,
314
+ parent_name: null,
315
+ };
316
+ console.log(`[OtelExporter] Preparing to save trace with backend UUID ${backendTraceId} using TraceManagerClient.`);
317
+ console.log("[OtelExporter] Payload to be sent:", JSON.stringify(traceSavePayload, null, 2));
318
+ const response = yield traceManager.saveTrace(traceSavePayload);
319
+ console.log(`[OtelExporter] TraceManagerClient.saveTrace call completed for backend UUID ${backendTraceId}. Response received:`, response);
320
+ console.log(`[OtelExporter] Successfully exported trace group originally from OTEL trace ${otelTraceId} as backend UUID ${backendTraceId}.`);
321
+ return { code: core_1.ExportResultCode.SUCCESS };
322
+ }
323
+ catch (error) {
324
+ console.error(`[OtelExporter] Error exporting trace group originally from OTEL trace ${otelTraceId} (backend UUID ${backendTraceId}):`, error);
325
+ return { code: core_1.ExportResultCode.FAILED, error };
326
+ }
327
+ });
328
+ exportPromises.push(processAndSave());
329
+ }
330
+ try {
331
+ const results = yield Promise.all(exportPromises);
332
+ const overallResult = results.some(r => r.code === core_1.ExportResultCode.FAILED)
333
+ ? { code: core_1.ExportResultCode.FAILED, error: (_a = results.find(r => r.error)) === null || _a === void 0 ? void 0 : _a.error }
334
+ : { code: core_1.ExportResultCode.SUCCESS };
335
+ console.log(`[OtelExporter] Batch export finished. Overall result: ${overallResult.code === core_1.ExportResultCode.SUCCESS ? 'SUCCESS' : 'FAILED'}`);
336
+ resultCallback(overallResult);
337
+ }
338
+ catch (error) {
339
+ console.error('[OtelExporter] Unexpected error during batch processing:', error);
340
+ resultCallback({ code: core_1.ExportResultCode.FAILED, error });
341
+ }
342
+ });
343
+ }
344
+ shutdown() {
345
+ return __awaiter(this, void 0, void 0, function* () {
346
+ console.log('[OtelExporter] Shutting down.');
347
+ return Promise.resolve();
348
+ });
349
+ }
350
+ }
351
+ exports.JudgevalExporter = JudgevalExporter;
352
+ //# sourceMappingURL=otel-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-exporter.js","sourceRoot":"","sources":["../../../src/exporters/otel-exporter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA6E;AAE7E,+BAAoC;AAEpC,+EAA+E;AAC/E,mDAAyG;AAEzG,6CAA6C;AAC7C,SAAS,mBAAmB,CAAC,aAAkC;IAC3D,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9B,UAAU,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAA+B;IACvD,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,IAAI,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC;QACvE,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAChD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAC;YAC1E,QAAQ,GAAG,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,2EAA2E,QAAQ,EAAE,CAAC,CAAC;QACpG,QAAQ,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,OAAO;QACH,KAAK,EAAE,UAAU,CAAC,sBAAsB,CAAC;QACzC,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,MAAM,EAAE,MAAM;KACjB,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA+B;IACxD,MAAM,WAAW,GAAG,UAAU,CAAC,2BAA2B,CAAC,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACnG,MAAM,YAAY,GAAG,UAAU,CAAC,4BAA4B,CAAC,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACzG,IAAI,WAAW,GAAG,IAAI,CAAC;IACvB,IAAI,WAAW,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QAC9C,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAC7C,CAAC;IAED,OAAO;QACH,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC;QACvC,KAAK,EAAE;YACH,aAAa,EAAE,WAAW;YAC1B,iBAAiB,EAAE,YAAY;YAC/B,YAAY,EAAE,WAAW;YACzB,sBAAsB,EAAE,GAAG,EAAE,oBAAoB;YACjD,0BAA0B,EAAE,GAAG,EAAE,oBAAoB;YACrD,cAAc,EAAE,GAAG,CAAC,oBAAoB;SAC3C;KACJ,CAAC;AACN,CAAC;AAaD,uFAAuF;AACvF,kEAAkE;AAClE,SAAS,cAAc,CAAC,SAA0B;IAC9C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAqC,EAAE,CAAC;IACvD,mDAAmD;IACnD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,cAAc,CAAC,MAAc;QAClC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,gEAAgE,MAAM,EAAE,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,CAAC,IAAI,CAAC,iCAAiC,MAAM,8BAA8B,CAAC,CAAC;YACpF,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB;YAC/C,OAAO,CAAC,CAAC;QACb,CAAC;QAED,qEAAqE;QACrE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;QACpC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,6DAA6D,MAAM,YAAY,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB;YAC7C,CAAC;QACL,CAAC;QAED,yFAAyF;QAEzF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,wCAAwC;QACxC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC;gBACA,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,iEAAiE,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5G,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB;YAC3C,CAAC;QACL,CAAC;aAAM,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,WAAW,GAAyB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3D,MAAM,SAAS,GAAuB;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,iBAAiB;YACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,yBAAyB;YACjE,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,4CAA4C;YACjF,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC;QACF,yEAAyE;QACzE,OAAQ,SAAiB,CAAC,QAAQ,CAAC;QACnC,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAC7D,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhG,OAAO,WAAW,CAAC;AACvB,CAAC;AAUD,MAAa,gBAAgB;IAKzB,YAAY,MAA0B;QAClC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,sBAAsB,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACvE,CAAC;IAEK,MAAM,CAAC,KAAqB,EAAE,cAA8C;;;YAC9E,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,4CAA4C,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;YAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,IAAI,mBAAmB,CAAC,CAAC;YAEzE,MAAM,cAAc,GAA4B,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,8BAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAE9E,KAAK,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBACvD,MAAM,cAAc,GAAG,IAAA,SAAM,GAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,oBAAoB,cAAc,EAAE,CAAC,CAAC;gBAElG,MAAM,cAAc,GAAG,GAAgC,EAAE;;oBACrD,IAAI,CAAC;wBACD,OAAO,CAAC,GAAG,CAAC,yDAAyD,cAAc,KAAK,UAAU,CAAC,MAAM,YAAY,CAAC,CAAC;wBACvH,MAAM,iBAAiB,GAA8B,EAAE,CAAC;wBACxD,MAAM,cAAc,GAAoB,EAAE,CAAC;wBAC3C,IAAI,aAAa,GAAG;4BAChB,WAAW,EAAE,sBAAsB;4BACnC,SAAS,EAAE,oBAAoB;yBAClC,CAAC;wBAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;4BAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;4BAC/B,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BACxD,MAAM,UAAU,GAAG,IAAA,SAAM,GAAE,CAAC;4BAC5B,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;4BAE3C,IAAI,UAAU,CAAC,oCAAoC,CAAC,EAAE,CAAC;gCACnD,aAAa,CAAC,WAAW,GAAG,UAAU,CAAC,oCAAoC,CAAC,CAAC;4BACjF,CAAC;4BACD,IAAI,UAAU,CAAC,kCAAkC,CAAC,EAAE,CAAC;gCACjD,aAAa,CAAC,SAAS,GAAG,UAAU,CAAC,kCAAkC,CAAC,CAAC;4BAC7E,CAAC;4BAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;4BAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;4BACxD,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;4BAErC,oCAAoC;4BACpC,IAAI,kBAAkB,GAAW,MAAM,CAAC,CAAC,sCAAsC;4BAC/E,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gCAClC,+EAA+E;gCAC/E,kBAAkB,GAAG,OAAO,CAAC,CAAC,wDAAwD;4BAC1F,CAAC;iCAAM,IAAI,IAAI,CAAC,IAAI,KAAK,4BAA4B,EAAE,CAAC;gCACpD,2BAA2B;gCAC3B,kBAAkB,GAAG,KAAK,CAAC;4BAC/B,CAAC;iCAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gCACtE,kBAAkB,GAAG,MAAM,CAAC,CAAC,yBAAyB;4BAC3D,CAAC;4BACD,sEAAsE;4BACtE,kCAAkC;4BAElC,cAAc,CAAC,IAAI,CAAC;gCAChB,QAAQ,EAAE,cAAc;gCACxB,OAAO,EAAE,UAAU;gCACnB,YAAY,EAAE,GAAG,CAAC,MAAM;gCACxB,mBAAmB,EAAE,IAAI,CAAC,YAAY;gCACtC,cAAc,EAAE,SAAS;gCACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,oCAAoC;gCACzD,KAAK,EAAE,CAAC;gCACR,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gCACpD,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gCACrC,MAAM,EAAE,kBAAkB,CAAC,UAAU,CAAC;gCACtC,MAAM,EAAE,mBAAmB,CAAC,UAAU,CAAC;gCACvC,SAAS,EAAE,kBAAkB;6BAChC,CAAC,CAAC;wBACP,CAAC;wBAED,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BAC1B,IAAI,IAAI,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gCAC1E,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;4BACtE,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;wBAEpD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBACtL,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC1E,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC5E,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;wBACrC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;wBACnB,MAAM,eAAe,GAAG,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;wBAEtF,MAAM,WAAW,GAAG;4BAChB,aAAa,EAAE,CAAC;4BAChB,iBAAiB,EAAE,CAAC;4BACpB,YAAY,EAAE,CAAC;4BACf,sBAAsB,EAAE,GAAG;4BAC3B,0BAA0B,EAAE,GAAG;4BAC/B,cAAc,EAAE,GAAG;yBACtB,CAAC;wBACF,IAAI,UAAU,GAAkB,IAAI,CAAC;wBACrC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;4BAC/B,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,KAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,KAAK,CAAA,EAAE,CAAC;gCACnD,WAAW,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gCACnE,WAAW,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;gCAC3E,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY;oCACjD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;wCACxC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC;gCACvD,IAAI,CAAC,UAAU,KAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,KAAK,CAAA,EAAE,CAAC;oCACrC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gCACpC,CAAC;4BACL,CAAC;wBACL,CAAC;wBAED,IAAI,UAAU,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,IAAI,WAAW,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC;4BACrF,IAAI,CAAC;gCACD,OAAO,CAAC,GAAG,CAAC,oDAAoD,UAAU,KAAK,CAAC,CAAC;gCACjF,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,mBAAmB,CACvD,UAAU,EACV,WAAW,CAAC,aAAa,EACzB,WAAW,CAAC,iBAAiB,CAChC,CAAC;gCACF,IAAI,YAAY,EAAE,CAAC;oCACf,WAAW,CAAC,sBAAsB,GAAG,YAAY,CAAC,sBAAsB,CAAC;oCACzE,WAAW,CAAC,0BAA0B,GAAG,YAAY,CAAC,0BAA0B,CAAC;oCACjF,WAAW,CAAC,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC;oCACzD,OAAO,CAAC,GAAG,CAAC,6CAA6C,UAAU,MAAM,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCACtH,CAAC;qCAAM,CAAC;oCACJ,OAAO,CAAC,GAAG,CAAC,wDAAwD,UAAU,oBAAoB,CAAC,CAAC;gCACxG,CAAC;4BACL,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC;4BACzE,CAAC;wBACL,CAAC;wBAED,4CAA4C;wBAC5C,mEAAmE;wBACnE,2EAA2E;wBAC3E,uEAAuE;wBACvE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;4BAC/B,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,KAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,KAAK,CAAA,EAAE,CAAC;gCACnD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,WAAW,CAAC,sBAAsB,CAAC;gCAC/E,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,WAAW,CAAC,0BAA0B,CAAC;gCACvF,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;4BACnE,CAAC;wBACL,CAAC;wBACD,kBAAkB;wBAElB,MAAM,gBAAgB,GAAqB;4BACvC,QAAQ,EAAE,cAAc;4BACxB,IAAI,EAAE,aAAa,CAAC,SAAS,KAAI,MAAA,YAAY,CAAC,CAAC,CAAC,0CAAE,QAAQ,CAAA,IAAI,oBAAoB;4BAClF,YAAY,EAAE,aAAa,CAAC,WAAW;4BACvC,UAAU,EAAE,iBAAiB;4BAC7B,QAAQ,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;4BACnD,YAAY,EAAE,WAAW;4BACzB,OAAO,EAAE,YAAY;4BACrB,eAAe,EAAE,EAAE;4BACnB,SAAS,EAAE,IAAI;4BACf,eAAe,EAAE,IAAI;4BACrB,WAAW,EAAE,IAAI;yBACpB,CAAC;wBAEF,OAAO,CAAC,GAAG,CAAC,4DAA4D,cAAc,4BAA4B,CAAC,CAAC;wBACpH,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;wBAE7F,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;wBAEhE,OAAO,CAAC,GAAG,CAAC,+EAA+E,cAAc,sBAAsB,EAAE,QAAQ,CAAC,CAAC;wBAC3I,OAAO,CAAC,GAAG,CAAC,+EAA+E,WAAW,oBAAoB,cAAc,GAAG,CAAC,CAAC;wBAC7I,OAAO,EAAE,IAAI,EAAE,uBAAgB,CAAC,OAAO,EAAE,CAAC;oBAE9C,CAAC;oBAAC,OAAO,KAAU,EAAE,CAAC;wBAClB,OAAO,CAAC,KAAK,CAAC,yEAAyE,WAAW,kBAAkB,cAAc,IAAI,EAAE,KAAK,CAAC,CAAC;wBAC/I,OAAO,EAAE,IAAI,EAAE,uBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;oBACpD,CAAC;gBACL,CAAC,CAAA,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAClD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAgB,CAAC,MAAM,CAAC;oBACvE,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,0CAAE,KAAK,EAAE;oBAC7E,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,OAAO,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,yDAAyD,aAAa,CAAC,IAAI,KAAK,uBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/I,cAAc,CAAC,aAAa,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,KAAK,CAAC,CAAC;gBACjF,cAAc,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;KAAA;IAEK,QAAQ;;YACV,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;KAAA;CACJ;AA5ND,4CA4NC"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.TogetherJudge = exports.DefaultJudge = void 0;
39
+ exports.createJudge = createJudge;
40
+ const axios_1 = __importDefault(require("axios"));
41
+ const logger_js_1 = require("../common/logger.js");
42
+ const fs = __importStar(require("fs"));
43
+ const os = __importStar(require("os"));
44
+ const path = __importStar(require("path"));
45
+ const child_process_1 = require("child_process");
46
+ /**
47
+ * Default judge implementation using OpenAI API
48
+ */
49
+ class DefaultJudge {
50
+ constructor(modelName = 'gpt-3.5-turbo', apiKey, user) {
51
+ this.modelName = modelName;
52
+ this.apiKey = apiKey || process.env.OPENAI_API_KEY;
53
+ this.user = user;
54
+ if (!this.apiKey) {
55
+ (0, logger_js_1.warn)('No API key provided for DefaultJudge. Set OPENAI_API_KEY environment variable or pass apiKey to constructor.');
56
+ }
57
+ }
58
+ generate(prompt) {
59
+ // For synchronous generation, we need to block until we get a response
60
+ // This is similar to how the Python SDK's fetch_litellm_api_response works
61
+ if (!this.apiKey) {
62
+ throw new Error('No API key provided for DefaultJudge');
63
+ }
64
+ try {
65
+ // In Node.js, we can use a synchronous HTTP request via child_process
66
+ // Create a temporary file for the request and response
67
+ const tempDir = os.tmpdir();
68
+ const requestFile = path.join(tempDir, `openai-request-${Date.now()}.json`);
69
+ const responseFile = path.join(tempDir, `openai-response-${Date.now()}.json`);
70
+ // Write request data to file
71
+ fs.writeFileSync(requestFile, JSON.stringify(Object.assign({ model: this.modelName, messages: [{ role: 'user', content: prompt }], temperature: 0.0 }, (this.user ? { user: this.user } : {}))));
72
+ // Make the request using curl
73
+ const curlCommand = `curl -s -X POST https://api.openai.com/v1/chat/completions \
74
+ -H "Content-Type: application/json" \
75
+ -H "Authorization: Bearer ${this.apiKey}" \
76
+ -d @${requestFile} > ${responseFile}`;
77
+ (0, child_process_1.execSync)(curlCommand);
78
+ // Read the response
79
+ const responseData = JSON.parse(fs.readFileSync(responseFile, 'utf8'));
80
+ // Clean up temporary files
81
+ fs.unlinkSync(requestFile);
82
+ fs.unlinkSync(responseFile);
83
+ // Return the content
84
+ return responseData.choices[0].message.content;
85
+ }
86
+ catch (e) {
87
+ (0, logger_js_1.error)(`Error in synchronous generate: ${e.message}`);
88
+ throw new Error(`Failed to generate text: ${e.message}`);
89
+ }
90
+ }
91
+ aGenerate(prompt) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ if (!this.apiKey) {
94
+ throw new Error('No API key provided for DefaultJudge');
95
+ }
96
+ try {
97
+ const response = yield axios_1.default.post('https://api.openai.com/v1/chat/completions', Object.assign({ model: this.modelName, messages: [{ role: 'user', content: prompt }], temperature: 0.0 }, (this.user ? { user: this.user } : {})), {
98
+ headers: {
99
+ 'Content-Type': 'application/json',
100
+ 'Authorization': `Bearer ${this.apiKey}`
101
+ }
102
+ });
103
+ return response.data.choices[0].message.content;
104
+ }
105
+ catch (e) {
106
+ (0, logger_js_1.error)(`Error generating text with OpenAI API: ${e.message}`);
107
+ throw new Error(`Failed to generate text: ${e.message}`);
108
+ }
109
+ });
110
+ }
111
+ getModelName() {
112
+ return this.modelName;
113
+ }
114
+ }
115
+ exports.DefaultJudge = DefaultJudge;
116
+ /**
117
+ * Together AI judge implementation
118
+ */
119
+ class TogetherJudge {
120
+ constructor(modelName = 'meta-llama/Meta-Llama-3-8B-Instruct-Turbo', apiKey) {
121
+ this.modelName = modelName;
122
+ this.apiKey = apiKey || process.env.TOGETHER_API_KEY;
123
+ if (!this.apiKey) {
124
+ (0, logger_js_1.warn)('No API key provided for TogetherJudge. Set TOGETHER_API_KEY environment variable or pass apiKey to constructor.');
125
+ }
126
+ }
127
+ generate(prompt) {
128
+ // For synchronous generation, we need to block until we get a response
129
+ if (!this.apiKey) {
130
+ throw new Error('No API key provided for TogetherJudge');
131
+ }
132
+ try {
133
+ // In Node.js, we can use a synchronous HTTP request via child_process
134
+ const tempDir = os.tmpdir();
135
+ const requestFile = path.join(tempDir, `together-request-${Date.now()}.json`);
136
+ const responseFile = path.join(tempDir, `together-response-${Date.now()}.json`);
137
+ // Write request data to file
138
+ fs.writeFileSync(requestFile, JSON.stringify({
139
+ model: this.modelName,
140
+ prompt: prompt,
141
+ temperature: 0.0,
142
+ max_tokens: 1024
143
+ }));
144
+ // Make the request using curl
145
+ const curlCommand = `curl -s -X POST https://api.together.xyz/v1/completions \
146
+ -H "Content-Type: application/json" \
147
+ -H "Authorization: Bearer ${this.apiKey}" \
148
+ -d @${requestFile} > ${responseFile}`;
149
+ (0, child_process_1.execSync)(curlCommand);
150
+ // Read the response
151
+ const responseData = JSON.parse(fs.readFileSync(responseFile, 'utf8'));
152
+ // Clean up temporary files
153
+ fs.unlinkSync(requestFile);
154
+ fs.unlinkSync(responseFile);
155
+ // Return the content
156
+ return responseData.choices[0].text;
157
+ }
158
+ catch (e) {
159
+ (0, logger_js_1.error)(`Error in synchronous generate: ${e.message}`);
160
+ throw new Error(`Failed to generate text: ${e.message}`);
161
+ }
162
+ }
163
+ aGenerate(prompt) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ if (!this.apiKey) {
166
+ throw new Error('No API key provided for TogetherJudge');
167
+ }
168
+ try {
169
+ const response = yield axios_1.default.post('https://api.together.xyz/v1/completions', {
170
+ model: this.modelName,
171
+ prompt: prompt,
172
+ temperature: 0.0,
173
+ max_tokens: 1024
174
+ }, {
175
+ headers: {
176
+ 'Content-Type': 'application/json',
177
+ 'Authorization': `Bearer ${this.apiKey}`
178
+ }
179
+ });
180
+ return response.data.choices[0].text;
181
+ }
182
+ catch (e) {
183
+ (0, logger_js_1.error)(`Error generating text with Together API: ${e.message}`);
184
+ throw new Error(`Failed to generate text: ${e.message}`);
185
+ }
186
+ });
187
+ }
188
+ getModelName() {
189
+ return this.modelName;
190
+ }
191
+ }
192
+ exports.TogetherJudge = TogetherJudge;
193
+ /**
194
+ * Create a judge instance
195
+ * @param model Model name or Judge instance
196
+ * @param user Optional user identifier
197
+ * @returns Judge instance and whether it's a native model
198
+ */
199
+ function createJudge(model, user) {
200
+ if (!model) {
201
+ return { judge: new DefaultJudge(undefined, undefined, user), usingNativeModel: true };
202
+ }
203
+ if (typeof model === 'string') {
204
+ // Check if it's a Together AI model
205
+ if (model.startsWith('together/') ||
206
+ model.startsWith('meta-llama/') ||
207
+ model.startsWith('mistralai/') ||
208
+ model.includes('llama')) {
209
+ return { judge: new TogetherJudge(model), usingNativeModel: true };
210
+ }
211
+ // Default to OpenAI
212
+ return { judge: new DefaultJudge(model, undefined, user), usingNativeModel: true };
213
+ }
214
+ // It's already a Judge instance
215
+ return { judge: model, usingNativeModel: false };
216
+ }
217
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/judges/index.ts"],"names":[],"mappings":"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"}