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.
- package/dist/cjs/common/logger.js +28 -24
- package/dist/cjs/common/logger.js.map +1 -1
- package/dist/cjs/common/tracer.js +104 -130
- package/dist/cjs/common/tracer.js.map +1 -1
- package/dist/cjs/constants.js +2 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/data/datasets/eval-dataset-client.js +45 -0
- package/dist/cjs/data/datasets/eval-dataset-client.js.map +1 -1
- package/dist/cjs/e2etests/eval-operations.test.js +3 -3
- package/dist/cjs/exporters/otel-exporter.js +352 -0
- package/dist/cjs/exporters/otel-exporter.js.map +1 -0
- package/dist/cjs/judges/index.js +217 -0
- package/dist/cjs/judges/index.js.map +1 -0
- package/dist/cjs/run-evaluation.js +13 -13
- package/dist/cjs/run-evaluation.js.map +1 -1
- package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js +610 -0
- package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-correctness/index.js +19 -0
- package/dist/cjs/scorers/metrics/answer-correctness/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-correctness/prompts.js +175 -0
- package/dist/cjs/scorers/metrics/answer-correctness/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js +525 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/index.js +19 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js +179 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js +524 -0
- package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
- package/dist/cjs/scorers/metrics/faithfulness/index.js +19 -0
- package/dist/cjs/scorers/metrics/faithfulness/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/faithfulness/prompts.js +232 -0
- package/dist/cjs/scorers/metrics/faithfulness/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/hallucination/hallucination.js +390 -0
- package/dist/cjs/scorers/metrics/hallucination/hallucination.js.map +1 -0
- package/dist/cjs/scorers/metrics/hallucination/index.js +11 -0
- package/dist/cjs/scorers/metrics/hallucination/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/hallucination/prompts.js +106 -0
- package/dist/cjs/scorers/metrics/hallucination/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/index.js +19 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js +382 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js +124 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
- package/dist/esm/common/logger.js +16 -11
- package/dist/esm/common/logger.js.map +1 -1
- package/dist/esm/common/tracer.js +102 -128
- package/dist/esm/common/tracer.js.map +1 -1
- package/dist/esm/constants.js +1 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/data/datasets/eval-dataset-client.js +46 -1
- package/dist/esm/data/datasets/eval-dataset-client.js.map +1 -1
- package/dist/esm/e2etests/eval-operations.test.js +3 -3
- package/dist/esm/exporters/otel-exporter.js +348 -0
- package/dist/esm/exporters/otel-exporter.js.map +1 -0
- package/dist/esm/judges/index.js +185 -0
- package/dist/esm/judges/index.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js +601 -0
- package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-correctness/index.js +3 -0
- package/dist/esm/scorers/metrics/answer-correctness/index.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-correctness/prompts.js +171 -0
- package/dist/esm/scorers/metrics/answer-correctness/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js +521 -0
- package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-relevancy/index.js +3 -0
- package/dist/esm/scorers/metrics/answer-relevancy/index.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-relevancy/prompts.js +175 -0
- package/dist/esm/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/faithfulness/faithfulness.js +520 -0
- package/dist/esm/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
- package/dist/esm/scorers/metrics/faithfulness/index.js +3 -0
- package/dist/esm/scorers/metrics/faithfulness/index.js.map +1 -0
- package/dist/esm/scorers/metrics/faithfulness/prompts.js +228 -0
- package/dist/esm/scorers/metrics/faithfulness/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/hallucination/hallucination.js +386 -0
- package/dist/esm/scorers/metrics/hallucination/hallucination.js.map +1 -0
- package/dist/esm/scorers/metrics/hallucination/index.js +3 -0
- package/dist/esm/scorers/metrics/hallucination/index.js.map +1 -0
- package/dist/esm/scorers/metrics/hallucination/prompts.js +102 -0
- package/dist/esm/scorers/metrics/hallucination/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/instruction-adherence/index.js +3 -0
- package/dist/esm/scorers/metrics/instruction-adherence/index.js.map +1 -0
- package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js +378 -0
- package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
- package/dist/esm/scorers/metrics/instruction-adherence/prompts.js +120 -0
- package/dist/esm/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
- package/dist/types/common/logger.d.ts +1 -1
- package/dist/types/common/tracer.d.ts +6 -0
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/data/datasets/eval-dataset-client.d.ts +5 -0
- package/dist/types/exporters/otel-exporter.d.ts +16 -0
- package/dist/types/judges/index.d.ts +50 -0
- package/dist/types/scorers/metrics/answer-correctness/answer-correctness.d.ts +99 -0
- package/dist/types/scorers/metrics/answer-correctness/index.d.ts +2 -0
- package/dist/types/scorers/metrics/answer-correctness/prompts.d.ts +71 -0
- package/dist/types/scorers/metrics/answer-relevancy/answer-relevancy.d.ts +78 -0
- package/dist/types/scorers/metrics/answer-relevancy/index.d.ts +2 -0
- package/dist/types/scorers/metrics/answer-relevancy/prompts.d.ts +71 -0
- package/dist/types/scorers/metrics/faithfulness/faithfulness.d.ts +77 -0
- package/dist/types/scorers/metrics/faithfulness/index.d.ts +2 -0
- package/dist/types/scorers/metrics/faithfulness/prompts.d.ts +94 -0
- package/dist/types/scorers/metrics/hallucination/hallucination.d.ts +67 -0
- package/dist/types/scorers/metrics/hallucination/index.d.ts +3 -0
- package/dist/types/scorers/metrics/hallucination/prompts.d.ts +63 -0
- package/dist/types/scorers/metrics/instruction-adherence/index.d.ts +2 -0
- package/dist/types/scorers/metrics/instruction-adherence/instruction-adherence.d.ts +67 -0
- package/dist/types/scorers/metrics/instruction-adherence/prompts.d.ts +78 -0
- 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":"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"}
|
|
@@ -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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"}
|