axiom
Version:
Axiom AI SDK provides an API to wrap your AI calls with observability instrumentation.
79 lines (77 loc) • 2.55 kB
JavaScript
// src/evals/reporter.ts
import { Table } from "console-table-printer";
var prRed = (s) => `\x1B[91m ${s}\x1B[00m`;
var AxiomReporter = class {
onTestSuiteReady(_testSuite) {
}
onTestSuiteResult(testSuite) {
const scoreboard = new Table({
title: testSuite.name
});
for (const test of testSuite.children.array()) {
if (test.type !== "test") continue;
const testMeta = test.meta();
if (!testMeta.eval) {
return;
}
const scores = Object.keys(testMeta.eval.scores).map((k) => {
const v = testMeta.eval.scores[k].score ? testMeta.eval.scores[k].score : 0;
const scoreValue = Number(v * 100).toFixed(2);
const score = testMeta.eval.threshold && v < testMeta.eval.threshold ? prRed(scoreValue + "%") : scoreValue + "%";
return [k, score];
});
scoreboard.addRow({
case: testMeta.eval.index.toString(),
...Object.fromEntries(scores)
});
}
scoreboard.printTable();
}
async onTestRunEnd(_testModules, _errors, _reason) {
}
};
// src/evals/instrument.ts
import { BatchSpanProcessor, NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
import { resourceFromAttributes } from "@opentelemetry/resources";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
import { trace } from "@opentelemetry/api";
var collectorOptions = {
url: process.env.AXIOM_URL ? `${process.env.AXIOM_URL}/v1/traces` : "https://api.axiom.co/v1/traces",
// Axiom API endpoint for trace data
headers: {
Authorization: `Bearer ${process.env.AXIOM_TOKEN}`,
// Replace API_TOKEN with your actual API token
"X-Axiom-Dataset": process.env.AXIOM_DATASET || ""
// Replace DATASET_NAME with your dataset
},
concurrencyLimit: 10
// an optional limit on pending requests
};
var exporter = new OTLPTraceExporter(collectorOptions);
var processor = new BatchSpanProcessor(exporter, {
maxQueueSize: 2048,
maxExportBatchSize: 512,
scheduledDelayMillis: 5e3,
exportTimeoutMillis: 3e4
});
var provider = new NodeTracerProvider({
resource: resourceFromAttributes({
["service.name"]: "axiom-ai",
["service.version"]: "0.13.0"
}),
spanProcessors: [processor]
});
provider.register();
var tracer = trace.getTracer("axiom-ai", "0.13.0");
var flush = async () => {
await provider.forceFlush();
};
var startSpan = (name, opts, context) => {
return tracer.startSpan(name, opts, context);
};
export {
AxiomReporter,
flush,
startSpan
};
//# sourceMappingURL=chunk-MNOTFSB6.js.map