orchajs 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/amarsia/analytics.js +60 -0
- package/dist/types.d.ts +27 -0
- package/dist-cjs/amarsia/analytics.js +46 -0
- package/package.json +1 -1
|
@@ -270,6 +270,7 @@ function projectRunFact(manifest, sessionId, run, projection) {
|
|
|
270
270
|
const failedActions = runEvents.filter((event) => event.type === "action.failed");
|
|
271
271
|
const evaluations = runEvents.filter((event) => event.type === "evaluation.completed" ||
|
|
272
272
|
event.type === "evaluation.failed");
|
|
273
|
+
const evaluationMetrics = evaluations.flatMap((event) => Array.isArray(event.data.metrics) ? event.data.metrics : []);
|
|
273
274
|
const error = asRecord(terminal?.data.error);
|
|
274
275
|
const lastAssistant = assistants.at(-1);
|
|
275
276
|
const status = terminal?.type === "run.completed"
|
|
@@ -324,6 +325,12 @@ function projectRunFact(manifest, sessionId, run, projection) {
|
|
|
324
325
|
evaluation_count: evaluations.length,
|
|
325
326
|
evaluation_pass_count: evaluations.filter((event) => event.type === "evaluation.completed" &&
|
|
326
327
|
event.data.status === "passed").length,
|
|
328
|
+
evaluation_failure_count: evaluations.filter((event) => event.type === "evaluation.completed" &&
|
|
329
|
+
event.data.status === "failed").length,
|
|
330
|
+
evaluation_error_count: evaluations.filter((event) => event.type === "evaluation.failed").length,
|
|
331
|
+
evaluation_metric_count: evaluationMetrics.length,
|
|
332
|
+
evaluation_metric_pass_count: evaluationMetrics.filter((metric) => asRecord(metric)?.passed === true).length,
|
|
333
|
+
evaluations: projectEvaluationLogs(evaluations),
|
|
327
334
|
...(typeof error?.code === "string" ? { error_code: error.code } : {}),
|
|
328
335
|
...(typeof error?.message === "string"
|
|
329
336
|
? { error_message: sanitizeErrorMessage(error.message) }
|
|
@@ -405,6 +412,59 @@ function projectActionLogs(events) {
|
|
|
405
412
|
};
|
|
406
413
|
});
|
|
407
414
|
}
|
|
415
|
+
function projectEvaluationLogs(events) {
|
|
416
|
+
return events.slice(0, 50).map((event) => {
|
|
417
|
+
const usage = asRecord(event.data.usage);
|
|
418
|
+
const error = asRecord(event.data.error);
|
|
419
|
+
const metrics = Array.isArray(event.data.metrics)
|
|
420
|
+
? event.data.metrics
|
|
421
|
+
.map(asRecord)
|
|
422
|
+
.filter((metric) => metric !== undefined)
|
|
423
|
+
.slice(0, 50)
|
|
424
|
+
.map((metric) => ({
|
|
425
|
+
name: typeof metric.name === "string" ? metric.name : "unknown_metric",
|
|
426
|
+
score: numberValue(metric.score),
|
|
427
|
+
threshold: numberValue(metric.threshold),
|
|
428
|
+
passed: metric.passed === true,
|
|
429
|
+
reasoning: typeof metric.reasoning === "string"
|
|
430
|
+
? sanitizeErrorMessage(metric.reasoning)
|
|
431
|
+
: "",
|
|
432
|
+
evidence: Array.isArray(metric.evidence)
|
|
433
|
+
? metric.evidence
|
|
434
|
+
.filter((item) => typeof item === "string")
|
|
435
|
+
.slice(0, 20)
|
|
436
|
+
.map(sanitizeErrorMessage)
|
|
437
|
+
: [],
|
|
438
|
+
}))
|
|
439
|
+
: [];
|
|
440
|
+
return {
|
|
441
|
+
name: typeof event.data.name === "string"
|
|
442
|
+
? event.data.name
|
|
443
|
+
: "unknown_evaluation",
|
|
444
|
+
status: event.type === "evaluation.failed"
|
|
445
|
+
? "error"
|
|
446
|
+
: event.data.status === "passed"
|
|
447
|
+
? "passed"
|
|
448
|
+
: "failed",
|
|
449
|
+
...(typeof event.data.provider === "string"
|
|
450
|
+
? { provider: event.data.provider }
|
|
451
|
+
: {}),
|
|
452
|
+
...(typeof event.data.model === "string"
|
|
453
|
+
? { model: event.data.model }
|
|
454
|
+
: {}),
|
|
455
|
+
duration_ms: numberValue(event.data.durationMs),
|
|
456
|
+
input_tokens: numberValue(usage?.inputTokens),
|
|
457
|
+
output_tokens: numberValue(usage?.outputTokens),
|
|
458
|
+
reasoning_tokens: numberValue(usage?.reasoningTokens),
|
|
459
|
+
cache_read_tokens: numberValue(usage?.cacheReadTokens),
|
|
460
|
+
cache_write_tokens: numberValue(usage?.cacheWriteTokens),
|
|
461
|
+
metrics,
|
|
462
|
+
...(typeof error?.message === "string"
|
|
463
|
+
? { error_message: sanitizeErrorMessage(error.message) }
|
|
464
|
+
: {}),
|
|
465
|
+
};
|
|
466
|
+
});
|
|
467
|
+
}
|
|
408
468
|
function takeBatch(queue) {
|
|
409
469
|
const batch = [];
|
|
410
470
|
let bytes = utf8ByteLength('{"schema_version":1,"runs":[]}');
|
package/dist/types.d.ts
CHANGED
|
@@ -97,6 +97,11 @@ export interface AmarsiaTelemetryRunV1 {
|
|
|
97
97
|
actions: AmarsiaTelemetryActionV1[];
|
|
98
98
|
evaluation_count: number;
|
|
99
99
|
evaluation_pass_count: number;
|
|
100
|
+
evaluation_failure_count: number;
|
|
101
|
+
evaluation_error_count: number;
|
|
102
|
+
evaluation_metric_count: number;
|
|
103
|
+
evaluation_metric_pass_count: number;
|
|
104
|
+
evaluations: AmarsiaTelemetryEvaluationV1[];
|
|
100
105
|
error_code?: string;
|
|
101
106
|
error_message?: string;
|
|
102
107
|
error_retryable?: boolean;
|
|
@@ -111,6 +116,28 @@ export interface AmarsiaTelemetryActionV1 {
|
|
|
111
116
|
error_code?: string;
|
|
112
117
|
error_message?: string;
|
|
113
118
|
}
|
|
119
|
+
export interface AmarsiaTelemetryEvaluationMetricV1 {
|
|
120
|
+
name: string;
|
|
121
|
+
score: number;
|
|
122
|
+
threshold: number;
|
|
123
|
+
passed: boolean;
|
|
124
|
+
reasoning: string;
|
|
125
|
+
evidence: string[];
|
|
126
|
+
}
|
|
127
|
+
export interface AmarsiaTelemetryEvaluationV1 {
|
|
128
|
+
name: string;
|
|
129
|
+
status: "passed" | "failed" | "error";
|
|
130
|
+
provider?: string;
|
|
131
|
+
model?: string;
|
|
132
|
+
duration_ms: number;
|
|
133
|
+
input_tokens: number;
|
|
134
|
+
output_tokens: number;
|
|
135
|
+
reasoning_tokens: number;
|
|
136
|
+
cache_read_tokens: number;
|
|
137
|
+
cache_write_tokens: number;
|
|
138
|
+
metrics: AmarsiaTelemetryEvaluationMetricV1[];
|
|
139
|
+
error_message?: string;
|
|
140
|
+
}
|
|
114
141
|
export interface AmarsiaTelemetryBatchV1 {
|
|
115
142
|
schema_version: 1;
|
|
116
143
|
runs: AmarsiaTelemetryRunV1[];
|
|
@@ -289,6 +289,9 @@ function projectRunFact(manifest, sessionId, run, projection) {
|
|
|
289
289
|
const evaluations = runEvents.filter(
|
|
290
290
|
(event) => event.type === "evaluation.completed" || event.type === "evaluation.failed"
|
|
291
291
|
);
|
|
292
|
+
const evaluationMetrics = evaluations.flatMap(
|
|
293
|
+
(event) => Array.isArray(event.data.metrics) ? event.data.metrics : []
|
|
294
|
+
);
|
|
292
295
|
const error = asRecord(terminal?.data.error);
|
|
293
296
|
const lastAssistant = assistants.at(-1);
|
|
294
297
|
const status = terminal?.type === "run.completed" ? "completed" : terminal?.type === "run.failed" ? "failed" : terminal?.type === "run.paused" ? "paused" : "running";
|
|
@@ -331,6 +334,17 @@ function projectRunFact(manifest, sessionId, run, projection) {
|
|
|
331
334
|
evaluation_pass_count: evaluations.filter(
|
|
332
335
|
(event) => event.type === "evaluation.completed" && event.data.status === "passed"
|
|
333
336
|
).length,
|
|
337
|
+
evaluation_failure_count: evaluations.filter(
|
|
338
|
+
(event) => event.type === "evaluation.completed" && event.data.status === "failed"
|
|
339
|
+
).length,
|
|
340
|
+
evaluation_error_count: evaluations.filter(
|
|
341
|
+
(event) => event.type === "evaluation.failed"
|
|
342
|
+
).length,
|
|
343
|
+
evaluation_metric_count: evaluationMetrics.length,
|
|
344
|
+
evaluation_metric_pass_count: evaluationMetrics.filter(
|
|
345
|
+
(metric) => asRecord(metric)?.passed === true
|
|
346
|
+
).length,
|
|
347
|
+
evaluations: projectEvaluationLogs(evaluations),
|
|
334
348
|
...typeof error?.code === "string" ? { error_code: error.code } : {},
|
|
335
349
|
...typeof error?.message === "string" ? { error_message: sanitizeErrorMessage(error.message) } : {},
|
|
336
350
|
...typeof error?.retryable === "boolean" ? { error_retryable: error.retryable } : {}
|
|
@@ -396,6 +410,38 @@ function projectActionLogs(events) {
|
|
|
396
410
|
};
|
|
397
411
|
});
|
|
398
412
|
}
|
|
413
|
+
function projectEvaluationLogs(events) {
|
|
414
|
+
return events.slice(0, 50).map((event) => {
|
|
415
|
+
const usage = asRecord(event.data.usage);
|
|
416
|
+
const error = asRecord(event.data.error);
|
|
417
|
+
const metrics = Array.isArray(event.data.metrics) ? event.data.metrics.map(asRecord).filter(
|
|
418
|
+
(metric) => metric !== void 0
|
|
419
|
+
).slice(0, 50).map((metric) => ({
|
|
420
|
+
name: typeof metric.name === "string" ? metric.name : "unknown_metric",
|
|
421
|
+
score: numberValue(metric.score),
|
|
422
|
+
threshold: numberValue(metric.threshold),
|
|
423
|
+
passed: metric.passed === true,
|
|
424
|
+
reasoning: typeof metric.reasoning === "string" ? sanitizeErrorMessage(metric.reasoning) : "",
|
|
425
|
+
evidence: Array.isArray(metric.evidence) ? metric.evidence.filter(
|
|
426
|
+
(item) => typeof item === "string"
|
|
427
|
+
).slice(0, 20).map(sanitizeErrorMessage) : []
|
|
428
|
+
})) : [];
|
|
429
|
+
return {
|
|
430
|
+
name: typeof event.data.name === "string" ? event.data.name : "unknown_evaluation",
|
|
431
|
+
status: event.type === "evaluation.failed" ? "error" : event.data.status === "passed" ? "passed" : "failed",
|
|
432
|
+
...typeof event.data.provider === "string" ? { provider: event.data.provider } : {},
|
|
433
|
+
...typeof event.data.model === "string" ? { model: event.data.model } : {},
|
|
434
|
+
duration_ms: numberValue(event.data.durationMs),
|
|
435
|
+
input_tokens: numberValue(usage?.inputTokens),
|
|
436
|
+
output_tokens: numberValue(usage?.outputTokens),
|
|
437
|
+
reasoning_tokens: numberValue(usage?.reasoningTokens),
|
|
438
|
+
cache_read_tokens: numberValue(usage?.cacheReadTokens),
|
|
439
|
+
cache_write_tokens: numberValue(usage?.cacheWriteTokens),
|
|
440
|
+
metrics,
|
|
441
|
+
...typeof error?.message === "string" ? { error_message: sanitizeErrorMessage(error.message) } : {}
|
|
442
|
+
};
|
|
443
|
+
});
|
|
444
|
+
}
|
|
399
445
|
function takeBatch(queue) {
|
|
400
446
|
const batch = [];
|
|
401
447
|
let bytes = utf8ByteLength('{"schema_version":1,"runs":[]}');
|