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
|
@@ -6,7 +6,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
9
|
+
exports.debug = debug;
|
|
10
|
+
exports.log = log;
|
|
11
|
+
exports.info = info;
|
|
12
|
+
exports.warning = warning;
|
|
13
|
+
exports.warn = warn;
|
|
14
|
+
exports.error = error;
|
|
15
|
+
exports.setExampleContext = setExampleContext;
|
|
16
|
+
exports.clearExampleContext = clearExampleContext;
|
|
17
|
+
exports.withExampleContext = withExampleContext;
|
|
18
|
+
exports.formatEvaluationResults = formatEvaluationResults;
|
|
19
|
+
exports.printResults = printResults;
|
|
20
|
+
exports.print = print;
|
|
10
21
|
// Remove fs and path imports if no longer needed
|
|
11
22
|
// import * as fs from 'fs';
|
|
12
23
|
// import * as path from 'path';
|
|
@@ -18,49 +29,48 @@ let currentTimestamp = null;
|
|
|
18
29
|
* Log a debug message
|
|
19
30
|
*/
|
|
20
31
|
function debug(message, meta) {
|
|
21
|
-
|
|
32
|
+
// Prioritize meta.exampleId over currentExampleId
|
|
33
|
+
const exampleId = (meta === null || meta === void 0 ? void 0 : meta.exampleId) !== undefined ? meta.exampleId : currentExampleId;
|
|
34
|
+
logger_instance_js_1.default.debug(message, Object.assign(Object.assign({}, meta), { exampleId, timestamp: currentTimestamp }));
|
|
22
35
|
}
|
|
23
|
-
exports.debug = debug;
|
|
24
36
|
/**
|
|
25
37
|
* Log an info message (alias for info)
|
|
26
38
|
*/
|
|
27
|
-
function log(message,
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
meta = { args: args };
|
|
32
|
-
}
|
|
33
|
-
logger_instance_js_1.default.info(message, Object.assign(Object.assign({}, meta), { exampleId: currentExampleId, timestamp: currentTimestamp }));
|
|
39
|
+
function log(message, meta) {
|
|
40
|
+
// Prioritize meta.exampleId over currentExampleId
|
|
41
|
+
const exampleId = (meta === null || meta === void 0 ? void 0 : meta.exampleId) !== undefined ? meta.exampleId : currentExampleId;
|
|
42
|
+
logger_instance_js_1.default.info(message, Object.assign(Object.assign({}, meta), { exampleId, timestamp: currentTimestamp }));
|
|
34
43
|
}
|
|
35
|
-
exports.log = log;
|
|
36
44
|
/**
|
|
37
45
|
* Log an info message
|
|
38
46
|
*/
|
|
39
47
|
function info(message, meta) {
|
|
40
|
-
|
|
48
|
+
// Prioritize meta.exampleId over currentExampleId
|
|
49
|
+
const exampleId = (meta === null || meta === void 0 ? void 0 : meta.exampleId) !== undefined ? meta.exampleId : currentExampleId;
|
|
50
|
+
logger_instance_js_1.default.info(message, Object.assign(Object.assign({}, meta), { exampleId, timestamp: currentTimestamp }));
|
|
41
51
|
}
|
|
42
|
-
exports.info = info;
|
|
43
52
|
/**
|
|
44
53
|
* Log a warning message
|
|
45
54
|
*/
|
|
46
55
|
function warning(message, meta) {
|
|
47
|
-
|
|
56
|
+
// Prioritize meta.exampleId over currentExampleId
|
|
57
|
+
const exampleId = (meta === null || meta === void 0 ? void 0 : meta.exampleId) !== undefined ? meta.exampleId : currentExampleId;
|
|
58
|
+
logger_instance_js_1.default.warn(message, Object.assign(Object.assign({}, meta), { exampleId, timestamp: currentTimestamp }));
|
|
48
59
|
}
|
|
49
|
-
exports.warning = warning;
|
|
50
60
|
/**
|
|
51
61
|
* Alias for warning
|
|
52
62
|
*/
|
|
53
63
|
function warn(message, meta) {
|
|
54
64
|
warning(message, meta);
|
|
55
65
|
}
|
|
56
|
-
exports.warn = warn;
|
|
57
66
|
/**
|
|
58
67
|
* Log an error message
|
|
59
68
|
*/
|
|
60
69
|
function error(message, meta) {
|
|
61
|
-
|
|
70
|
+
// Prioritize meta.exampleId over currentExampleId
|
|
71
|
+
const exampleId = (meta === null || meta === void 0 ? void 0 : meta.exampleId) !== undefined ? meta.exampleId : currentExampleId;
|
|
72
|
+
logger_instance_js_1.default.error(message, Object.assign(Object.assign({}, meta), { exampleId, timestamp: currentTimestamp }));
|
|
62
73
|
}
|
|
63
|
-
exports.error = error;
|
|
64
74
|
/**
|
|
65
75
|
* Set the current example context for logging (Keep for potential context integration)
|
|
66
76
|
*/
|
|
@@ -68,7 +78,6 @@ function setExampleContext(exampleId, timestamp) {
|
|
|
68
78
|
currentExampleId = exampleId;
|
|
69
79
|
currentTimestamp = timestamp;
|
|
70
80
|
}
|
|
71
|
-
exports.setExampleContext = setExampleContext;
|
|
72
81
|
/**
|
|
73
82
|
* Clear the current example context (Keep for potential context integration)
|
|
74
83
|
*/
|
|
@@ -76,7 +85,6 @@ function clearExampleContext() {
|
|
|
76
85
|
currentExampleId = null;
|
|
77
86
|
currentTimestamp = null;
|
|
78
87
|
}
|
|
79
|
-
exports.clearExampleContext = clearExampleContext;
|
|
80
88
|
/**
|
|
81
89
|
* Create a context for example-specific logging (Keep for potential context integration)
|
|
82
90
|
*/
|
|
@@ -89,7 +97,6 @@ function withExampleContext(exampleId, timestamp, fn) {
|
|
|
89
97
|
clearExampleContext();
|
|
90
98
|
}
|
|
91
99
|
}
|
|
92
|
-
exports.withExampleContext = withExampleContext;
|
|
93
100
|
/**
|
|
94
101
|
* Format evaluation results for display
|
|
95
102
|
* This matches the Python SDK's output format with clickable links
|
|
@@ -127,7 +134,6 @@ function formatEvaluationResults(results, projectName, evalName) {
|
|
|
127
134
|
}
|
|
128
135
|
return output;
|
|
129
136
|
}
|
|
130
|
-
exports.formatEvaluationResults = formatEvaluationResults;
|
|
131
137
|
/**
|
|
132
138
|
* Print evaluation results to the console
|
|
133
139
|
* This matches the Python SDK's output format exactly
|
|
@@ -150,7 +156,6 @@ function printResults(results, projectName, evalName) {
|
|
|
150
156
|
// Print raw results in the same format as Python SDK
|
|
151
157
|
console.log(JSON.stringify(results, null, 2));
|
|
152
158
|
}
|
|
153
|
-
exports.printResults = printResults;
|
|
154
159
|
/**
|
|
155
160
|
* Simplified print function for results - matches Python SDK's print(results) behavior
|
|
156
161
|
* This is the preferred way to print results
|
|
@@ -217,5 +222,4 @@ function print(data) {
|
|
|
217
222
|
console.log(JSON.stringify(data, null, 2));
|
|
218
223
|
}
|
|
219
224
|
}
|
|
220
|
-
exports.print = print;
|
|
221
225
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/common/logger.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/common/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.TraceManagerClient = exports.TraceClient = exports.Tracer =
|
|
15
|
+
exports.TraceManagerClient = exports.TraceClient = exports.Tracer = void 0;
|
|
16
|
+
exports.wrap = wrap;
|
|
16
17
|
// Core Node.js imports
|
|
17
18
|
const uuid_1 = require("uuid");
|
|
18
19
|
const async_hooks_1 = require("async_hooks");
|
|
@@ -49,6 +50,10 @@ function asyncFunctionWrapper(func) {
|
|
|
49
50
|
}
|
|
50
51
|
const result = yield traceClientContextAsyncLocalStorage
|
|
51
52
|
.run(traceClientContext, () => func(...args));
|
|
53
|
+
if (traceClientContext.entries.length > parentTraceClientContext.entries.length) {
|
|
54
|
+
[traceClientContext.entries, parentTraceClientContext.entries] =
|
|
55
|
+
[parentTraceClientContext.entries, traceClientContext.entries];
|
|
56
|
+
}
|
|
52
57
|
parentTraceClientContext.entries.push(...traceClientContext.entries);
|
|
53
58
|
return result;
|
|
54
59
|
});
|
|
@@ -380,6 +385,26 @@ class TraceClient {
|
|
|
380
385
|
this.endSpan();
|
|
381
386
|
}
|
|
382
387
|
}
|
|
388
|
+
/**
|
|
389
|
+
* Retrieves the ID of the currently active span in this trace context.
|
|
390
|
+
* Relies on AsyncLocalStorage context established by observe/span.
|
|
391
|
+
* @returns {string | undefined} The ID of the current span, or undefined if none is active.
|
|
392
|
+
*/
|
|
393
|
+
getCurrentSpanId() {
|
|
394
|
+
const traceClientContext = getTraceClientContext(); // Internal function using AsyncLocalStorage
|
|
395
|
+
if (!traceClientContext) {
|
|
396
|
+
// Should ideally not happen if called within an observe/trace context
|
|
397
|
+
console.warn("[Judgeval] getCurrentSpanId called outside of an active trace context.");
|
|
398
|
+
return undefined;
|
|
399
|
+
}
|
|
400
|
+
const currentEntry = traceClientContext.entryStack.at(-1); // Get the latest 'enter' entry
|
|
401
|
+
if (!currentEntry) {
|
|
402
|
+
// This might happen if called right at the start of a trace before the first span
|
|
403
|
+
// console.warn("[Judgeval] getCurrentSpanId called but span stack is empty.");
|
|
404
|
+
return undefined;
|
|
405
|
+
}
|
|
406
|
+
return currentEntry.span_id;
|
|
407
|
+
}
|
|
383
408
|
getDuration() {
|
|
384
409
|
return (Date.now() / 1000) - this.startTime;
|
|
385
410
|
}
|
|
@@ -495,14 +520,16 @@ class TraceClient {
|
|
|
495
520
|
}
|
|
496
521
|
save() {
|
|
497
522
|
return __awaiter(this, arguments, void 0, function* (emptySave = false) {
|
|
498
|
-
var _a, _b
|
|
499
|
-
|
|
523
|
+
var _a, _b;
|
|
524
|
+
// If monitoring is disabled or trace hasn't started, don't save
|
|
525
|
+
if (!this.enableMonitoring || this.startTime === -1 || !this.traceManager) {
|
|
526
|
+
logger_instance_js_1.default.info(`[TraceClient ${this.traceId}] Monitoring disabled or trace not started. Not saving.`);
|
|
500
527
|
return null;
|
|
501
528
|
}
|
|
502
|
-
const
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
|
|
529
|
+
const endTime = Date.now() / 1000; // Current time in seconds
|
|
530
|
+
const duration = endTime - this.startTime;
|
|
531
|
+
const [condensedEntries, evalRuns] = this.condenseTrace(getTraceClientContext().entries);
|
|
532
|
+
// Calculate token counts and costs
|
|
506
533
|
const tokenCounts = {
|
|
507
534
|
prompt_tokens: 0,
|
|
508
535
|
completion_tokens: 0,
|
|
@@ -511,146 +538,94 @@ class TraceClient {
|
|
|
511
538
|
completion_tokens_cost_usd: 0.0,
|
|
512
539
|
total_cost_usd: 0.0
|
|
513
540
|
};
|
|
514
|
-
//
|
|
515
|
-
const
|
|
516
|
-
|
|
517
|
-
|
|
541
|
+
// Flatten the condensed entries for iteration
|
|
542
|
+
const flatEntries = [];
|
|
543
|
+
function flatten(entry) {
|
|
544
|
+
flatEntries.push(entry);
|
|
545
|
+
if (entry.children) {
|
|
546
|
+
entry.children.forEach(flatten);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
condensedEntries.forEach(flatten);
|
|
550
|
+
// Use a Set to avoid double-counting tokens from nested calls if structure is complex
|
|
551
|
+
// Note: Assuming span_ids are unique across the trace
|
|
552
|
+
const processedSpanIds = new Set();
|
|
553
|
+
let firstModel = null;
|
|
554
|
+
for (const entry of flatEntries) {
|
|
555
|
+
if (processedSpanIds.has(entry.span_id))
|
|
556
|
+
continue;
|
|
557
|
+
processedSpanIds.add(entry.span_id);
|
|
518
558
|
if (entry.span_type === 'llm' && ((_a = entry.output) === null || _a === void 0 ? void 0 : _a.usage)) {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
else if (usage.input_tokens !== undefined || usage.output_tokens !== undefined) {
|
|
529
|
-
promptTokens = usage.input_tokens || 0;
|
|
530
|
-
completionTokens = usage.output_tokens || 0;
|
|
531
|
-
// Standardize naming
|
|
532
|
-
usage.prompt_tokens = promptTokens;
|
|
533
|
-
usage.completion_tokens = completionTokens;
|
|
534
|
-
delete usage.input_tokens;
|
|
535
|
-
delete usage.output_tokens;
|
|
536
|
-
}
|
|
537
|
-
tokenCounts.prompt_tokens += promptTokens;
|
|
538
|
-
tokenCounts.completion_tokens += completionTokens;
|
|
539
|
-
tokenCounts.total_tokens += usage.total_tokens || (promptTokens + completionTokens);
|
|
540
|
-
// Add to list of calls for cost calculation
|
|
541
|
-
if (modelName) {
|
|
542
|
-
llmCalls.push({
|
|
543
|
-
modelName,
|
|
544
|
-
promptTokens,
|
|
545
|
-
completionTokens,
|
|
546
|
-
entryIndex: index
|
|
547
|
-
});
|
|
559
|
+
tokenCounts.prompt_tokens += entry.output.usage.prompt_tokens || 0;
|
|
560
|
+
tokenCounts.completion_tokens += entry.output.usage.completion_tokens || 0;
|
|
561
|
+
// Total tokens are often directly provided, otherwise sum
|
|
562
|
+
tokenCounts.total_tokens += entry.output.usage.total_tokens ||
|
|
563
|
+
((entry.output.usage.prompt_tokens || 0) +
|
|
564
|
+
(entry.output.usage.completion_tokens || 0));
|
|
565
|
+
// Capture the first model encountered in LLM spans
|
|
566
|
+
if (!firstModel && ((_b = entry.inputs) === null || _b === void 0 ? void 0 : _b.model)) {
|
|
567
|
+
firstModel = entry.inputs.model;
|
|
548
568
|
}
|
|
549
569
|
}
|
|
550
|
-
index++;
|
|
551
570
|
}
|
|
552
|
-
//
|
|
553
|
-
if (
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
const entry = condensedEntries[call.entryIndex];
|
|
562
|
-
// Ensure output and usage objects exist before assigning costs
|
|
563
|
-
if (entry.output && entry.output.usage) {
|
|
564
|
-
// --- This part assigns costs to the individual span ---
|
|
565
|
-
entry.output.usage.prompt_tokens_cost_usd = costs.prompt_tokens_cost_usd;
|
|
566
|
-
entry.output.usage.completion_tokens_cost_usd = costs.completion_tokens_cost_usd;
|
|
567
|
-
entry.output.usage.total_cost_usd = costs.total_cost_usd;
|
|
568
|
-
logger_instance_js_1.default.debug(`Assigned costs to span ${entry.span_id} (model: ${call.modelName})`, { costs }); // Added debug log
|
|
569
|
-
// -----------------------------------------------------
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
572
|
-
logger_instance_js_1.default.warn(`Could not assign costs to span ${entry.span_id} (model: ${call.modelName}): Missing 'output' or 'output.usage' object.`, { output: entry.output }); // Log if structure is missing
|
|
573
|
-
}
|
|
574
|
-
// Add to the total costs for the trace
|
|
575
|
-
tokenCounts.prompt_tokens_cost_usd += (_c = costs.prompt_tokens_cost_usd) !== null && _c !== void 0 ? _c : 0.0;
|
|
576
|
-
tokenCounts.completion_tokens_cost_usd += (_d = costs.completion_tokens_cost_usd) !== null && _d !== void 0 ? _d : 0.0;
|
|
577
|
-
tokenCounts.total_cost_usd += (_e = costs.total_cost_usd) !== null && _e !== void 0 ? _e : 0.0;
|
|
578
|
-
}
|
|
579
|
-
else {
|
|
580
|
-
// If calculation failed, set costs to null in the entry (matching Python behavior)
|
|
581
|
-
const entry = condensedEntries[call.entryIndex];
|
|
582
|
-
// Ensure output and usage objects exist before assigning null costs
|
|
583
|
-
if (entry.output && entry.output.usage) {
|
|
584
|
-
// --- Sets null costs on the individual span ---
|
|
585
|
-
entry.output.usage.prompt_tokens_cost_usd = null;
|
|
586
|
-
entry.output.usage.completion_tokens_cost_usd = null;
|
|
587
|
-
entry.output.usage.total_cost_usd = null;
|
|
588
|
-
// ------------------------------------------
|
|
589
|
-
}
|
|
590
|
-
else {
|
|
591
|
-
// Log if we can't even assign null because the structure is missing
|
|
592
|
-
logger_instance_js_1.default.warn(`Could not assign null costs to span ${entry.span_id} (model: ${call.modelName}): Missing 'output' or 'output.usage' object.`, { output: entry.output });
|
|
593
|
-
}
|
|
594
|
-
logger_instance_js_1.default.warn(`Token cost calculation failed for model '${call.modelName}'. Cost information will be null for this span.`); // More specific warning
|
|
595
|
-
}
|
|
571
|
+
// <<< NEW: Fetch costs from backend if a model was found and tokens exist >>>
|
|
572
|
+
if (firstModel && (tokenCounts.prompt_tokens > 0 || tokenCounts.completion_tokens > 0)) {
|
|
573
|
+
try {
|
|
574
|
+
const costResponse = yield this.traceManager.calculateTokenCosts(firstModel, tokenCounts.prompt_tokens, tokenCounts.completion_tokens);
|
|
575
|
+
if (costResponse) {
|
|
576
|
+
tokenCounts.prompt_tokens_cost_usd = costResponse.prompt_tokens_cost_usd;
|
|
577
|
+
tokenCounts.completion_tokens_cost_usd = costResponse.completion_tokens_cost_usd;
|
|
578
|
+
tokenCounts.total_cost_usd = costResponse.total_cost_usd;
|
|
579
|
+
logger_instance_js_1.default.info(`[TraceClient ${this.traceId}] Calculated costs for model ${firstModel}: $${tokenCounts.total_cost_usd.toFixed(6)}`);
|
|
596
580
|
}
|
|
597
|
-
|
|
598
|
-
logger_instance_js_1.default.warn(`
|
|
599
|
-
// Set costs to null in the entry if an error occurs during the loop iteration
|
|
600
|
-
const entry = condensedEntries[call.entryIndex];
|
|
601
|
-
// Ensure output and usage objects exist before assigning null costs on error
|
|
602
|
-
if (entry.output && entry.output.usage) {
|
|
603
|
-
// --- Sets null costs on the individual span on error ---
|
|
604
|
-
entry.output.usage.prompt_tokens_cost_usd = null;
|
|
605
|
-
entry.output.usage.completion_tokens_cost_usd = null;
|
|
606
|
-
entry.output.usage.total_cost_usd = null;
|
|
607
|
-
// ----------------------------------------------------
|
|
608
|
-
}
|
|
609
|
-
else {
|
|
610
|
-
// Log if we can't assign null on error because the structure is missing
|
|
611
|
-
logger_instance_js_1.default.warn(`Could not assign null costs to span ${entry.span_id} (model: ${call.modelName}) on error: Missing 'output' or 'output.usage' object.`, { output: entry.output });
|
|
612
|
-
}
|
|
581
|
+
else {
|
|
582
|
+
logger_instance_js_1.default.warn(`[TraceClient ${this.traceId}] Could not fetch token costs for model ${firstModel}. Costs will be 0.`);
|
|
613
583
|
}
|
|
614
584
|
}
|
|
585
|
+
catch (error) {
|
|
586
|
+
logger_instance_js_1.default.error(`[TraceClient ${this.traceId}] Error fetching token costs: ${error}`);
|
|
587
|
+
// Costs remain 0.0
|
|
588
|
+
}
|
|
615
589
|
}
|
|
616
|
-
//
|
|
617
|
-
const rulesDict = {};
|
|
618
|
-
this.rules.forEach(rule => {
|
|
619
|
-
var _a;
|
|
620
|
-
// Use rule_id if available, otherwise fallback to name
|
|
621
|
-
const key = (_a = rule.rule_id) !== null && _a !== void 0 ? _a : rule.name;
|
|
622
|
-
rulesDict[key] = rule;
|
|
623
|
-
});
|
|
590
|
+
// <<< END NEW >>>
|
|
624
591
|
const traceData = {
|
|
625
592
|
trace_id: this.traceId,
|
|
626
|
-
name: this.name,
|
|
593
|
+
name: this.name, // Use the sanitized name
|
|
627
594
|
project_name: this.projectName,
|
|
628
|
-
created_at: new Date(this.startTime * 1000).toISOString(),
|
|
629
|
-
duration:
|
|
595
|
+
created_at: new Date(this.startTime * 1000).toISOString(), // Convert start time to ISO string
|
|
596
|
+
duration: duration < 0 ? 0 : duration,
|
|
630
597
|
token_counts: tokenCounts,
|
|
631
|
-
entries: condensedEntries,
|
|
632
|
-
evaluation_runs:
|
|
598
|
+
entries: condensedEntries, // Send the potentially nested structure from condenseTrace
|
|
599
|
+
evaluation_runs: evalRuns, // Send evaluation runs collected
|
|
633
600
|
overwrite: this.overwrite,
|
|
634
601
|
parent_trace_id: this.parentTraceId,
|
|
635
|
-
parent_name: this.parentName
|
|
602
|
+
parent_name: this.parentName,
|
|
636
603
|
};
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
logger_instance_js_1.default.info(`Trace ${this.traceId} added to evaluation queue.`);
|
|
644
|
-
}
|
|
645
|
-
catch (evalError) {
|
|
646
|
-
logger_instance_js_1.default.warn(`Failed to add trace ${this.traceId} to evaluation queue.`, { error: evalError instanceof Error ? evalError.message : String(evalError) });
|
|
647
|
-
}
|
|
648
|
-
}
|
|
604
|
+
// <<< ADD LOGGING HERE >>>
|
|
605
|
+
logger_instance_js_1.default.info(`[TraceClient ${this.traceId}] Payload to be saved:`, JSON.stringify(traceData, null, 2));
|
|
606
|
+
// <<< END LOGGING >>>
|
|
607
|
+
if (emptySave) {
|
|
608
|
+
// Skip actual saving if emptySave is true (used for context management in generators)
|
|
609
|
+
logger_instance_js_1.default.info(`[TraceClient ${this.traceId}] emptySave=true, skipping actual save call.`);
|
|
649
610
|
return { traceId: this.traceId, traceData };
|
|
650
611
|
}
|
|
612
|
+
try {
|
|
613
|
+
logger_instance_js_1.default.info(`[TraceClient ${this.traceId}] Calling traceManager.saveTrace...`);
|
|
614
|
+
const response = yield this.traceManager.saveTrace(traceData);
|
|
615
|
+
logger_instance_js_1.default.info(`[TraceClient ${this.traceId}] Trace saved successfully. Response:`, response);
|
|
616
|
+
// Reset trace context after successful save
|
|
617
|
+
getTraceClientContext().entries = [];
|
|
618
|
+
getTraceClientContext().entryStack = [];
|
|
619
|
+
this.startTime = -1; // Reset start time
|
|
620
|
+
return { traceId: this.traceId, traceData: traceData }; // Return payload on success
|
|
621
|
+
}
|
|
651
622
|
catch (error) {
|
|
652
|
-
logger_instance_js_1.default.error(`
|
|
653
|
-
|
|
623
|
+
logger_instance_js_1.default.error(`[TraceClient ${this.traceId}] Error saving trace:`, error);
|
|
624
|
+
// Optionally reset context even on error?
|
|
625
|
+
// getTraceClientContext().entries = [];
|
|
626
|
+
// getTraceClientContext().entryStack = [];
|
|
627
|
+
// this.startTime = -1;
|
|
628
|
+
return null; // Indicate save failure
|
|
654
629
|
}
|
|
655
630
|
});
|
|
656
631
|
}
|
|
@@ -1106,5 +1081,4 @@ function wrap(client) {
|
|
|
1106
1081
|
}
|
|
1107
1082
|
return client;
|
|
1108
1083
|
}
|
|
1109
|
-
exports.wrap = wrap;
|
|
1110
1084
|
//# sourceMappingURL=tracer.js.map
|