UNPKG

genkit-cli

Version:

CLI for interacting with the Google Genkit AI framework

106 lines 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.traceList = void 0; const utils_1 = require("@genkit-ai/tools-common/utils"); const commander_1 = require("commander"); const manager_utils_1 = require("../utils/manager-utils"); function formatTruncated(val, maxLen = 100) { if (val === undefined) return ''; const parsed = typeof val === 'string' ? val : JSON.stringify(val); return parsed.length > maxLen ? parsed.substring(0, maxLen - 3) + '...' : parsed; } exports.traceList = new commander_1.Command('trace:list') .description('list traces') .option('-l, --limit <number>', 'limit the number of returned traces', '15') .option('--status <status>', 'filter by root span status') .option('--type <type>', 'filter by root span type') .option('--name <name>', 'filter by root span name') .option('--continuation-token <token>', 'continuation token for pagination') .action(async (options) => { const projectRoot = await (0, utils_1.findProjectRoot)(); const runAction = async (manager) => { try { const eqFilter = {}; if (options.status) { const statusVal = options.status.toLowerCase() === 'error' ? 2 : options.status.toLowerCase() === 'success' ? 0 : Number(options.status); eqFilter['status'] = [statusVal]; } if (options.type) { eqFilter['type'] = [options.type]; } if (options.name) { eqFilter['name'] = [options.name]; } const filter = { eq: Object.keys(eqFilter).length > 0 ? eqFilter : undefined, neq: { 'genkitx:ignore-trace': ['true'] }, }; const listRequest = { limit: Number.parseInt(options.limit, 10), continuationToken: options.continuationToken, filter, }; const response = await manager.listTraces(listRequest); if (!response || !response.traces || response.traces.length === 0) { utils_1.logger.info('No traces found.'); return; } console.log(`Found ${response.traces.length} traces:\n`); response.traces.forEach((trace) => { let duration = 'unknown'; let time = 'unknown'; if (trace.startTime) { time = new Date(trace.startTime).toLocaleString(); if (trace.endTime) { duration = `${trace.endTime - trace.startTime}ms`; } } let status = 'unknown'; let type = 'unknown'; let inputStr = ''; let outputStr = ''; const rootSpan = (0, utils_1.stackTraceSpans)(trace); if (rootSpan) { const attrs = rootSpan.attributes || {}; status = attrs['genkit:state'] || (rootSpan.status?.code !== undefined ? String(rootSpan.status.code) : 'unknown'); type = attrs['genkit:metadata:subtype'] || attrs['genkit:type'] || 'unknown'; inputStr = formatTruncated(attrs['genkit:input']); outputStr = formatTruncated(attrs['genkit:output']); } console.log(`ID: ${trace.traceId}`); console.log(`Type: ${type}`); console.log(`Name: ${trace.displayName || 'unknown'}`); console.log(`Status: ${status}`); console.log(`Time: ${time}`); console.log(`Duration: ${duration}`); if (inputStr) console.log(`Input: ${inputStr}`); if (outputStr) console.log(`Output: ${outputStr}`); console.log('---'); }); if (response.continuationToken) { console.log(`\nTo get the next page, use: --continuation-token ${response.continuationToken}`); } } catch (e) { utils_1.logger.error(`Error listing traces: ${e}`); } }; await (0, manager_utils_1.runWithManager)(projectRoot, runAction); }); //# sourceMappingURL=trace-list.js.map