agentv 3.1.0 → 3.2.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/agentv-provider-5CJVBBGG-2XVZBW7L.js +9 -0
- package/dist/agentv-provider-5CJVBBGG-2XVZBW7L.js.map +1 -0
- package/dist/chunk-3L2L5GIL.js +51 -0
- package/dist/chunk-3L2L5GIL.js.map +1 -0
- package/dist/chunk-5H446C7X.js +50 -0
- package/dist/chunk-5H446C7X.js.map +1 -0
- package/dist/chunk-6GSYTMXD.js +31520 -0
- package/dist/chunk-6GSYTMXD.js.map +1 -0
- package/dist/chunk-BL4PVUAT.js +261 -0
- package/dist/chunk-BL4PVUAT.js.map +1 -0
- package/dist/chunk-C5GOHBQM.js +84 -0
- package/dist/chunk-C5GOHBQM.js.map +1 -0
- package/dist/chunk-FTPA72PY.js +6149 -0
- package/dist/chunk-FTPA72PY.js.map +1 -0
- package/dist/chunk-JK6V4KVD.js +114 -0
- package/dist/chunk-JK6V4KVD.js.map +1 -0
- package/dist/chunk-LRULMAAA.js +1711 -0
- package/dist/chunk-LRULMAAA.js.map +1 -0
- package/dist/chunk-OR4WXZAF.js +24302 -0
- package/dist/chunk-OR4WXZAF.js.map +1 -0
- package/dist/chunk-PCQA43SA.js +4248 -0
- package/dist/chunk-PCQA43SA.js.map +1 -0
- package/dist/chunk-SR4I5KET.js +1238 -0
- package/dist/chunk-SR4I5KET.js.map +1 -0
- package/dist/chunk-VQ2ZO7XJ.js +2098 -0
- package/dist/chunk-VQ2ZO7XJ.js.map +1 -0
- package/dist/chunk-XALGXSKB.js +21 -0
- package/dist/chunk-XALGXSKB.js.map +1 -0
- package/dist/chunk-XOSNETAV.js +565 -0
- package/dist/chunk-XOSNETAV.js.map +1 -0
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -0
- package/dist/dist-3BMOAU4X.js +305 -0
- package/dist/dist-3BMOAU4X.js.map +1 -0
- package/dist/esm-5Q4BZALM-5REQWAUV.js +924 -0
- package/dist/esm-5Q4BZALM-5REQWAUV.js.map +1 -0
- package/dist/esm-CZAWIY6F.js +32 -0
- package/dist/esm-CZAWIY6F.js.map +1 -0
- package/dist/esm-QNEMCJPL.js +933 -0
- package/dist/esm-QNEMCJPL.js.map +1 -0
- package/dist/esm-R77SNOF5.js +65 -0
- package/dist/esm-R77SNOF5.js.map +1 -0
- package/dist/esm-RVQPUGWH.js +1207 -0
- package/dist/esm-RVQPUGWH.js.map +1 -0
- package/dist/getMachineId-bsd-HSK5LZMG.js +41 -0
- package/dist/getMachineId-bsd-HSK5LZMG.js.map +1 -0
- package/dist/getMachineId-darwin-4DP6CCJV.js +41 -0
- package/dist/getMachineId-darwin-4DP6CCJV.js.map +1 -0
- package/dist/getMachineId-linux-44LJ5UJB.js +33 -0
- package/dist/getMachineId-linux-44LJ5UJB.js.map +1 -0
- package/dist/getMachineId-unsupported-NVK6IATM.js +24 -0
- package/dist/getMachineId-unsupported-NVK6IATM.js.map +1 -0
- package/dist/getMachineId-win-YZ36S7VA.js +43 -0
- package/dist/getMachineId-win-YZ36S7VA.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive-DLHPNSZ7.js +334 -0
- package/dist/interactive-DLHPNSZ7.js.map +1 -0
- package/dist/otlp-json-file-exporter-77FDBRSY-EZAPHWP6.js +9 -0
- package/dist/otlp-json-file-exporter-77FDBRSY-EZAPHWP6.js.map +1 -0
- package/dist/simple-trace-file-exporter-S76DMABU-5FCJESD2.js +9 -0
- package/dist/simple-trace-file-exporter-S76DMABU-5FCJESD2.js.map +1 -0
- package/dist/src-ML4D2MC2.js +1733 -0
- package/dist/src-ML4D2MC2.js.map +1 -0
- package/dist/templates/.agentv/targets.yaml +5 -24
- package/dist/token-POXF46NU.js +66 -0
- package/dist/token-POXF46NU.js.map +1 -0
- package/dist/token-util-6GWYZWGE.js +8 -0
- package/dist/token-util-6GWYZWGE.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// ../../packages/core/dist/chunk-HMXZ2AX4.js
|
|
4
|
+
import { createWriteStream } from "node:fs";
|
|
5
|
+
import { mkdir } from "node:fs/promises";
|
|
6
|
+
import { dirname } from "node:path";
|
|
7
|
+
var SimpleTraceFileExporter = class {
|
|
8
|
+
stream = null;
|
|
9
|
+
filePath;
|
|
10
|
+
streamReady = null;
|
|
11
|
+
pendingWrites = [];
|
|
12
|
+
_shuttingDown = false;
|
|
13
|
+
constructor(filePath) {
|
|
14
|
+
this.filePath = filePath;
|
|
15
|
+
}
|
|
16
|
+
async ensureStream() {
|
|
17
|
+
if (!this.streamReady) {
|
|
18
|
+
this.streamReady = (async () => {
|
|
19
|
+
await mkdir(dirname(this.filePath), { recursive: true });
|
|
20
|
+
this.stream = createWriteStream(this.filePath, { flags: "w" });
|
|
21
|
+
return this.stream;
|
|
22
|
+
})();
|
|
23
|
+
}
|
|
24
|
+
return this.streamReady;
|
|
25
|
+
}
|
|
26
|
+
export(spans, resultCallback) {
|
|
27
|
+
if (this._shuttingDown) {
|
|
28
|
+
resultCallback({ code: 0 });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const spanMap = /* @__PURE__ */ new Map();
|
|
32
|
+
const childMap = /* @__PURE__ */ new Map();
|
|
33
|
+
for (const span of spans) {
|
|
34
|
+
spanMap.set(span.spanContext().spanId, span);
|
|
35
|
+
const parentId = span.parentSpanId;
|
|
36
|
+
if (parentId) {
|
|
37
|
+
if (!childMap.has(parentId)) childMap.set(parentId, []);
|
|
38
|
+
childMap.get(parentId)?.push(span);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const rootSpans = spans.filter(
|
|
42
|
+
(s) => !s.parentSpanId || !spanMap.has(s.parentSpanId)
|
|
43
|
+
);
|
|
44
|
+
const writePromise = this.ensureStream().then((stream) => {
|
|
45
|
+
for (const root of rootSpans) {
|
|
46
|
+
const children = this.collectChildren(root.spanContext().spanId, childMap);
|
|
47
|
+
const record = this.buildSimpleRecord(root, children);
|
|
48
|
+
stream.write(`${JSON.stringify(record)}
|
|
49
|
+
`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
this.pendingWrites.push(writePromise);
|
|
53
|
+
resultCallback({ code: 0 });
|
|
54
|
+
}
|
|
55
|
+
async shutdown() {
|
|
56
|
+
this._shuttingDown = true;
|
|
57
|
+
await Promise.all(this.pendingWrites);
|
|
58
|
+
this.pendingWrites = [];
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
if (this.stream) {
|
|
61
|
+
this.stream.end(() => resolve());
|
|
62
|
+
} else {
|
|
63
|
+
resolve();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async forceFlush() {
|
|
68
|
+
await Promise.all(this.pendingWrites);
|
|
69
|
+
this.pendingWrites = [];
|
|
70
|
+
}
|
|
71
|
+
collectChildren(spanId, childMap) {
|
|
72
|
+
const direct = childMap.get(spanId) || [];
|
|
73
|
+
const all = [...direct];
|
|
74
|
+
for (const child of direct) {
|
|
75
|
+
all.push(...this.collectChildren(child.spanContext().spanId, childMap));
|
|
76
|
+
}
|
|
77
|
+
return all;
|
|
78
|
+
}
|
|
79
|
+
buildSimpleRecord(root, children) {
|
|
80
|
+
const attrs = root.attributes || {};
|
|
81
|
+
const durationMs = hrTimeDiffMs(root.startTime, root.endTime);
|
|
82
|
+
let inputTokens = 0;
|
|
83
|
+
let outputTokens = 0;
|
|
84
|
+
for (const child of children) {
|
|
85
|
+
const ca = child.attributes || {};
|
|
86
|
+
if (ca["gen_ai.usage.input_tokens"]) inputTokens += ca["gen_ai.usage.input_tokens"];
|
|
87
|
+
if (ca["gen_ai.usage.output_tokens"]) outputTokens += ca["gen_ai.usage.output_tokens"];
|
|
88
|
+
}
|
|
89
|
+
const toolSpans = children.filter((s) => s.attributes?.["gen_ai.tool.name"]).map((s) => ({
|
|
90
|
+
type: "tool",
|
|
91
|
+
name: s.attributes["gen_ai.tool.name"],
|
|
92
|
+
duration_ms: hrTimeDiffMs(s.startTime, s.endTime)
|
|
93
|
+
}));
|
|
94
|
+
return {
|
|
95
|
+
test_id: attrs["agentv.test_id"],
|
|
96
|
+
target: attrs["agentv.target"],
|
|
97
|
+
score: attrs["agentv.score"],
|
|
98
|
+
duration_ms: durationMs,
|
|
99
|
+
cost_usd: attrs["agentv.trace.cost_usd"],
|
|
100
|
+
token_usage: inputTokens || outputTokens ? { input: inputTokens, output: outputTokens } : void 0,
|
|
101
|
+
spans: toolSpans.length > 0 ? toolSpans : void 0
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
function hrTimeDiffMs(start, end) {
|
|
106
|
+
const diffSec = end[0] - start[0];
|
|
107
|
+
const diffNano = end[1] - start[1];
|
|
108
|
+
return Math.round(diffSec * 1e3 + diffNano / 1e6);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export {
|
|
112
|
+
SimpleTraceFileExporter
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=chunk-JK6V4KVD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/src/observability/simple-trace-file-exporter.ts"],"sourcesContent":["import { type WriteStream, createWriteStream } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { dirname } from 'node:path';\n\n// biome-ignore lint/suspicious/noExplicitAny: OTel ReadableSpan loaded dynamically\ntype ReadableSpan = any;\n\n/**\n * SpanExporter that writes human-readable JSONL (one line per root span).\n * Designed for quick debugging and analysis without OTel tooling.\n */\nexport class SimpleTraceFileExporter {\n private stream: WriteStream | null = null;\n private filePath: string;\n private streamReady: Promise<WriteStream> | null = null;\n private pendingWrites: Promise<void>[] = [];\n private _shuttingDown = false;\n\n constructor(filePath: string) {\n this.filePath = filePath;\n }\n\n private async ensureStream(): Promise<WriteStream> {\n if (!this.streamReady) {\n this.streamReady = (async () => {\n await mkdir(dirname(this.filePath), { recursive: true });\n this.stream = createWriteStream(this.filePath, { flags: 'w' });\n return this.stream;\n })();\n }\n return this.streamReady;\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {\n if (this._shuttingDown) {\n resultCallback({ code: 0 });\n return;\n }\n const spanMap = new Map<string, ReadableSpan>();\n const childMap = new Map<string, ReadableSpan[]>();\n\n for (const span of spans) {\n spanMap.set(span.spanContext().spanId, span);\n const parentId = span.parentSpanId;\n if (parentId) {\n if (!childMap.has(parentId)) childMap.set(parentId, []);\n childMap.get(parentId)?.push(span);\n }\n }\n\n // Root spans: no parent or parent not in this batch\n const rootSpans = spans.filter(\n (s: ReadableSpan) => !s.parentSpanId || !spanMap.has(s.parentSpanId),\n );\n\n const writePromise = this.ensureStream().then((stream) => {\n for (const root of rootSpans) {\n const children = this.collectChildren(root.spanContext().spanId, childMap);\n const record = this.buildSimpleRecord(root, children);\n stream.write(`${JSON.stringify(record)}\\n`);\n }\n });\n this.pendingWrites.push(writePromise);\n\n resultCallback({ code: 0 });\n }\n\n async shutdown(): Promise<void> {\n this._shuttingDown = true;\n await Promise.all(this.pendingWrites);\n this.pendingWrites = [];\n return new Promise((resolve) => {\n if (this.stream) {\n this.stream.end(() => resolve());\n } else {\n resolve();\n }\n });\n }\n\n async forceFlush(): Promise<void> {\n await Promise.all(this.pendingWrites);\n this.pendingWrites = [];\n }\n\n private collectChildren(spanId: string, childMap: Map<string, ReadableSpan[]>): ReadableSpan[] {\n const direct = childMap.get(spanId) || [];\n const all: ReadableSpan[] = [...direct];\n for (const child of direct) {\n all.push(...this.collectChildren(child.spanContext().spanId, childMap));\n }\n return all;\n }\n\n private buildSimpleRecord(root: ReadableSpan, children: ReadableSpan[]): Record<string, unknown> {\n const attrs = root.attributes || {};\n const durationMs = hrTimeDiffMs(root.startTime, root.endTime);\n\n let inputTokens = 0;\n let outputTokens = 0;\n for (const child of children) {\n const ca = child.attributes || {};\n if (ca['gen_ai.usage.input_tokens']) inputTokens += ca['gen_ai.usage.input_tokens'];\n if (ca['gen_ai.usage.output_tokens']) outputTokens += ca['gen_ai.usage.output_tokens'];\n }\n\n const toolSpans = children\n .filter((s: ReadableSpan) => s.attributes?.['gen_ai.tool.name'])\n .map((s: ReadableSpan) => ({\n type: 'tool' as const,\n name: s.attributes['gen_ai.tool.name'],\n duration_ms: hrTimeDiffMs(s.startTime, s.endTime),\n }));\n\n return {\n test_id: attrs['agentv.test_id'],\n target: attrs['agentv.target'],\n score: attrs['agentv.score'],\n duration_ms: durationMs,\n cost_usd: attrs['agentv.trace.cost_usd'],\n token_usage:\n inputTokens || outputTokens ? { input: inputTokens, output: outputTokens } : undefined,\n spans: toolSpans.length > 0 ? toolSpans : undefined,\n };\n }\n}\n\nfunction hrTimeDiffMs(start: [number, number], end: [number, number]): number {\n const diffSec = end[0] - start[0];\n const diffNano = end[1] - start[1];\n return Math.round(diffSec * 1000 + diffNano / 1_000_000);\n}\n"],"mappings":"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","names":[]}
|