axiom 0.16.0 → 0.18.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/bin.cjs +6 -6
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +4 -4
- package/dist/{chunk-2VLKLEQ5.js → chunk-4WSJ7VVA.js} +76 -82
- package/dist/chunk-4WSJ7VVA.js.map +1 -0
- package/dist/{chunk-Q2P6P5BR.js → chunk-5336ZOJZ.js} +4 -4
- package/dist/{chunk-JO7XWM6R.js → chunk-LNTOR4X7.js} +3 -3
- package/dist/{chunk-JO7XWM6R.js.map → chunk-LNTOR4X7.js.map} +1 -1
- package/dist/evals.cjs +60 -122
- package/dist/evals.cjs.map +1 -1
- package/dist/evals.js +3 -3
- package/dist/index.cjs +59 -120
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-2VLKLEQ5.js.map +0 -1
- /package/dist/{chunk-Q2P6P5BR.js.map → chunk-5336ZOJZ.js.map} +0 -0
package/dist/bin.cjs
CHANGED
|
@@ -751,7 +751,7 @@ var import_api2 = require("@opentelemetry/api");
|
|
|
751
751
|
// package.json
|
|
752
752
|
var package_default = {
|
|
753
753
|
name: "axiom",
|
|
754
|
-
version: "0.
|
|
754
|
+
version: "0.18.0",
|
|
755
755
|
type: "module",
|
|
756
756
|
author: "Axiom, Inc.",
|
|
757
757
|
contributors: [
|
|
@@ -819,7 +819,7 @@ var package_default = {
|
|
|
819
819
|
"@opentelemetry/resources": "^2.0.1",
|
|
820
820
|
"@opentelemetry/sdk-node": "^0.202.0",
|
|
821
821
|
"@opentelemetry/sdk-trace-node": "^2.0.1",
|
|
822
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
822
|
+
"@opentelemetry/semantic-conventions": "^1.37.0",
|
|
823
823
|
"@sinclair/typebox": "^0.34.37",
|
|
824
824
|
commander: "^14.0.0",
|
|
825
825
|
"console-table-printer": "^2.14.6",
|
|
@@ -913,12 +913,12 @@ var processor = new import_sdk_trace_node.BatchSpanProcessor(exporter, {
|
|
|
913
913
|
var provider = new import_sdk_trace_node.NodeTracerProvider({
|
|
914
914
|
resource: (0, import_resources.resourceFromAttributes)({
|
|
915
915
|
["service.name"]: "axiom",
|
|
916
|
-
["service.version"]: "0.
|
|
916
|
+
["service.version"]: "0.18.0"
|
|
917
917
|
}),
|
|
918
918
|
spanProcessors: [processor]
|
|
919
919
|
});
|
|
920
920
|
provider.register();
|
|
921
|
-
var tracer = import_api3.trace.getTracer("axiom", "0.
|
|
921
|
+
var tracer = import_api3.trace.getTracer("axiom", "0.18.0");
|
|
922
922
|
var flush = async () => {
|
|
923
923
|
await provider.forceFlush();
|
|
924
924
|
};
|
|
@@ -990,7 +990,7 @@ var import_commander4 = require("commander");
|
|
|
990
990
|
var loadVersionCommand = (program2) => {
|
|
991
991
|
return program2.addCommand(
|
|
992
992
|
new import_commander4.Command("version").description("cli version").action(() => {
|
|
993
|
-
console.log("0.
|
|
993
|
+
console.log("0.18.0");
|
|
994
994
|
})
|
|
995
995
|
);
|
|
996
996
|
};
|
|
@@ -999,7 +999,7 @@ var loadVersionCommand = (program2) => {
|
|
|
999
999
|
var { loadEnvConfig } = import_env.default;
|
|
1000
1000
|
loadEnvConfig(process.cwd());
|
|
1001
1001
|
var program = new import_commander5.Command();
|
|
1002
|
-
program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.
|
|
1002
|
+
program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.18.0");
|
|
1003
1003
|
loadPushCommand(program);
|
|
1004
1004
|
loadPullCommand(program);
|
|
1005
1005
|
loadEvalCommand(program);
|
package/dist/bin.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bin.ts","../src/cli/commands/push.command.ts","../src/transpiler.ts","../src/cli/commands/pull.command.ts","../src/cli/commands/eval.command.ts","../src/evals/run-vitest.ts","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.js","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.js","../src/evals/eval.service.ts","../src/evals/reporter.ts","../src/evals/instrument.ts","../src/otel/initAxiomAI.ts","../package.json","../src/otel/utils/redaction.ts","../src/cli/commands/version.command.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { loadPushCommand } from './cli/commands/push.command';\nimport { loadPullCommand } from './cli/commands/pull.command';\nimport { loadEvalCommand } from './cli/commands/eval.command';\n\n// Load environment variables using @next/env\nimport pkg from '@next/env';\nimport { loadVersionCommand } from './cli/commands/version.command';\nconst { loadEnvConfig } = pkg;\n\n// Load .env files from the current working directory\nloadEnvConfig(process.cwd());\n\nexport const program = new Command();\n\nprogram\n .name('axiom')\n .description(\"Axiom's CLI to manage your objects and run evals\")\n .version(__SDK_VERSION__);\n\nloadPushCommand(program);\nloadPullCommand(program);\nloadEvalCommand(program);\nloadVersionCommand(program);\n\nprogram.parse();\n","import { Command } from 'commander';\nimport {\n loadPromptModule,\n extractPromptFromModule,\n generatePromptFileFromApiResponse,\n} from '../../transpiler';\nimport type { Prompt } from '../../types';\nimport fs from 'node:fs/promises';\nimport readline from 'node:readline';\n\nasync function askConfirmation(message: string): Promise<boolean> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`${message} (y/N): `, (answer) => {\n rl.close();\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');\n });\n });\n}\n\nexport const loadPushCommand = (program: Command) => {\n const push = new Command('push')\n .description('Push a new version of an object')\n .argument(\n '<object>',\n 'The object to push, could be a prompt, en eval, a monitor, a dashboard, etc.',\n )\n .option('--prod', 'Adds the production tag to the prompt')\n .option('--yes', 'Automatically confirm overwriting the file with server response')\n .action(async (filePath: string, options: { yes?: boolean; prod?: boolean }) => {\n let content: Prompt | null = null;\n if (!filePath.endsWith('.prompt.ts')) {\n console.error('Prompt files must end with .prompt.ts');\n process.exit(1);\n }\n\n try {\n const moduleContent = await loadPromptModule(filePath);\n const promptData = extractPromptFromModule(moduleContent, filePath);\n\n content = promptData;\n\n console.log(`Transpiled prompt: ${promptData.name} (${promptData.slug})`);\n } catch (error) {\n console.error('Failed to transpile prompt file:', error);\n process.exit(1);\n }\n\n if (!content) {\n console.error('No content found');\n process.exit(1);\n }\n\n let shouldProceed = options.yes;\n if (!shouldProceed) {\n shouldProceed = await askConfirmation(\n `This will push \"${content.name}\" to Axiom and overwrite ${filePath}, are you sure you want to continue?`,\n );\n }\n\n if (!shouldProceed) {\n console.log('Push operation cancelled.');\n process.exit(0);\n }\n\n try {\n const response = await fetch(`${process.env.AXIOM_URL}/v1/prompts`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${process.env.AXIOM_TOKEN}`,\n 'Content-Type': 'application/json',\n 'x-axiom-client': 'axiom-ai-cli',\n 'x-axiom-check': 'good',\n },\n body: JSON.stringify({\n ...content,\n tags: options.yes ? ['production'] : [],\n }),\n });\n\n if (!response.ok) {\n try {\n const errorText = await response.clone().json();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(JSON.stringify(errorText, null, 2));\n process.exit(1);\n } catch (_error) {\n const errorText = await response.clone().text();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(errorText);\n process.exit(1);\n }\n }\n\n const apiResponse = await response.json();\n console.log(\n `Successfully pushed prompt: ${apiResponse.prompt.name} (${apiResponse.prompt.slug})`,\n );\n console.log(`Version: ${apiResponse.version.version}`);\n\n const updatedTsContent = generatePromptFileFromApiResponse(apiResponse);\n\n await fs.writeFile(filePath, updatedTsContent, 'utf-8');\n\n console.log(`Successfully updated ${filePath}`);\n } catch (error) {\n console.error('Failed to push prompt:', error);\n process.exit(1);\n }\n });\n\n program.addCommand(push);\n};\n","import { build } from 'esbuild';\nimport os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { basename } from 'node:path';\nimport type { Prompt } from './types';\n\nexport async function loadPromptModule(filePath: string) {\n const result = await build({\n entryPoints: [filePath],\n bundle: true,\n write: false,\n platform: 'node',\n format: 'esm',\n target: ['node18'],\n sourcemap: false,\n external: [\n // Only Node.js built-ins should be external\n 'fs',\n 'fs/promises',\n 'node:fs',\n 'node:fs/promises',\n 'readline',\n 'node:readline',\n 'path',\n 'node:path',\n 'os',\n 'node:os',\n 'url',\n 'node:url',\n 'util',\n 'node:util',\n 'crypto',\n 'node:crypto',\n 'events',\n 'node:events',\n 'stream',\n 'node:stream',\n 'buffer',\n 'node:buffer',\n 'process',\n 'node:process',\n ],\n });\n\n const code = result.outputFiles[0].text;\n\n // Create a unique temporary file\n const tempDir = os.tmpdir();\n const tempFileName = `axiom-ai-prompt-${Date.now()}-${Math.random().toString(36).substring(2)}.mjs`;\n const tempFilePath = path.join(tempDir, tempFileName);\n\n try {\n // Write the bundled code to temporary file\n await fs.writeFile(tempFilePath, code, 'utf-8');\n\n // Dynamically import the temporary module\n const moduleUrl = `file://${tempFilePath}`;\n const module = await import(moduleUrl);\n\n return module.default || module;\n } finally {\n // Clean up the temporary file\n try {\n await fs.unlink(tempFilePath);\n } catch (error) {\n // Ignore cleanup errors - temp files will be cleaned up by OS eventually\n console.warn(`Failed to clean up temporary file ${tempFilePath}:`, error);\n }\n }\n}\n\n/**\n * Convert TypeBox arguments to JSON Schema format expected by the API\n */\nfunction convertTypeBoxArgumentsToJsonSchema(arguments_: Record<string, any>): any {\n if (!arguments_ || typeof arguments_ !== 'object') {\n return {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false,\n };\n }\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(arguments_)) {\n if (value && typeof value === 'object' && value.type) {\n // This is a TypeBox schema object that has been serialized\n properties[key] = {\n type: value.type,\n ...(value.description && { description: value.description }),\n ...(value.enum && { enum: value.enum }),\n ...(value.items && { items: value.items }),\n ...(value.properties && { properties: value.properties }),\n ...(value.required && { required: value.required }),\n };\n\n // For now, treat all arguments as required (this matches the existing behavior)\n // In the future, we could detect Type.Optional() usage\n required.push(key);\n }\n }\n\n return {\n type: 'object',\n properties,\n required,\n additionalProperties: false,\n };\n}\n\nexport function extractPromptFromModule(moduleContent: any, filePath: string): Prompt {\n // Generate ID from file path if not provided\n const fileBaseName = basename(filePath, '.ts'); // Remove .ts extension\n const defaultId = fileBaseName.toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n // Convert TypeBox arguments to JSON Schema format\n const convertedArguments = convertTypeBoxArgumentsToJsonSchema(moduleContent.arguments);\n\n // Extract and validate required fields from the module content\n const prompt: Prompt = {\n name: moduleContent.name || 'Untitled Prompt',\n slug: moduleContent.slug || defaultId,\n messages: moduleContent.messages || [],\n model: moduleContent.model,\n options: moduleContent.options,\n arguments: convertedArguments,\n id: moduleContent.id || defaultId,\n version: moduleContent.version || '1.0.0',\n // Optional fields from API response\n ...(moduleContent.promptId && { promptId: moduleContent.promptId }),\n ...(moduleContent.description && { description: moduleContent.description }),\n };\n\n // Validate required fields\n if (!prompt.name) {\n throw new Error('Prompt must have a name');\n }\n if (!prompt.slug) {\n throw new Error('Prompt must have a slug');\n }\n if (!Array.isArray(prompt.messages)) {\n throw new Error('Prompt messages must be an array');\n }\n\n if (!prompt.model) {\n throw new Error('Prompt must have a model');\n }\n\n return prompt;\n}\n\n/**\n * Transform JSON Schema to TypeBox/Template validator format\n */\nexport function transformJsonSchemaToTypeBox(schema: any): string {\n if (schema.type === 'string') {\n if (schema.enum && Array.isArray(schema.enum)) {\n // Handle enum as Union of Literals\n const literals = schema.enum.map((value: string) => `Type.Literal('${value}')`).join(', ');\n const options = schema.description ? `, { description: '${schema.description}' }` : '';\n return `Type.Union([${literals}]${options})`;\n } else {\n // Regular string\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.String(${options})`;\n }\n }\n\n if (schema.type === 'number' || schema.type === 'integer') {\n const typeMethod = schema.type === 'integer' ? 'Integer' : 'Number';\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.${typeMethod}(${options})`;\n }\n\n if (schema.type === 'boolean') {\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.Boolean(${options})`;\n }\n\n if (schema.type === 'array') {\n const itemsType = schema.items ? transformJsonSchemaToTypeBox(schema.items) : 'Type.String()';\n const options = schema.description ? `, { description: '${schema.description}' }` : '';\n return `Type.Array(${itemsType}${options})`;\n }\n\n if (schema.type === 'object') {\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(([key, value]: [string, any]) => {\n const isRequired = schema.required && schema.required.includes(key);\n const propType = transformJsonSchemaToTypeBox(value);\n return ` ${key}: ${isRequired ? propType : `Type.Optional(${propType})`}`;\n })\n .join(',\\n');\n\n const options = schema.description ? `, { description: '${schema.description}' }` : '';\n return `Type.Object({\\n${props}\\n }${options})`;\n } else {\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.Object({}${options ? `, ${options}` : ''})`;\n }\n }\n\n // Fallback for unknown types\n return 'Type.String()';\n}\n\n/**\n * Generate TypeScript prompt file content from API response\n */\nexport function generatePromptFileFromApiResponse(apiResponse: any): string {\n const { prompt, version } = apiResponse;\n const { data, options } = version;\n\n // Transform arguments from JSON Schema to TypeBox format\n let argumentsCode = '{}';\n if (data.arguments && data.arguments.properties) {\n const argEntries = Object.entries(data.arguments.properties)\n .map(([key, schema]: [string, any]) => {\n const isRequired = data.arguments.required && data.arguments.required.includes(key);\n const typeCode = transformJsonSchemaToTypeBox(schema);\n return ` ${key}: ${isRequired ? typeCode : `Type.Optional(${typeCode})`}`;\n })\n .join(',\\n');\n\n if (argEntries) {\n argumentsCode = `{\\n${argEntries}\\n }`;\n }\n }\n\n // Generate the TypeScript file content\n return `import { Type } from 'axiom/ai';\n\nexport default {\n name: '${prompt.name}',\n slug: '${prompt.slug}',\n description: '${prompt.description || ''}',\n messages: [${data.messages\n .map(\n (msg: any) => `\n {\n role: '${msg.role}',\n content: '${msg.content.replace(/'/g, \"\\\\'\")}',\n }`,\n )\n .join(',')}\n ],\n model: '${data.model || 'gpt-4'}',\n options: {\n${\n options\n ? Object.entries(options)\n .map(([key, value]) => ` ${key}: ${value}`)\n .join(',\\n')\n : ''\n}\n },\n arguments: ${argumentsCode},\n version: '${version.version}',\n promptId: '${prompt.promptId}',\n};\n`;\n}\n","import { Command } from 'commander';\nimport { generatePromptFileFromApiResponse } from '../../transpiler';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport const loadPullCommand = (program: Command) => {\n const pull = new Command('pull')\n .description('Pull a version of an object')\n .argument(\n '<slug>',\n 'The object to pull, could be a prompt, en eval, a monitor, a dashboard, etc.',\n )\n .option('--version <version>', 'The version to pull, default: latest', 'latest')\n .option('--output <path>', 'Output file path (optional, defaults to <slug>.prompt.ts)')\n .action(async (slug: string, options: { version: string; output?: string }) => {\n try {\n console.log(`Pulling prompt: ${slug} (version: ${options.version})`);\n\n const url = `${process.env.AXIOM_URL}/v1/prompts/${slug}`;\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${process.env.AXIOM_TOKEN}`,\n 'Content-Type': 'application/json',\n 'x-axiom-client': 'axiom-ai-cli',\n 'x-axiom-check': 'good',\n },\n });\n\n if (!response.ok) {\n try {\n const errorText = await response.clone().json();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(JSON.stringify(errorText, null, 2));\n process.exit(1);\n } catch (_error) {\n const errorText = await response.clone().text();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(errorText);\n process.exit(1);\n }\n }\n\n const apiResponse = await response.json();\n\n const tsContent = generatePromptFileFromApiResponse(apiResponse);\n\n const outputPath = options.output || `${slug}.prompt.ts`;\n const fullPath = path.resolve(outputPath);\n\n await fs.writeFile(fullPath, tsContent, 'utf-8');\n\n console.log(`Successfully generated prompt file: ${fullPath}`);\n console.log(`Prompt: ${apiResponse.prompt.name} (${apiResponse.prompt.slug})`);\n console.log(`Version: ${apiResponse.version.version}`);\n } catch (error) {\n console.error('Failed to pull prompt:', error);\n process.exit(1);\n }\n });\n\n program.addCommand(pull);\n};\n","import { Command, Argument } from 'commander';\nimport { runVitest } from '../../evals/run-vitest';\nimport { lstatSync } from 'node:fs';\n\nexport const loadEvalCommand = (program: Command) => {\n return program.addCommand(\n new Command('eval')\n .description('run evals locally')\n .addArgument(\n new Argument('[path]', 'path of base directory or *.eval.ts file').default(\n '.',\n 'any *.eval.ts file in current directory',\n ),\n )\n .option('-w, --watch true', 'keep server running and watch for changes', false)\n .option('-t, --token <TOKEN>', 'axiom token', process.env.AXIOM_TOKEN)\n .option('-d, --dataset <DATASET>', 'axiom dataset name', process.env.AXIOM_DATASET)\n .option('-u, --url <AXIOM URL>', 'axiom url', process.env.AXIOM_URL ?? 'https://api.axiom.co')\n .option('-b, --baseline <BASELINE ID>', 'id of baseline evaluation to compare against')\n .action(async (path: string, options) => {\n if (!options.token || !options.dataset) {\n throw new Error('AXIOM_TOKEN, and AXIOM_DATASET must be set');\n }\n\n const f = lstatSync(path);\n const isDir = f.isDirectory();\n const targetPath = isDir ? path : '.';\n const includedfiles = isDir ? ['**/*.eval.ts'] : [path];\n\n await runVitest(targetPath, {\n watch: options.watch,\n baseline: options.baseline,\n include: includedfiles,\n });\n }),\n );\n};\n","import { createVitest, registerConsoleShortcuts } from 'vitest/node';\nimport { AxiomReporter } from './reporter';\nimport { flush } from './instrument';\n\nexport const DEFAULT_TIMEOUT = 10000;\n\nexport const runVitest = async (\n dir: string,\n opts: {\n watch: boolean;\n baseline?: string;\n include: string[];\n },\n) => {\n const vi = await createVitest('test', {\n root: dir ? dir : process.cwd(),\n mode: 'test',\n include: opts.include,\n reporters: [new AxiomReporter()],\n environment: 'node',\n browser: undefined,\n watch: opts.watch,\n name: 'axiom:eval',\n printConsoleTrace: true,\n silent: false,\n disableConsoleIntercept: true,\n testTimeout: DEFAULT_TIMEOUT,\n globals: true,\n provide: {\n baseline: opts.baseline,\n },\n });\n\n await vi.start();\n\n const dispose = registerConsoleShortcuts(vi, process.stdin, process.stdout);\n\n if (!vi.shouldKeepServer()) {\n dispose();\n await flush();\n await vi.close();\n process.exit(0);\n }\n\n await flush();\n};\n","// src/index.ts\nvar f = {\n reset: [0, 0],\n bold: [1, 22, \"\\x1B[22m\\x1B[1m\"],\n dim: [2, 22, \"\\x1B[22m\\x1B[2m\"],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49]\n}, h = Object.entries(f);\nfunction a(n) {\n return String(n);\n}\na.open = \"\";\na.close = \"\";\nvar B = /* @__PURE__ */ h.reduce(\n (n, [e]) => (n[e] = a, n),\n { isColorSupported: !1 }\n);\nfunction m() {\n return { ...B };\n}\nfunction C(n = !1) {\n let e = typeof process != \"undefined\" ? process : void 0, i = (e == null ? void 0 : e.env) || {}, g = (e == null ? void 0 : e.argv) || [];\n return !(\"NO_COLOR\" in i || g.includes(\"--no-color\")) && (\"FORCE_COLOR\" in i || g.includes(\"--color\") || (e == null ? void 0 : e.platform) === \"win32\" || n && i.TERM !== \"dumb\" || \"CI\" in i) || typeof window != \"undefined\" && !!window.chrome;\n}\nfunction p(n = !1) {\n let e = C(n), i = (r, t, c, o) => {\n let l = \"\", s = 0;\n do\n l += r.substring(s, o) + c, s = o + t.length, o = r.indexOf(t, s);\n while (~o);\n return l + r.substring(s);\n }, g = (r, t, c = r) => {\n let o = (l) => {\n let s = String(l), b = s.indexOf(t, r.length);\n return ~b ? r + i(s, t, c, b) + t : r + s + t;\n };\n return o.open = r, o.close = t, o;\n }, u = {\n isColorSupported: e\n }, d = (r) => `\\x1B[${r}m`;\n for (let [r, t] of h)\n u[r] = e ? g(\n d(t[0]),\n d(t[1]),\n t[2]\n ) : a;\n return u;\n}\n\nexport {\n m as a,\n C as b,\n p as c\n};\n","import {\n a as e,\n b as t,\n c as o\n} from \"./chunk-BVHSVHOK.js\";\n\n// src/node.ts\nimport { isatty as s } from \"tty\";\nvar r = process.env.FORCE_TTY !== void 0 || s(1);\nfunction n() {\n return t(r);\n}\nfunction a() {\n return o(r);\n}\nvar u = o(r);\nexport {\n a as createColors,\n u as default,\n e as getDefaultColors,\n n as isSupported\n};\n","const datasetName = process.env.AXIOM_DATASET ?? '';\nconst url = process.env.AXIOM_URL ?? 'https://api.axiom.co';\nconst token = process.env.AXIOM_TOKEN;\n\nexport type Evaluation = {\n id: string;\n name: string;\n type: string;\n version: string;\n baseline: {\n id: string | undefined;\n name: string | undefined;\n };\n collection: {\n name: string;\n size: number;\n };\n prompt: {\n model: string;\n params: Record<string, unknown>;\n };\n duration: number;\n status: string;\n traceId: string;\n runAt: string;\n tags: string[];\n user: {\n name: string | undefined;\n email: string | undefined;\n };\n cases: Case[];\n};\n\nexport type Case = {\n index: number;\n input: string;\n output: string;\n expected: string;\n duration: string;\n status: string;\n scores: Record<\n string,\n {\n name: string;\n value: number;\n metadata: Record<string, any>;\n }\n >;\n runAt: string;\n spanId: string;\n traceId: string;\n task?: Task;\n};\n\nexport type Chat = {\n operation: string;\n capability: string;\n step: string;\n request: {\n max_token: string;\n model: string;\n temperature: number;\n };\n response: {\n finish_reasons: string;\n };\n usage: {\n input_tokens: number;\n output_tokens: number;\n };\n};\n\nexport type Task = {\n name: string;\n output: string;\n trial: number;\n type: string;\n error?: string;\n chat: Chat;\n};\n\n/** Query axiom to find a baseline for en Eval */\nexport const findBaseline = async (evalName: string) => {\n try {\n const apl = `['${datasetName}'] | where ['attributes.custom']['eval.name'] == \"${evalName}\" and ['attributes.gen_ai.operation.name'] == 'eval' | order by _time | limit 1`;\n\n const headers = new Headers({\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n });\n\n const resp = await fetch(`${url}/v1/datasets/_apl?format=legacy`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify({ apl }),\n });\n const payload = await resp.json();\n if (!resp.ok) {\n console.log(payload);\n return undefined;\n }\n if (payload.matches.length) {\n return mapSpanToEval(payload.matches[0]);\n }\n } catch (err) {\n console.log(err);\n return undefined;\n }\n};\n\nexport const findEvaluationCases = async (evalId: string) => {\n try {\n const apl = `['${datasetName}'] | where trace_id == \"${evalId}\" | order by _time`;\n\n const headers = new Headers({\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n });\n\n const resp = await fetch(`${url}/v1/datasets/_apl?format=legacy`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify({ apl }),\n });\n const payload = await resp.json();\n if (!resp.ok) {\n console.log(payload);\n return undefined;\n }\n if (payload.matches.length) {\n return buildSpanTree(payload.matches);\n }\n } catch (err) {\n console.log(err);\n return undefined;\n }\n};\n\nexport const mapSpanToEval = (span: any): Evaluation => {\n return {\n id: span.data.attributes.custom['eval.id'],\n name: span.data.attributes.custom['eval.name'],\n type: span.data.attributes.custom['eval.type'],\n version: span.data.attributes.custom['eval.version'],\n collection: {\n name: span.data.attributes.custom['eval.collection.name'],\n size: span.data.attributes.custom['eval.collection.size'],\n },\n baseline: {\n id: span.data.attributes.custom['eval.baseline.id'],\n name: span.data.attributes.custom['eval.baseline.name'],\n },\n prompt: {\n model: span.data.attributes.custom['eval.prompt.model'],\n params: span.data.attributes.custom['eval.prompt.params'],\n },\n duration: span.data.duration,\n status: span.data.status.code,\n traceId: span.data.trace_id,\n runAt: span._time,\n tags: span.data.attributes.custom['eval.tags'].length\n ? JSON.parse(span.data.attributes.custom['eval.tags'])\n : [],\n user: {\n name: span.data.attributes.custom['eval.user.name'],\n email: span.data.attributes.custom['eval.user.email'],\n },\n cases: [],\n };\n};\n\nexport const mapSpanToCase = (item: { _time: string; data: any }): Case => {\n const data = item.data;\n // round duration\n const d = data.duration as string;\n let duration = '-';\n if (d.endsWith('s')) {\n duration = `${Number(d.replace('s', '')).toFixed(2)}s`;\n } else {\n duration = d;\n }\n\n return {\n index: data.attributes.custom['eval.case.index'],\n input: data.attributes.custom['eval.case.input'],\n output: data.attributes.custom['eval.case.output'],\n expected: data.attributes.custom['eval.case.expected'],\n duration: duration,\n status: data.status.code,\n scores: data.attributes.custom['eval.case.scores']\n ? JSON.parse(data.attributes.custom['eval.case.scores'])\n : {},\n runAt: item._time,\n spanId: data.span_id,\n traceId: data.trace_id,\n };\n};\n\n// compute a root eval with its children spans, results in a usable object of eval, cases, scores and chats\nexport const buildSpanTree = (spans: any[]): Evaluation | null => {\n if (!spans.length) {\n return null;\n }\n\n // Find the root eval span\n const evalSpan = spans.find((span) => span.data.attributes.gen_ai.operation.name === 'eval');\n\n if (!evalSpan) {\n return null;\n }\n\n // Create the root eval structure\n const rootSpan: Evaluation = mapSpanToEval(evalSpan);\n\n // Find all case spans and build the tree structure\n const caseSpans = spans.filter((span) => span.data.name.startsWith('case'));\n\n for (const caseSpan of caseSpans) {\n // Convert case data\n const caseData = mapSpanToCase(caseSpan);\n\n // Find task spans that belong to this case\n const taskSpans = spans.filter(\n (span) =>\n span.data.name.startsWith('task') && span.data.parent_span_id === caseSpan.data.span_id,\n );\n\n if (taskSpans.length > 0) {\n const taskSpan = taskSpans[0]; // Assuming one task per case\n\n // Find chat spans that belong to this task\n const chatSpans = spans.filter(\n (span) =>\n span.data.name.startsWith('chat') && span.data.parent_span_id === taskSpan.data.span_id,\n );\n\n const chatData: Chat[] = chatSpans.map((chatSpan) => ({\n operation: chatSpan.data.attributes.custom?.operation || '',\n capability: chatSpan.data.attributes.custom?.capability || '',\n step: chatSpan.data.attributes.custom?.step || '',\n request: {\n max_token: chatSpan.data.attributes.custom?.['request.max_token'] || '',\n model: chatSpan.data.attributes.custom?.['request.model'] || '',\n temperature: chatSpan.data.attributes.custom?.['request.temperature'] || 0,\n },\n response: {\n finish_reasons: chatSpan.data.attributes.custom?.['response.finish_reasons'] || '',\n },\n usage: {\n input_tokens: chatSpan.data.attributes.gen_ai?.usage?.input_tokens || 0,\n output_tokens: chatSpan.data.attributes.gen_ai?.usage?.output_tokens || 0,\n },\n }));\n\n // Create task data with chat information\n const taskData: Task = {\n name: taskSpan.data.name,\n output: taskSpan.data.attributes.custom?.output || '',\n trial: taskSpan.data.attributes.custom?.trial || 0,\n type: taskSpan.data.attributes.custom?.type || '',\n error: taskSpan.data.attributes.custom?.error,\n chat: chatData[0] || {\n operation: '',\n capability: '',\n step: '',\n request: { max_token: '', model: '', temperature: 0 },\n response: { finish_reasons: '' },\n usage: { input_tokens: 0, output_tokens: 0 },\n },\n };\n\n caseData.task = taskData;\n }\n\n // Find task spans that belong to this case\n const scoreSpans = spans.filter(\n (span) =>\n span.data.attributes.gen_ai.operation.name === 'eval.score' &&\n span.data.parent_span_id === caseSpan.data.span_id,\n );\n\n caseData.scores = {};\n\n scoreSpans.forEach((score) => {\n const name = score.data.attributes.custom['eval.score.name'];\n caseData.scores[name] = {\n name,\n value: score.data.attributes.custom['eval.score.value'],\n metadata: {\n error: score.data.attributes.error,\n },\n };\n });\n\n rootSpan.cases.push(caseData);\n }\n\n rootSpan.cases.sort((a, b) => a.index - b.index);\n\n return rootSpan;\n};\n","import type { SerializedError } from 'vitest';\nimport type { Reporter, TestCase, TestModule, TestRunEndReason, TestSuite } from 'vitest/node.js';\nimport type { TaskMeta } from 'vitest/index.cjs';\nimport c from 'tinyrainbow';\n\nimport type { Score } from '../scorers/scorer.types';\nimport { findEvaluationCases, type Evaluation } from './eval.service';\n\n/**\n * Complete report for a single evaluation case including results and metadata.\n *\n * Generated for each test case when running {@link Eval} with {@link EvalParams}.\n * Contains all {@link Score} results and execution metadata.\n *\n * @experimental This API is experimental and may change in future versions.\n */\nexport type EvalCaseReport = {\n /** Order/index of this case in the evaluation suite */\n index: number;\n /** Name of the evaluation */\n name: string;\n /** Input data that was provided to the {@link EvalTask} */\n input: string | Record<string, any>;\n /** Output produced by the {@link EvalTask} */\n output: string | Record<string, any>;\n /** Expected output for comparison */\n expected: string | Record<string, any>;\n /** Array of {@link Score} results from all scorers that were run */\n scores: Record<string, Score>;\n /** Any errors that occurred during evaluation */\n errors: Error[] | null;\n /** Status of the evaluation case */\n status: 'success' | 'fail' | 'pending';\n /** Duration in milliseconds for the entire case */\n duration: number | undefined;\n /** Timestamp when the case started */\n startedAt: number | undefined;\n};\n\nexport type EvaluationReport = {\n id: string;\n name: string;\n version: string;\n baseline: Evaluation | undefined;\n};\n\n/**\n * Custom Vitest reporter for Axiom AI evaluations.\n *\n * This reporter collects evaluation results and scores from tests\n * and processes them for further analysis and reporting.\n *\n */\nexport class AxiomReporter implements Reporter {\n baseline: Evaluation | undefined | null;\n startTime: number = 0;\n start: number = 0;\n\n onTestRunStart() {\n this.start = performance.now();\n this.startTime = new Date().getTime();\n }\n\n async onTestSuiteReady(_testSuite: TestSuite) {\n const meta = _testSuite.meta() as TaskMeta & { evaluation: EvaluationReport };\n const baseline = meta.evaluation.baseline;\n if (baseline) {\n // load baseline data\n this.baseline = await findEvaluationCases(baseline.id);\n }\n const cwd = process.cwd();\n\n console.log(\n ' ',\n c.bgCyan(c.black(` ${_testSuite.project.name} `)),\n c.bgBlue(c.black(` ${meta.evaluation.name}-${meta.evaluation.version} `)),\n c.dim(`(${_testSuite.children.size} cases)`),\n );\n\n console.log(' ', c.dim(_testSuite.module.moduleId.replace(cwd, '')));\n\n // print baseline name and version if found\n if (meta.evaluation.baseline) {\n console.log(\n ' ',\n ' baseline ',\n c.bgMagenta(\n c.black(` ${meta.evaluation.baseline.name}-${meta.evaluation.baseline.version} `),\n ),\n );\n } else {\n console.log(' ', c.bgWhite(c.blackBright(' baseline: ')), 'none');\n }\n\n console.log('');\n }\n\n onTestCaseReady(test: TestCase) {\n const meta = test.meta() as TaskMeta & { case: EvalCaseReport };\n console.log(c.blue(` \\u2713 evaluating case ${meta.case.index}`));\n }\n\n onTestSuiteResult(testSuite: TestSuite) {\n // calculate test duration in seconds\n const duration = Number((performance.now() - this.start) / 1000).toFixed(2);\n\n console.log(' ');\n console.log(' ', c.dim('Cases'), testSuite.children.size);\n console.log(' ', c.dim('Start at'), new Date(this.startTime).toTimeString());\n console.log(' ', c.dim('Duration'), `${duration}s`);\n\n const meta = testSuite.meta() as TaskMeta & { evaluation: EvaluationReport };\n const url = `https://app.axiom.co/evaluations/${meta.evaluation.name}/${meta.evaluation.id}`;\n\n for (const test of testSuite.children) {\n if (test.type !== 'test') return;\n this.printCaseResult(test);\n }\n\n console.log('');\n console.log(\n ' ',\n `see results for ${meta.evaluation.name}-${meta.evaluation.version} at ${url}`,\n );\n console.log(\n ' ',\n c.cyanBright('=== === === === === === === === === === === === === === === ==='),\n );\n console.log('');\n }\n\n async onTestRunEnd(\n _testModules: ReadonlyArray<TestModule>,\n _errors: ReadonlyArray<SerializedError>,\n _reason: TestRunEndReason,\n ) {}\n\n private printCaseResult(test: TestCase) {\n const ok = test.ok();\n const testMeta = test.meta() as TaskMeta & { case: EvalCaseReport };\n\n if (!testMeta || !testMeta.case) {\n return;\n }\n const index = testMeta.case.index;\n\n if (ok) {\n console.log(' ', c.yellow(` \\u2714 case ${index}:`));\n } else {\n console.log(' ', c.red(` \\u2716 case ${index}: failed`));\n for (const e of testMeta.case.errors ?? []) {\n console.log('', e.message);\n }\n }\n\n // print scores\n Object.keys(testMeta.case.scores).forEach((k) => {\n const v = testMeta.case.scores[k].score ? testMeta.case.scores[k].score : 0;\n const scoreValue = Number(v * 100).toFixed(2) + '%';\n\n if (this.baseline && this.baseline.cases[index] && this.baseline.cases[index].scores[k]) {\n const baselineScoreValue = this.baseline.cases[index].scores[k].value;\n const diff = v - baselineScoreValue;\n const diffText = Number(diff * 100).toFixed(2) + '%';\n const blScoreText = Number(baselineScoreValue * 100).toFixed(2) + '%';\n console.log(\n ' ',\n k,\n c.magentaBright(blScoreText),\n '->',\n c.blueBright(scoreValue),\n diff > 0 ? c.green('+' + diffText) : c.red(diffText),\n );\n } else {\n console.log(' ', k, c.blueBright(scoreValue));\n }\n\n return [k, scoreValue];\n });\n }\n}\n","import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { resourceFromAttributes } from '@opentelemetry/resources';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { trace, type Context, type SpanOptions } from '@opentelemetry/api';\nimport { initAxiomAI } from 'src/otel/initAxiomAI';\n\nconst collectorOptions = {\n url: process.env.AXIOM_URL\n ? `${process.env.AXIOM_URL}/v1/traces`\n : 'https://api.axiom.co/v1/traces', // Axiom API endpoint for trace data\n headers: {\n Authorization: `Bearer ${process.env.AXIOM_TOKEN}`, // Replace API_TOKEN with your actual API token\n 'X-Axiom-Dataset': process.env.AXIOM_DATASET || '', // Replace DATASET_NAME with your dataset\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n};\n\n// export const consoleExporter = new ConsoleSpanExporter()\nexport const exporter = new OTLPTraceExporter(collectorOptions);\n\nconst processor = new BatchSpanProcessor(exporter, {\n maxQueueSize: 2048,\n maxExportBatchSize: 512,\n scheduledDelayMillis: 5000,\n exportTimeoutMillis: 30000,\n});\n\nconst provider = new NodeTracerProvider({\n resource: resourceFromAttributes({\n ['service.name']: 'axiom',\n ['service.version']: __SDK_VERSION__,\n }),\n spanProcessors: [processor],\n});\n\nprovider.register();\n\n// Create a shared tracer instance\nexport const tracer = trace.getTracer('axiom', __SDK_VERSION__);\n\nexport const flush = async () => {\n await provider.forceFlush();\n};\n\nexport const startSpan = (name: string, opts: SpanOptions, context?: Context) => {\n return tracer.startSpan(name, opts, context);\n};\n\ninitAxiomAI({ tracer: tracer });\n","import type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport packageJson from '../../package.json';\nimport { AXIOM_AI_REDACTION_KEY, type AxiomAIRedactionPolicy } from './utils/redaction';\n\n// Global key to store tracer scope information across all execution contexts\nconst AXIOM_AI_SCOPE_KEY = Symbol.for('__axiom_ai_scope__');\n\ninterface TracerScope {\n name: string;\n version?: string;\n}\n\n/**\n * Extract scope information from a tracer, with fallback to package.json\n */\nfunction extractTracerScope(tracer: Tracer): TracerScope {\n const tracerAny = tracer as any;\n\n // Guard access to private fields with optional chaining\n // Note: These are internal OTEL fields that may change in future versions\n // _instrumentationScope is modern, instrumentationLibrary is legacy (<1.16)\n const name =\n tracerAny._instrumentationScope?.name ||\n tracerAny.instrumentationLibrary?.name ||\n packageJson.name;\n\n const version =\n tracerAny._instrumentationScope?.version ||\n tracerAny.instrumentationLibrary?.version ||\n packageJson.version;\n\n return { name, version };\n}\n\n/**\n * Register this in your `instrumentation.ts` to set up axiom.\n * This function stores the tracer's scope information globally to enable Context Propagation\n * and Instrumentation Scope. The tracer will be available across all execution contexts including Next.js.\n *\n * This function is idempotent - calling it multiple times with the same scope has no additional cost.\n *\n * @param config\n * @param config.tracer - The tracer that you are using in your application.\n * @param config.redactionPolicy - Optional redaction policy to control what data is captured in spans.\n */\nexport function initAxiomAI(config: { tracer: Tracer; redactionPolicy?: AxiomAIRedactionPolicy }) {\n const newScope = extractTracerScope(config.tracer);\n const existingScope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Check if already initialized with same scope (idempotent behavior)\n if (\n existingScope &&\n existingScope.name === newScope.name &&\n existingScope.version === newScope.version\n ) {\n return;\n }\n\n // Warn about double initialization with different scopes\n if (existingScope) {\n console.warn(\n '[AxiomAI] initAxiomAI() called multiple times with different scopes. ' +\n `Previous: ${existingScope.name}@${existingScope.version}, ` +\n `New: ${newScope.name}@${newScope.version}`,\n );\n }\n\n // Store scope information globally (works across Next.js contexts)\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = newScope;\n\n // Store redaction policy globally if provided\n if (config.redactionPolicy) {\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = config.redactionPolicy;\n }\n}\n\n/**\n * Get a tracer using the globally stored scope information\n * Fall back to package.json defaults if not set\n */\nexport function getGlobalTracer(): Tracer {\n // Get stored scope information or fall back to package defaults\n const scope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Warn if initAxiomAI was never called\n if (!scope) {\n console.warn(\n '[AxiomAI] AXIOM_AI_SCOPE_KEY is undefined. This probably means that ' +\n 'initAxiomAI() was never called. ' +\n 'Make sure to call initAxiomAI({ tracer }) in your instrumentation setup.',\n );\n }\n\n let { name, version } = scope || { name: packageJson.name, version: packageJson.version };\n\n if (!name || !version) {\n name = packageJson.name;\n version = packageJson.version;\n if (!name || !version) {\n name = 'axiom';\n version = 'unknown';\n }\n }\n\n // Use OpenTelemetry's standard global provider mechanism\n return trace.getTracer(name, version);\n}\n\n/**\n * Reset AxiomAI configuration (useful for testing)\n */\nexport function resetAxiomAI() {\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = undefined;\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = undefined;\n}\n","{\n \"name\": \"axiom\",\n \"version\": \"0.16.0\",\n \"type\": \"module\",\n \"author\": \"Axiom, Inc.\",\n \"contributors\": [\n \"Islam Shehata <islam@axiom.co>\",\n \"Chris Ehrlich <chris@axiom.co>\",\n \"Gabriel de Andrade <gabriel@axiom.co>\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && chmod +x dist/bin.js\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"lint\": \"eslint './**/*.{js,ts}'\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest --watch\",\n \"publint\": \"npx publint\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"bin\": {\n \"axiom\": \"./dist/bin.js\"\n },\n \"exports\": {\n \"./ai\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"./ai/evals\": {\n \"import\": {\n \"types\": \"./dist/evals.d.ts\",\n \"default\": \"./dist/evals.js\"\n },\n \"require\": {\n \"types\": \"./dist/evals.d.cts\",\n \"default\": \"./dist/evals.cjs\"\n }\n }\n },\n \"keywords\": [\n \"axiom\",\n \"logging\",\n \"ai\",\n \"otel\",\n \"opentelemetry\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/axiomhq/ai.git\",\n \"directory\": \"packages/ai\"\n },\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@next/env\": \"^15.4.2\",\n \"@opentelemetry/auto-instrumentations-node\": \"^0.60.1\",\n \"@opentelemetry/context-async-hooks\": \"^2.0.1\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.202.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-node\": \"^0.202.0\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.36.0\",\n \"@sinclair/typebox\": \"^0.34.37\",\n \"commander\": \"^14.0.0\",\n \"console-table-printer\": \"^2.14.6\",\n \"esbuild\": \"^0.25.8\",\n \"handlebars\": \"^4.7.8\",\n \"nanoid\": \"^5.1.5\",\n \"vitest\": \"catalog:\",\n \"zod\": \"catalog:\"\n },\n \"peerDependencies\": {\n \"@opentelemetry/api\": \"^1.9.0\"\n },\n \"devDependencies\": {\n \"@ai-sdk/anthropicv1\": \"npm:@ai-sdk/anthropic@^1.2.12\",\n \"@ai-sdk/anthropicv2\": \"npm:@ai-sdk/anthropic@2.0.0-beta.9\",\n \"@ai-sdk/openaiv1\": \"npm:@ai-sdk/openai@^1.3.23\",\n \"@ai-sdk/openaiv2\": \"npm:@ai-sdk/openai@2.0.0-beta.12\",\n \"@ai-sdk/providerv1\": \"npm:@ai-sdk/provider@^1.1.3\",\n \"@ai-sdk/providerv2\": \"npm:@ai-sdk/provider@2.0.0-beta.1\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@repo/eslint-config\": \"workspace:*\",\n \"@types/node\": \"^22.15.29\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"aiv4\": \"npm:ai@^4.3.19\",\n \"aiv5\": \"npm:ai@^5.0.0\",\n \"eslint\": \"catalog:\",\n \"prettier\": \"catalog:\",\n \"tinyrainbow\": \"^2.0.0\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\"\n },\n \"files\": [\n \"dist\"\n ],\n \"packageManager\": \"pnpm@10.11.1\"\n}\n","import { context, propagation, type Baggage, type Span } from '@opentelemetry/api';\nimport { WITHSPAN_REDACTION_POLICY_KEY } from '../withSpanBaggageKey';\n\ntype CaptureMessageContent = 'full' | 'off';\n\nexport type AxiomAIRedactionPolicy = {\n captureMessageContent?: CaptureMessageContent;\n mirrorToolPayloadOnToolSpan?: boolean;\n};\n\nexport const RedactionPolicy = {\n /**\n * Includes message content on chat spans, and mirrors tool\n * payload on tool spans for more convenient querying.\n */\n AxiomDefault: {\n captureMessageContent: 'full',\n mirrorToolPayloadOnToolSpan: true,\n },\n /**\n * Redacts message content on chat spans, and does not put\n * tool payload on tool spans.\n */\n OpenTelemetryDefault: {\n captureMessageContent: 'off',\n mirrorToolPayloadOnToolSpan: false,\n },\n} as const satisfies Record<string, AxiomAIRedactionPolicy>;\n\n// Global key to store redaction policy across all execution contexts\nexport const AXIOM_AI_REDACTION_KEY = Symbol.for('__axiom_ai_redaction__');\n\n/**\n * Get the globally stored redaction policy\n * @returns The global redaction policy or undefined if not set\n */\nfunction getGlobalRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n return (globalThis as any)[AXIOM_AI_REDACTION_KEY];\n}\n\n/**\n * Resolves the effective redaction policy by merging global and per-call policies.\n * Per-call policies take precedence over global policies.\n *\n * @param globalPolicy - The global redaction policy from initAxiomAI\n * @param localPolicy - The per-call redaction policy from withSpan or middleware\n * @returns The effective redaction policy with all fields resolved\n */\nfunction getEffectiveRedactionPolicy(\n globalPolicy?: AxiomAIRedactionPolicy,\n localPolicy?: AxiomAIRedactionPolicy,\n): AxiomAIRedactionPolicy {\n // Per-call policy overrides global policy, with defaults\n return {\n captureMessageContent:\n localPolicy?.captureMessageContent ??\n globalPolicy?.captureMessageContent ??\n RedactionPolicy.AxiomDefault.captureMessageContent,\n mirrorToolPayloadOnToolSpan:\n localPolicy?.mirrorToolPayloadOnToolSpan ??\n globalPolicy?.mirrorToolPayloadOnToolSpan ??\n RedactionPolicy.AxiomDefault.mirrorToolPayloadOnToolSpan,\n };\n}\n\n/**\n * Get the active redaction policy\n */\nexport function getRedactionPolicy() {\n return getEffectiveRedactionPolicy(getGlobalRedactionPolicy(), getPerCallRedactionPolicy());\n}\n\n/**\n * Conditionally sets a span attribute based on the capture message content policy.\n * When policy is 'off', the attribute is not set at all.\n *\n * @param span - The OpenTelemetry span to set the attribute on\n * @param attribute - The attribute name/key\n * @param value - The attribute value\n * @param captureMessageContent - The capture policy ('full' sets attribute, 'off' skips it)\n */\nexport function handleMaybeRedactedAttribute(\n span: Span,\n attribute: string,\n value: any,\n captureMessageContent?: CaptureMessageContent,\n): void {\n if (captureMessageContent === 'full') {\n span.setAttribute(attribute, value);\n }\n\n // For 'off', don't set the attribute at all\n // Future: Could add callback-based redaction here\n}\n\n/**\n * Extracts the per-call redaction policy from OpenTelemetry baggage context.\n * This allows middleware and tools to access redaction policies passed via withSpan.\n *\n * @returns The per-call redaction policy or undefined if not set\n */\nfunction getPerCallRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n const baggage: Baggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const serializedPolicy = baggage.getEntry(WITHSPAN_REDACTION_POLICY_KEY)?.value;\n\n if (!serializedPolicy) {\n return undefined;\n }\n\n try {\n return JSON.parse(serializedPolicy) as AxiomAIRedactionPolicy;\n } catch (error) {\n console.warn('[AxiomAI] Failed to parse redaction policy from baggage:', error);\n return undefined;\n }\n}\n","import { Command } from 'commander';\n\nexport const loadVersionCommand = (program: Command) => {\n return program.addCommand(\n new Command('version').description('cli version').action(() => {\n console.log(__SDK_VERSION__);\n }),\n );\n};\n"],"mappings":"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","names":["import_commander","import_node_path","os","path","fs","module","import_promises","readline","resolve","program","fs","import_commander","fs","path","program","url","import_commander","r","s","u","s","a","url","import_api","import_api","tracer","program","path","f","import_commander","program","pkg"]}
|
|
1
|
+
{"version":3,"sources":["../src/bin.ts","../src/cli/commands/push.command.ts","../src/transpiler.ts","../src/cli/commands/pull.command.ts","../src/cli/commands/eval.command.ts","../src/evals/run-vitest.ts","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.js","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.js","../src/evals/eval.service.ts","../src/evals/reporter.ts","../src/evals/instrument.ts","../src/otel/initAxiomAI.ts","../package.json","../src/otel/utils/redaction.ts","../src/cli/commands/version.command.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { loadPushCommand } from './cli/commands/push.command';\nimport { loadPullCommand } from './cli/commands/pull.command';\nimport { loadEvalCommand } from './cli/commands/eval.command';\n\n// Load environment variables using @next/env\nimport pkg from '@next/env';\nimport { loadVersionCommand } from './cli/commands/version.command';\nconst { loadEnvConfig } = pkg;\n\n// Load .env files from the current working directory\nloadEnvConfig(process.cwd());\n\nexport const program = new Command();\n\nprogram\n .name('axiom')\n .description(\"Axiom's CLI to manage your objects and run evals\")\n .version(__SDK_VERSION__);\n\nloadPushCommand(program);\nloadPullCommand(program);\nloadEvalCommand(program);\nloadVersionCommand(program);\n\nprogram.parse();\n","import { Command } from 'commander';\nimport {\n loadPromptModule,\n extractPromptFromModule,\n generatePromptFileFromApiResponse,\n} from '../../transpiler';\nimport type { Prompt } from '../../types';\nimport fs from 'node:fs/promises';\nimport readline from 'node:readline';\n\nasync function askConfirmation(message: string): Promise<boolean> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`${message} (y/N): `, (answer) => {\n rl.close();\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');\n });\n });\n}\n\nexport const loadPushCommand = (program: Command) => {\n const push = new Command('push')\n .description('Push a new version of an object')\n .argument(\n '<object>',\n 'The object to push, could be a prompt, en eval, a monitor, a dashboard, etc.',\n )\n .option('--prod', 'Adds the production tag to the prompt')\n .option('--yes', 'Automatically confirm overwriting the file with server response')\n .action(async (filePath: string, options: { yes?: boolean; prod?: boolean }) => {\n let content: Prompt | null = null;\n if (!filePath.endsWith('.prompt.ts')) {\n console.error('Prompt files must end with .prompt.ts');\n process.exit(1);\n }\n\n try {\n const moduleContent = await loadPromptModule(filePath);\n const promptData = extractPromptFromModule(moduleContent, filePath);\n\n content = promptData;\n\n console.log(`Transpiled prompt: ${promptData.name} (${promptData.slug})`);\n } catch (error) {\n console.error('Failed to transpile prompt file:', error);\n process.exit(1);\n }\n\n if (!content) {\n console.error('No content found');\n process.exit(1);\n }\n\n let shouldProceed = options.yes;\n if (!shouldProceed) {\n shouldProceed = await askConfirmation(\n `This will push \"${content.name}\" to Axiom and overwrite ${filePath}, are you sure you want to continue?`,\n );\n }\n\n if (!shouldProceed) {\n console.log('Push operation cancelled.');\n process.exit(0);\n }\n\n try {\n const response = await fetch(`${process.env.AXIOM_URL}/v1/prompts`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${process.env.AXIOM_TOKEN}`,\n 'Content-Type': 'application/json',\n 'x-axiom-client': 'axiom-ai-cli',\n 'x-axiom-check': 'good',\n },\n body: JSON.stringify({\n ...content,\n tags: options.yes ? ['production'] : [],\n }),\n });\n\n if (!response.ok) {\n try {\n const errorText = await response.clone().json();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(JSON.stringify(errorText, null, 2));\n process.exit(1);\n } catch (_error) {\n const errorText = await response.clone().text();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(errorText);\n process.exit(1);\n }\n }\n\n const apiResponse = await response.json();\n console.log(\n `Successfully pushed prompt: ${apiResponse.prompt.name} (${apiResponse.prompt.slug})`,\n );\n console.log(`Version: ${apiResponse.version.version}`);\n\n const updatedTsContent = generatePromptFileFromApiResponse(apiResponse);\n\n await fs.writeFile(filePath, updatedTsContent, 'utf-8');\n\n console.log(`Successfully updated ${filePath}`);\n } catch (error) {\n console.error('Failed to push prompt:', error);\n process.exit(1);\n }\n });\n\n program.addCommand(push);\n};\n","import { build } from 'esbuild';\nimport os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { basename } from 'node:path';\nimport type { Prompt } from './types';\n\nexport async function loadPromptModule(filePath: string) {\n const result = await build({\n entryPoints: [filePath],\n bundle: true,\n write: false,\n platform: 'node',\n format: 'esm',\n target: ['node18'],\n sourcemap: false,\n external: [\n // Only Node.js built-ins should be external\n 'fs',\n 'fs/promises',\n 'node:fs',\n 'node:fs/promises',\n 'readline',\n 'node:readline',\n 'path',\n 'node:path',\n 'os',\n 'node:os',\n 'url',\n 'node:url',\n 'util',\n 'node:util',\n 'crypto',\n 'node:crypto',\n 'events',\n 'node:events',\n 'stream',\n 'node:stream',\n 'buffer',\n 'node:buffer',\n 'process',\n 'node:process',\n ],\n });\n\n const code = result.outputFiles[0].text;\n\n // Create a unique temporary file\n const tempDir = os.tmpdir();\n const tempFileName = `axiom-ai-prompt-${Date.now()}-${Math.random().toString(36).substring(2)}.mjs`;\n const tempFilePath = path.join(tempDir, tempFileName);\n\n try {\n // Write the bundled code to temporary file\n await fs.writeFile(tempFilePath, code, 'utf-8');\n\n // Dynamically import the temporary module\n const moduleUrl = `file://${tempFilePath}`;\n const module = await import(moduleUrl);\n\n return module.default || module;\n } finally {\n // Clean up the temporary file\n try {\n await fs.unlink(tempFilePath);\n } catch (error) {\n // Ignore cleanup errors - temp files will be cleaned up by OS eventually\n console.warn(`Failed to clean up temporary file ${tempFilePath}:`, error);\n }\n }\n}\n\n/**\n * Convert TypeBox arguments to JSON Schema format expected by the API\n */\nfunction convertTypeBoxArgumentsToJsonSchema(arguments_: Record<string, any>): any {\n if (!arguments_ || typeof arguments_ !== 'object') {\n return {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false,\n };\n }\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(arguments_)) {\n if (value && typeof value === 'object' && value.type) {\n // This is a TypeBox schema object that has been serialized\n properties[key] = {\n type: value.type,\n ...(value.description && { description: value.description }),\n ...(value.enum && { enum: value.enum }),\n ...(value.items && { items: value.items }),\n ...(value.properties && { properties: value.properties }),\n ...(value.required && { required: value.required }),\n };\n\n // For now, treat all arguments as required (this matches the existing behavior)\n // In the future, we could detect Type.Optional() usage\n required.push(key);\n }\n }\n\n return {\n type: 'object',\n properties,\n required,\n additionalProperties: false,\n };\n}\n\nexport function extractPromptFromModule(moduleContent: any, filePath: string): Prompt {\n // Generate ID from file path if not provided\n const fileBaseName = basename(filePath, '.ts'); // Remove .ts extension\n const defaultId = fileBaseName.toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n // Convert TypeBox arguments to JSON Schema format\n const convertedArguments = convertTypeBoxArgumentsToJsonSchema(moduleContent.arguments);\n\n // Extract and validate required fields from the module content\n const prompt: Prompt = {\n name: moduleContent.name || 'Untitled Prompt',\n slug: moduleContent.slug || defaultId,\n messages: moduleContent.messages || [],\n model: moduleContent.model,\n options: moduleContent.options,\n arguments: convertedArguments,\n id: moduleContent.id || defaultId,\n version: moduleContent.version || '1.0.0',\n // Optional fields from API response\n ...(moduleContent.promptId && { promptId: moduleContent.promptId }),\n ...(moduleContent.description && { description: moduleContent.description }),\n };\n\n // Validate required fields\n if (!prompt.name) {\n throw new Error('Prompt must have a name');\n }\n if (!prompt.slug) {\n throw new Error('Prompt must have a slug');\n }\n if (!Array.isArray(prompt.messages)) {\n throw new Error('Prompt messages must be an array');\n }\n\n if (!prompt.model) {\n throw new Error('Prompt must have a model');\n }\n\n return prompt;\n}\n\n/**\n * Transform JSON Schema to TypeBox/Template validator format\n */\nexport function transformJsonSchemaToTypeBox(schema: any): string {\n if (schema.type === 'string') {\n if (schema.enum && Array.isArray(schema.enum)) {\n // Handle enum as Union of Literals\n const literals = schema.enum.map((value: string) => `Type.Literal('${value}')`).join(', ');\n const options = schema.description ? `, { description: '${schema.description}' }` : '';\n return `Type.Union([${literals}]${options})`;\n } else {\n // Regular string\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.String(${options})`;\n }\n }\n\n if (schema.type === 'number' || schema.type === 'integer') {\n const typeMethod = schema.type === 'integer' ? 'Integer' : 'Number';\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.${typeMethod}(${options})`;\n }\n\n if (schema.type === 'boolean') {\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.Boolean(${options})`;\n }\n\n if (schema.type === 'array') {\n const itemsType = schema.items ? transformJsonSchemaToTypeBox(schema.items) : 'Type.String()';\n const options = schema.description ? `, { description: '${schema.description}' }` : '';\n return `Type.Array(${itemsType}${options})`;\n }\n\n if (schema.type === 'object') {\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(([key, value]: [string, any]) => {\n const isRequired = schema.required && schema.required.includes(key);\n const propType = transformJsonSchemaToTypeBox(value);\n return ` ${key}: ${isRequired ? propType : `Type.Optional(${propType})`}`;\n })\n .join(',\\n');\n\n const options = schema.description ? `, { description: '${schema.description}' }` : '';\n return `Type.Object({\\n${props}\\n }${options})`;\n } else {\n const options = schema.description ? `{ description: '${schema.description}' }` : '';\n return `Type.Object({}${options ? `, ${options}` : ''})`;\n }\n }\n\n // Fallback for unknown types\n return 'Type.String()';\n}\n\n/**\n * Generate TypeScript prompt file content from API response\n */\nexport function generatePromptFileFromApiResponse(apiResponse: any): string {\n const { prompt, version } = apiResponse;\n const { data, options } = version;\n\n // Transform arguments from JSON Schema to TypeBox format\n let argumentsCode = '{}';\n if (data.arguments && data.arguments.properties) {\n const argEntries = Object.entries(data.arguments.properties)\n .map(([key, schema]: [string, any]) => {\n const isRequired = data.arguments.required && data.arguments.required.includes(key);\n const typeCode = transformJsonSchemaToTypeBox(schema);\n return ` ${key}: ${isRequired ? typeCode : `Type.Optional(${typeCode})`}`;\n })\n .join(',\\n');\n\n if (argEntries) {\n argumentsCode = `{\\n${argEntries}\\n }`;\n }\n }\n\n // Generate the TypeScript file content\n return `import { Type } from 'axiom/ai';\n\nexport default {\n name: '${prompt.name}',\n slug: '${prompt.slug}',\n description: '${prompt.description || ''}',\n messages: [${data.messages\n .map(\n (msg: any) => `\n {\n role: '${msg.role}',\n content: '${msg.content.replace(/'/g, \"\\\\'\")}',\n }`,\n )\n .join(',')}\n ],\n model: '${data.model || 'gpt-4'}',\n options: {\n${\n options\n ? Object.entries(options)\n .map(([key, value]) => ` ${key}: ${value}`)\n .join(',\\n')\n : ''\n}\n },\n arguments: ${argumentsCode},\n version: '${version.version}',\n promptId: '${prompt.promptId}',\n};\n`;\n}\n","import { Command } from 'commander';\nimport { generatePromptFileFromApiResponse } from '../../transpiler';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport const loadPullCommand = (program: Command) => {\n const pull = new Command('pull')\n .description('Pull a version of an object')\n .argument(\n '<slug>',\n 'The object to pull, could be a prompt, en eval, a monitor, a dashboard, etc.',\n )\n .option('--version <version>', 'The version to pull, default: latest', 'latest')\n .option('--output <path>', 'Output file path (optional, defaults to <slug>.prompt.ts)')\n .action(async (slug: string, options: { version: string; output?: string }) => {\n try {\n console.log(`Pulling prompt: ${slug} (version: ${options.version})`);\n\n const url = `${process.env.AXIOM_URL}/v1/prompts/${slug}`;\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${process.env.AXIOM_TOKEN}`,\n 'Content-Type': 'application/json',\n 'x-axiom-client': 'axiom-ai-cli',\n 'x-axiom-check': 'good',\n },\n });\n\n if (!response.ok) {\n try {\n const errorText = await response.clone().json();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(JSON.stringify(errorText, null, 2));\n process.exit(1);\n } catch (_error) {\n const errorText = await response.clone().text();\n console.error(`Failed to fetch prompt: ${response.status} ${response.statusText}`);\n console.error(errorText);\n process.exit(1);\n }\n }\n\n const apiResponse = await response.json();\n\n const tsContent = generatePromptFileFromApiResponse(apiResponse);\n\n const outputPath = options.output || `${slug}.prompt.ts`;\n const fullPath = path.resolve(outputPath);\n\n await fs.writeFile(fullPath, tsContent, 'utf-8');\n\n console.log(`Successfully generated prompt file: ${fullPath}`);\n console.log(`Prompt: ${apiResponse.prompt.name} (${apiResponse.prompt.slug})`);\n console.log(`Version: ${apiResponse.version.version}`);\n } catch (error) {\n console.error('Failed to pull prompt:', error);\n process.exit(1);\n }\n });\n\n program.addCommand(pull);\n};\n","import { Command, Argument } from 'commander';\nimport { runVitest } from '../../evals/run-vitest';\nimport { lstatSync } from 'node:fs';\n\nexport const loadEvalCommand = (program: Command) => {\n return program.addCommand(\n new Command('eval')\n .description('run evals locally')\n .addArgument(\n new Argument('[path]', 'path of base directory or *.eval.ts file').default(\n '.',\n 'any *.eval.ts file in current directory',\n ),\n )\n .option('-w, --watch true', 'keep server running and watch for changes', false)\n .option('-t, --token <TOKEN>', 'axiom token', process.env.AXIOM_TOKEN)\n .option('-d, --dataset <DATASET>', 'axiom dataset name', process.env.AXIOM_DATASET)\n .option('-u, --url <AXIOM URL>', 'axiom url', process.env.AXIOM_URL ?? 'https://api.axiom.co')\n .option('-b, --baseline <BASELINE ID>', 'id of baseline evaluation to compare against')\n .action(async (path: string, options) => {\n if (!options.token || !options.dataset) {\n throw new Error('AXIOM_TOKEN, and AXIOM_DATASET must be set');\n }\n\n const f = lstatSync(path);\n const isDir = f.isDirectory();\n const targetPath = isDir ? path : '.';\n const includedfiles = isDir ? ['**/*.eval.ts'] : [path];\n\n await runVitest(targetPath, {\n watch: options.watch,\n baseline: options.baseline,\n include: includedfiles,\n });\n }),\n );\n};\n","import { createVitest, registerConsoleShortcuts } from 'vitest/node';\nimport { AxiomReporter } from './reporter';\nimport { flush } from './instrument';\n\nexport const DEFAULT_TIMEOUT = 10000;\n\nexport const runVitest = async (\n dir: string,\n opts: {\n watch: boolean;\n baseline?: string;\n include: string[];\n },\n) => {\n const vi = await createVitest('test', {\n root: dir ? dir : process.cwd(),\n mode: 'test',\n include: opts.include,\n reporters: [new AxiomReporter()],\n environment: 'node',\n browser: undefined,\n watch: opts.watch,\n name: 'axiom:eval',\n printConsoleTrace: true,\n silent: false,\n disableConsoleIntercept: true,\n testTimeout: DEFAULT_TIMEOUT,\n globals: true,\n provide: {\n baseline: opts.baseline,\n },\n });\n\n await vi.start();\n\n const dispose = registerConsoleShortcuts(vi, process.stdin, process.stdout);\n\n if (!vi.shouldKeepServer()) {\n dispose();\n await flush();\n await vi.close();\n process.exit(0);\n }\n\n await flush();\n};\n","// src/index.ts\nvar f = {\n reset: [0, 0],\n bold: [1, 22, \"\\x1B[22m\\x1B[1m\"],\n dim: [2, 22, \"\\x1B[22m\\x1B[2m\"],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49]\n}, h = Object.entries(f);\nfunction a(n) {\n return String(n);\n}\na.open = \"\";\na.close = \"\";\nvar B = /* @__PURE__ */ h.reduce(\n (n, [e]) => (n[e] = a, n),\n { isColorSupported: !1 }\n);\nfunction m() {\n return { ...B };\n}\nfunction C(n = !1) {\n let e = typeof process != \"undefined\" ? process : void 0, i = (e == null ? void 0 : e.env) || {}, g = (e == null ? void 0 : e.argv) || [];\n return !(\"NO_COLOR\" in i || g.includes(\"--no-color\")) && (\"FORCE_COLOR\" in i || g.includes(\"--color\") || (e == null ? void 0 : e.platform) === \"win32\" || n && i.TERM !== \"dumb\" || \"CI\" in i) || typeof window != \"undefined\" && !!window.chrome;\n}\nfunction p(n = !1) {\n let e = C(n), i = (r, t, c, o) => {\n let l = \"\", s = 0;\n do\n l += r.substring(s, o) + c, s = o + t.length, o = r.indexOf(t, s);\n while (~o);\n return l + r.substring(s);\n }, g = (r, t, c = r) => {\n let o = (l) => {\n let s = String(l), b = s.indexOf(t, r.length);\n return ~b ? r + i(s, t, c, b) + t : r + s + t;\n };\n return o.open = r, o.close = t, o;\n }, u = {\n isColorSupported: e\n }, d = (r) => `\\x1B[${r}m`;\n for (let [r, t] of h)\n u[r] = e ? g(\n d(t[0]),\n d(t[1]),\n t[2]\n ) : a;\n return u;\n}\n\nexport {\n m as a,\n C as b,\n p as c\n};\n","import {\n a as e,\n b as t,\n c as o\n} from \"./chunk-BVHSVHOK.js\";\n\n// src/node.ts\nimport { isatty as s } from \"tty\";\nvar r = process.env.FORCE_TTY !== void 0 || s(1);\nfunction n() {\n return t(r);\n}\nfunction a() {\n return o(r);\n}\nvar u = o(r);\nexport {\n a as createColors,\n u as default,\n e as getDefaultColors,\n n as isSupported\n};\n","const datasetName = process.env.AXIOM_DATASET ?? '';\nconst url = process.env.AXIOM_URL ?? 'https://api.axiom.co';\nconst token = process.env.AXIOM_TOKEN;\n\nexport type Evaluation = {\n id: string;\n name: string;\n type: string;\n version: string;\n baseline: {\n id: string | undefined;\n name: string | undefined;\n };\n collection: {\n name: string;\n size: number;\n };\n prompt: {\n model: string;\n params: Record<string, unknown>;\n };\n duration: number;\n status: string;\n traceId: string;\n runAt: string;\n tags: string[];\n user: {\n name: string | undefined;\n email: string | undefined;\n };\n cases: Case[];\n};\n\nexport type Case = {\n index: number;\n input: string;\n output: string;\n expected: string;\n duration: string;\n status: string;\n scores: Record<\n string,\n {\n name: string;\n value: number;\n metadata: Record<string, any>;\n }\n >;\n runAt: string;\n spanId: string;\n traceId: string;\n task?: Task;\n};\n\nexport type Chat = {\n operation: string;\n capability: string;\n step: string;\n request: {\n max_token: string;\n model: string;\n temperature: number;\n };\n response: {\n finish_reasons: string;\n };\n usage: {\n input_tokens: number;\n output_tokens: number;\n };\n};\n\nexport type Task = {\n name: string;\n output: string;\n trial: number;\n type: string;\n error?: string;\n chat: Chat;\n};\n\n/** Query axiom to find a baseline for en Eval */\nexport const findBaseline = async (evalName: string) => {\n try {\n const apl = `['${datasetName}'] | where ['attributes.custom']['eval.name'] == \"${evalName}\" and ['attributes.gen_ai.operation.name'] == 'eval' | order by _time | limit 1`;\n\n const headers = new Headers({\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n });\n\n const resp = await fetch(`${url}/v1/datasets/_apl?format=legacy`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify({ apl }),\n });\n const payload = await resp.json();\n if (!resp.ok) {\n console.log(payload);\n return undefined;\n }\n if (payload.matches.length) {\n return mapSpanToEval(payload.matches[0]);\n }\n } catch (err) {\n console.log(err);\n return undefined;\n }\n};\n\nexport const findEvaluationCases = async (evalId: string) => {\n try {\n const apl = `['${datasetName}'] | where trace_id == \"${evalId}\" | order by _time`;\n\n const headers = new Headers({\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n });\n\n const resp = await fetch(`${url}/v1/datasets/_apl?format=legacy`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify({ apl }),\n });\n const payload = await resp.json();\n if (!resp.ok) {\n console.log(payload);\n return undefined;\n }\n if (payload.matches.length) {\n return buildSpanTree(payload.matches);\n }\n } catch (err) {\n console.log(err);\n return undefined;\n }\n};\n\nexport const mapSpanToEval = (span: any): Evaluation => {\n return {\n id: span.data.attributes.custom['eval.id'],\n name: span.data.attributes.custom['eval.name'],\n type: span.data.attributes.custom['eval.type'],\n version: span.data.attributes.custom['eval.version'],\n collection: {\n name: span.data.attributes.custom['eval.collection.name'],\n size: span.data.attributes.custom['eval.collection.size'],\n },\n baseline: {\n id: span.data.attributes.custom['eval.baseline.id'],\n name: span.data.attributes.custom['eval.baseline.name'],\n },\n prompt: {\n model: span.data.attributes.custom['eval.prompt.model'],\n params: span.data.attributes.custom['eval.prompt.params'],\n },\n duration: span.data.duration,\n status: span.data.status.code,\n traceId: span.data.trace_id,\n runAt: span._time,\n tags: span.data.attributes.custom['eval.tags'].length\n ? JSON.parse(span.data.attributes.custom['eval.tags'])\n : [],\n user: {\n name: span.data.attributes.custom['eval.user.name'],\n email: span.data.attributes.custom['eval.user.email'],\n },\n cases: [],\n };\n};\n\nexport const mapSpanToCase = (item: { _time: string; data: any }): Case => {\n const data = item.data;\n // round duration\n const d = data.duration as string;\n let duration = '-';\n if (d.endsWith('s')) {\n duration = `${Number(d.replace('s', '')).toFixed(2)}s`;\n } else {\n duration = d;\n }\n\n return {\n index: data.attributes.custom['eval.case.index'],\n input: data.attributes.custom['eval.case.input'],\n output: data.attributes.custom['eval.case.output'],\n expected: data.attributes.custom['eval.case.expected'],\n duration: duration,\n status: data.status.code,\n scores: data.attributes.custom['eval.case.scores']\n ? JSON.parse(data.attributes.custom['eval.case.scores'])\n : {},\n runAt: item._time,\n spanId: data.span_id,\n traceId: data.trace_id,\n };\n};\n\n// compute a root eval with its children spans, results in a usable object of eval, cases, scores and chats\nexport const buildSpanTree = (spans: any[]): Evaluation | null => {\n if (!spans.length) {\n return null;\n }\n\n // Find the root eval span\n const evalSpan = spans.find((span) => span.data.attributes.gen_ai.operation.name === 'eval');\n\n if (!evalSpan) {\n return null;\n }\n\n // Create the root eval structure\n const rootSpan: Evaluation = mapSpanToEval(evalSpan);\n\n // Find all case spans and build the tree structure\n const caseSpans = spans.filter((span) => span.data.name.startsWith('case'));\n\n for (const caseSpan of caseSpans) {\n // Convert case data\n const caseData = mapSpanToCase(caseSpan);\n\n // Find task spans that belong to this case\n const taskSpans = spans.filter(\n (span) =>\n span.data.name.startsWith('task') && span.data.parent_span_id === caseSpan.data.span_id,\n );\n\n if (taskSpans.length > 0) {\n const taskSpan = taskSpans[0]; // Assuming one task per case\n\n // Find chat spans that belong to this task\n const chatSpans = spans.filter(\n (span) =>\n span.data.name.startsWith('chat') && span.data.parent_span_id === taskSpan.data.span_id,\n );\n\n const chatData: Chat[] = chatSpans.map((chatSpan) => ({\n operation: chatSpan.data.attributes.custom?.operation || '',\n capability: chatSpan.data.attributes.custom?.capability || '',\n step: chatSpan.data.attributes.custom?.step || '',\n request: {\n max_token: chatSpan.data.attributes.custom?.['request.max_token'] || '',\n model: chatSpan.data.attributes.custom?.['request.model'] || '',\n temperature: chatSpan.data.attributes.custom?.['request.temperature'] || 0,\n },\n response: {\n finish_reasons: chatSpan.data.attributes.custom?.['response.finish_reasons'] || '',\n },\n usage: {\n input_tokens: chatSpan.data.attributes.gen_ai?.usage?.input_tokens || 0,\n output_tokens: chatSpan.data.attributes.gen_ai?.usage?.output_tokens || 0,\n },\n }));\n\n // Create task data with chat information\n const taskData: Task = {\n name: taskSpan.data.name,\n output: taskSpan.data.attributes.custom?.output || '',\n trial: taskSpan.data.attributes.custom?.trial || 0,\n type: taskSpan.data.attributes.custom?.type || '',\n error: taskSpan.data.attributes.custom?.error,\n chat: chatData[0] || {\n operation: '',\n capability: '',\n step: '',\n request: { max_token: '', model: '', temperature: 0 },\n response: { finish_reasons: '' },\n usage: { input_tokens: 0, output_tokens: 0 },\n },\n };\n\n caseData.task = taskData;\n }\n\n // Find task spans that belong to this case\n const scoreSpans = spans.filter(\n (span) =>\n span.data.attributes.gen_ai.operation.name === 'eval.score' &&\n span.data.parent_span_id === caseSpan.data.span_id,\n );\n\n caseData.scores = {};\n\n scoreSpans.forEach((score) => {\n const name = score.data.attributes.custom['eval.score.name'];\n caseData.scores[name] = {\n name,\n value: score.data.attributes.custom['eval.score.value'],\n metadata: {\n error: score.data.attributes.error,\n },\n };\n });\n\n rootSpan.cases.push(caseData);\n }\n\n rootSpan.cases.sort((a, b) => a.index - b.index);\n\n return rootSpan;\n};\n","import type { SerializedError } from 'vitest';\nimport type { Reporter, TestCase, TestModule, TestRunEndReason, TestSuite } from 'vitest/node.js';\nimport type { TaskMeta } from 'vitest/index.cjs';\nimport c from 'tinyrainbow';\n\nimport type { Score } from '../scorers/scorer.types';\nimport { findEvaluationCases, type Evaluation } from './eval.service';\n\n/**\n * Complete report for a single evaluation case including results and metadata.\n *\n * Generated for each test case when running {@link Eval} with {@link EvalParams}.\n * Contains all {@link Score} results and execution metadata.\n *\n * @experimental This API is experimental and may change in future versions.\n */\nexport type EvalCaseReport = {\n /** Order/index of this case in the evaluation suite */\n index: number;\n /** Name of the evaluation */\n name: string;\n /** Input data that was provided to the {@link EvalTask} */\n input: string | Record<string, any>;\n /** Output produced by the {@link EvalTask} */\n output: string | Record<string, any>;\n /** Expected output for comparison */\n expected: string | Record<string, any>;\n /** Array of {@link Score} results from all scorers that were run */\n scores: Record<string, Score>;\n /** Any errors that occurred during evaluation */\n errors: Error[] | null;\n /** Status of the evaluation case */\n status: 'success' | 'fail' | 'pending';\n /** Duration in milliseconds for the entire case */\n duration: number | undefined;\n /** Timestamp when the case started */\n startedAt: number | undefined;\n};\n\nexport type EvaluationReport = {\n id: string;\n name: string;\n version: string;\n baseline: Evaluation | undefined;\n};\n\n/**\n * Custom Vitest reporter for Axiom AI evaluations.\n *\n * This reporter collects evaluation results and scores from tests\n * and processes them for further analysis and reporting.\n *\n */\nexport class AxiomReporter implements Reporter {\n baseline: Evaluation | undefined | null;\n startTime: number = 0;\n start: number = 0;\n\n onTestRunStart() {\n this.start = performance.now();\n this.startTime = new Date().getTime();\n }\n\n async onTestSuiteReady(_testSuite: TestSuite) {\n const meta = _testSuite.meta() as TaskMeta & { evaluation: EvaluationReport };\n const baseline = meta.evaluation.baseline;\n if (baseline) {\n // load baseline data\n this.baseline = await findEvaluationCases(baseline.id);\n }\n const cwd = process.cwd();\n\n console.log(\n ' ',\n c.bgCyan(c.black(` ${_testSuite.project.name} `)),\n c.bgBlue(c.black(` ${meta.evaluation.name}-${meta.evaluation.version} `)),\n c.dim(`(${_testSuite.children.size} cases)`),\n );\n\n console.log(' ', c.dim(_testSuite.module.moduleId.replace(cwd, '')));\n\n // print baseline name and version if found\n if (meta.evaluation.baseline) {\n console.log(\n ' ',\n ' baseline ',\n c.bgMagenta(\n c.black(` ${meta.evaluation.baseline.name}-${meta.evaluation.baseline.version} `),\n ),\n );\n } else {\n console.log(' ', c.bgWhite(c.blackBright(' baseline: ')), 'none');\n }\n\n console.log('');\n }\n\n onTestCaseReady(test: TestCase) {\n const meta = test.meta() as TaskMeta & { case: EvalCaseReport };\n console.log(c.blue(` \\u2713 evaluating case ${meta.case.index}`));\n }\n\n onTestSuiteResult(testSuite: TestSuite) {\n // calculate test duration in seconds\n const duration = Number((performance.now() - this.start) / 1000).toFixed(2);\n\n console.log(' ');\n console.log(' ', c.dim('Cases'), testSuite.children.size);\n console.log(' ', c.dim('Start at'), new Date(this.startTime).toTimeString());\n console.log(' ', c.dim('Duration'), `${duration}s`);\n\n const meta = testSuite.meta() as TaskMeta & { evaluation: EvaluationReport };\n const url = `https://app.axiom.co/evaluations/${meta.evaluation.name}/${meta.evaluation.id}`;\n\n for (const test of testSuite.children) {\n if (test.type !== 'test') return;\n this.printCaseResult(test);\n }\n\n console.log('');\n console.log(\n ' ',\n `see results for ${meta.evaluation.name}-${meta.evaluation.version} at ${url}`,\n );\n console.log(\n ' ',\n c.cyanBright('=== === === === === === === === === === === === === === === ==='),\n );\n console.log('');\n }\n\n async onTestRunEnd(\n _testModules: ReadonlyArray<TestModule>,\n _errors: ReadonlyArray<SerializedError>,\n _reason: TestRunEndReason,\n ) {}\n\n private printCaseResult(test: TestCase) {\n const ok = test.ok();\n const testMeta = test.meta() as TaskMeta & { case: EvalCaseReport };\n\n if (!testMeta || !testMeta.case) {\n return;\n }\n const index = testMeta.case.index;\n\n if (ok) {\n console.log(' ', c.yellow(` \\u2714 case ${index}:`));\n } else {\n console.log(' ', c.red(` \\u2716 case ${index}: failed`));\n for (const e of testMeta.case.errors ?? []) {\n console.log('', e.message);\n }\n }\n\n // print scores\n Object.keys(testMeta.case.scores).forEach((k) => {\n const v = testMeta.case.scores[k].score ? testMeta.case.scores[k].score : 0;\n const scoreValue = Number(v * 100).toFixed(2) + '%';\n\n if (this.baseline && this.baseline.cases[index] && this.baseline.cases[index].scores[k]) {\n const baselineScoreValue = this.baseline.cases[index].scores[k].value;\n const diff = v - baselineScoreValue;\n const diffText = Number(diff * 100).toFixed(2) + '%';\n const blScoreText = Number(baselineScoreValue * 100).toFixed(2) + '%';\n console.log(\n ' ',\n k,\n c.magentaBright(blScoreText),\n '->',\n c.blueBright(scoreValue),\n diff > 0 ? c.green('+' + diffText) : c.red(diffText),\n );\n } else {\n console.log(' ', k, c.blueBright(scoreValue));\n }\n\n return [k, scoreValue];\n });\n }\n}\n","import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { resourceFromAttributes } from '@opentelemetry/resources';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { trace, type Context, type SpanOptions } from '@opentelemetry/api';\nimport { initAxiomAI } from 'src/otel/initAxiomAI';\n\nconst collectorOptions = {\n url: process.env.AXIOM_URL\n ? `${process.env.AXIOM_URL}/v1/traces`\n : 'https://api.axiom.co/v1/traces', // Axiom API endpoint for trace data\n headers: {\n Authorization: `Bearer ${process.env.AXIOM_TOKEN}`, // Replace API_TOKEN with your actual API token\n 'X-Axiom-Dataset': process.env.AXIOM_DATASET || '', // Replace DATASET_NAME with your dataset\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n};\n\n// export const consoleExporter = new ConsoleSpanExporter()\nexport const exporter = new OTLPTraceExporter(collectorOptions);\n\nconst processor = new BatchSpanProcessor(exporter, {\n maxQueueSize: 2048,\n maxExportBatchSize: 512,\n scheduledDelayMillis: 5000,\n exportTimeoutMillis: 30000,\n});\n\nconst provider = new NodeTracerProvider({\n resource: resourceFromAttributes({\n ['service.name']: 'axiom',\n ['service.version']: __SDK_VERSION__,\n }),\n spanProcessors: [processor],\n});\n\nprovider.register();\n\n// Create a shared tracer instance\nexport const tracer = trace.getTracer('axiom', __SDK_VERSION__);\n\nexport const flush = async () => {\n await provider.forceFlush();\n};\n\nexport const startSpan = (name: string, opts: SpanOptions, context?: Context) => {\n return tracer.startSpan(name, opts, context);\n};\n\ninitAxiomAI({ tracer: tracer });\n","import type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport packageJson from '../../package.json';\nimport { AXIOM_AI_REDACTION_KEY, type AxiomAIRedactionPolicy } from './utils/redaction';\n\n// Global key to store tracer scope information across all execution contexts\nconst AXIOM_AI_SCOPE_KEY = Symbol.for('__axiom_ai_scope__');\n\ninterface TracerScope {\n name: string;\n version?: string;\n}\n\n/**\n * Extract scope information from a tracer, with fallback to package.json\n */\nfunction extractTracerScope(tracer: Tracer): TracerScope {\n const tracerAny = tracer as any;\n\n // Guard access to private fields with optional chaining\n // Note: These are internal OTEL fields that may change in future versions\n // _instrumentationScope is modern, instrumentationLibrary is legacy (<1.16)\n const name =\n tracerAny._instrumentationScope?.name ||\n tracerAny.instrumentationLibrary?.name ||\n packageJson.name;\n\n const version =\n tracerAny._instrumentationScope?.version ||\n tracerAny.instrumentationLibrary?.version ||\n packageJson.version;\n\n return { name, version };\n}\n\n/**\n * Register this in your `instrumentation.ts` to set up axiom.\n * This function stores the tracer's scope information globally to enable Context Propagation\n * and Instrumentation Scope. The tracer will be available across all execution contexts including Next.js.\n *\n * This function is idempotent - calling it multiple times with the same scope has no additional cost.\n *\n * @param config\n * @param config.tracer - The tracer that you are using in your application.\n * @param config.redactionPolicy - Optional redaction policy to control what data is captured in spans.\n */\nexport function initAxiomAI(config: { tracer: Tracer; redactionPolicy?: AxiomAIRedactionPolicy }) {\n const newScope = extractTracerScope(config.tracer);\n const existingScope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Check if already initialized with same scope (idempotent behavior)\n if (\n existingScope &&\n existingScope.name === newScope.name &&\n existingScope.version === newScope.version\n ) {\n return;\n }\n\n // Warn about double initialization with different scopes\n if (existingScope) {\n console.warn(\n '[AxiomAI] initAxiomAI() called multiple times with different scopes. ' +\n `Previous: ${existingScope.name}@${existingScope.version}, ` +\n `New: ${newScope.name}@${newScope.version}`,\n );\n }\n\n // Store scope information globally (works across Next.js contexts)\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = newScope;\n\n // Store redaction policy globally if provided\n if (config.redactionPolicy) {\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = config.redactionPolicy;\n }\n}\n\n/**\n * Get a tracer using the globally stored scope information\n * Fall back to package.json defaults if not set\n */\nexport function getGlobalTracer(): Tracer {\n // Get stored scope information or fall back to package defaults\n const scope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Warn if initAxiomAI was never called\n if (!scope) {\n console.warn(\n '[AxiomAI] AXIOM_AI_SCOPE_KEY is undefined. This probably means that ' +\n 'initAxiomAI() was never called. ' +\n 'Make sure to call initAxiomAI({ tracer }) in your instrumentation setup.',\n );\n }\n\n let { name, version } = scope || { name: packageJson.name, version: packageJson.version };\n\n if (!name || !version) {\n name = packageJson.name;\n version = packageJson.version;\n if (!name || !version) {\n name = 'axiom';\n version = 'unknown';\n }\n }\n\n // Use OpenTelemetry's standard global provider mechanism\n return trace.getTracer(name, version);\n}\n\n/**\n * Reset AxiomAI configuration (useful for testing)\n */\nexport function resetAxiomAI() {\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = undefined;\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = undefined;\n}\n","{\n \"name\": \"axiom\",\n \"version\": \"0.18.0\",\n \"type\": \"module\",\n \"author\": \"Axiom, Inc.\",\n \"contributors\": [\n \"Islam Shehata <islam@axiom.co>\",\n \"Chris Ehrlich <chris@axiom.co>\",\n \"Gabriel de Andrade <gabriel@axiom.co>\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && chmod +x dist/bin.js\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"lint\": \"eslint './**/*.{js,ts}'\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest --watch\",\n \"publint\": \"npx publint\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"bin\": {\n \"axiom\": \"./dist/bin.js\"\n },\n \"exports\": {\n \"./ai\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"./ai/evals\": {\n \"import\": {\n \"types\": \"./dist/evals.d.ts\",\n \"default\": \"./dist/evals.js\"\n },\n \"require\": {\n \"types\": \"./dist/evals.d.cts\",\n \"default\": \"./dist/evals.cjs\"\n }\n }\n },\n \"keywords\": [\n \"axiom\",\n \"logging\",\n \"ai\",\n \"otel\",\n \"opentelemetry\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/axiomhq/ai.git\",\n \"directory\": \"packages/ai\"\n },\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@next/env\": \"^15.4.2\",\n \"@opentelemetry/auto-instrumentations-node\": \"^0.60.1\",\n \"@opentelemetry/context-async-hooks\": \"^2.0.1\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.202.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-node\": \"^0.202.0\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.37.0\",\n \"@sinclair/typebox\": \"^0.34.37\",\n \"commander\": \"^14.0.0\",\n \"console-table-printer\": \"^2.14.6\",\n \"esbuild\": \"^0.25.8\",\n \"handlebars\": \"^4.7.8\",\n \"nanoid\": \"^5.1.5\",\n \"vitest\": \"catalog:\",\n \"zod\": \"catalog:\"\n },\n \"peerDependencies\": {\n \"@opentelemetry/api\": \"^1.9.0\"\n },\n \"devDependencies\": {\n \"@ai-sdk/anthropicv1\": \"npm:@ai-sdk/anthropic@^1.2.12\",\n \"@ai-sdk/anthropicv2\": \"npm:@ai-sdk/anthropic@2.0.0-beta.9\",\n \"@ai-sdk/openaiv1\": \"npm:@ai-sdk/openai@^1.3.23\",\n \"@ai-sdk/openaiv2\": \"npm:@ai-sdk/openai@2.0.0-beta.12\",\n \"@ai-sdk/providerv1\": \"npm:@ai-sdk/provider@^1.1.3\",\n \"@ai-sdk/providerv2\": \"npm:@ai-sdk/provider@2.0.0-beta.1\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@repo/eslint-config\": \"workspace:*\",\n \"@types/node\": \"^22.15.29\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"aiv4\": \"npm:ai@^4.3.19\",\n \"aiv5\": \"npm:ai@^5.0.0\",\n \"eslint\": \"catalog:\",\n \"prettier\": \"catalog:\",\n \"tinyrainbow\": \"^2.0.0\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\"\n },\n \"files\": [\n \"dist\"\n ],\n \"packageManager\": \"pnpm@10.11.1\"\n}\n","import { context, propagation, type Baggage, type Span } from '@opentelemetry/api';\nimport { WITHSPAN_REDACTION_POLICY_KEY } from '../withSpanBaggageKey';\n\ntype CaptureMessageContent = 'full' | 'off';\n\nexport type AxiomAIRedactionPolicy = {\n captureMessageContent?: CaptureMessageContent;\n mirrorToolPayloadOnToolSpan?: boolean;\n};\n\nexport const RedactionPolicy = {\n /**\n * Includes message content on chat spans, and mirrors tool\n * payload on tool spans for more convenient querying.\n */\n AxiomDefault: {\n captureMessageContent: 'full',\n mirrorToolPayloadOnToolSpan: true,\n },\n /**\n * Redacts message content on chat spans, and does not put\n * tool payload on tool spans.\n */\n OpenTelemetryDefault: {\n captureMessageContent: 'off',\n mirrorToolPayloadOnToolSpan: false,\n },\n} as const satisfies Record<string, AxiomAIRedactionPolicy>;\n\n// Global key to store redaction policy across all execution contexts\nexport const AXIOM_AI_REDACTION_KEY = Symbol.for('__axiom_ai_redaction__');\n\n/**\n * Get the globally stored redaction policy\n * @returns The global redaction policy or undefined if not set\n */\nfunction getGlobalRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n return (globalThis as any)[AXIOM_AI_REDACTION_KEY];\n}\n\n/**\n * Resolves the effective redaction policy by merging global and per-call policies.\n * Per-call policies take precedence over global policies.\n *\n * @param globalPolicy - The global redaction policy from initAxiomAI\n * @param localPolicy - The per-call redaction policy from withSpan or middleware\n * @returns The effective redaction policy with all fields resolved\n */\nfunction getEffectiveRedactionPolicy(\n globalPolicy?: AxiomAIRedactionPolicy,\n localPolicy?: AxiomAIRedactionPolicy,\n): AxiomAIRedactionPolicy {\n // Per-call policy overrides global policy, with defaults\n return {\n captureMessageContent:\n localPolicy?.captureMessageContent ??\n globalPolicy?.captureMessageContent ??\n RedactionPolicy.AxiomDefault.captureMessageContent,\n mirrorToolPayloadOnToolSpan:\n localPolicy?.mirrorToolPayloadOnToolSpan ??\n globalPolicy?.mirrorToolPayloadOnToolSpan ??\n RedactionPolicy.AxiomDefault.mirrorToolPayloadOnToolSpan,\n };\n}\n\n/**\n * Get the active redaction policy\n */\nexport function getRedactionPolicy() {\n return getEffectiveRedactionPolicy(getGlobalRedactionPolicy(), getPerCallRedactionPolicy());\n}\n\n/**\n * Conditionally sets a span attribute based on the capture message content policy.\n * When policy is 'off', the attribute is not set at all.\n *\n * @param span - The OpenTelemetry span to set the attribute on\n * @param attribute - The attribute name/key\n * @param value - The attribute value\n * @param captureMessageContent - The capture policy ('full' sets attribute, 'off' skips it)\n */\nexport function handleMaybeRedactedAttribute(\n span: Span,\n attribute: string,\n value: any,\n captureMessageContent?: CaptureMessageContent,\n): void {\n if (captureMessageContent === 'full') {\n span.setAttribute(attribute, value);\n }\n\n // For 'off', don't set the attribute at all\n // Future: Could add callback-based redaction here\n}\n\n/**\n * Extracts the per-call redaction policy from OpenTelemetry baggage context.\n * This allows middleware and tools to access redaction policies passed via withSpan.\n *\n * @returns The per-call redaction policy or undefined if not set\n */\nfunction getPerCallRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n const baggage: Baggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const serializedPolicy = baggage.getEntry(WITHSPAN_REDACTION_POLICY_KEY)?.value;\n\n if (!serializedPolicy) {\n return undefined;\n }\n\n try {\n return JSON.parse(serializedPolicy) as AxiomAIRedactionPolicy;\n } catch (error) {\n console.warn('[AxiomAI] Failed to parse redaction policy from baggage:', error);\n return undefined;\n }\n}\n","import { Command } from 'commander';\n\nexport const loadVersionCommand = (program: Command) => {\n return program.addCommand(\n new Command('version').description('cli version').action(() => {\n console.log(__SDK_VERSION__);\n }),\n );\n};\n"],"mappings":"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","names":["import_commander","import_node_path","os","path","fs","module","import_promises","readline","resolve","program","fs","import_commander","fs","path","program","url","import_commander","r","s","u","s","a","url","import_api","import_api","tracer","program","path","f","import_commander","program","pkg"]}
|
package/dist/bin.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runVitest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-5336ZOJZ.js";
|
|
5
|
+
import "./chunk-LNTOR4X7.js";
|
|
6
6
|
import "./chunk-KEXKKQVW.js";
|
|
7
7
|
|
|
8
8
|
// src/bin.ts
|
|
@@ -393,7 +393,7 @@ import { Command as Command4 } from "commander";
|
|
|
393
393
|
var loadVersionCommand = (program2) => {
|
|
394
394
|
return program2.addCommand(
|
|
395
395
|
new Command4("version").description("cli version").action(() => {
|
|
396
|
-
console.log("0.
|
|
396
|
+
console.log("0.18.0");
|
|
397
397
|
})
|
|
398
398
|
);
|
|
399
399
|
};
|
|
@@ -402,7 +402,7 @@ var loadVersionCommand = (program2) => {
|
|
|
402
402
|
var { loadEnvConfig } = pkg;
|
|
403
403
|
loadEnvConfig(process.cwd());
|
|
404
404
|
var program = new Command5();
|
|
405
|
-
program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.
|
|
405
|
+
program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.18.0");
|
|
406
406
|
loadPushCommand(program);
|
|
407
407
|
loadPullCommand(program);
|
|
408
408
|
loadEvalCommand(program);
|