UNPKG

axiom

Version:

Axiom AI SDK provides an API to wrap your AI calls with observability instrumentation.

79 lines (77 loc) 2.55 kB
// 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