UNPKG

venice-ai-sdk-apl

Version:

A comprehensive SDK for the Venice AI API with CLI support, programmatic CLI usage, CLI-style interface, and interactive demo

201 lines 6.58 kB
"use strict"; /** * Logger Utility * * This module provides logging functionality for the SDK. * It allows for different log levels and can be enabled/disabled. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = exports.LogLevel = void 0; /** * Log levels */ var LogLevel; (function (LogLevel) { LogLevel[LogLevel["NONE"] = 0] = "NONE"; LogLevel[LogLevel["ERROR"] = 1] = "ERROR"; LogLevel[LogLevel["WARN"] = 2] = "WARN"; LogLevel[LogLevel["INFO"] = 3] = "INFO"; LogLevel[LogLevel["DEBUG"] = 4] = "DEBUG"; LogLevel[LogLevel["TRACE"] = 5] = "TRACE"; })(LogLevel || (exports.LogLevel = LogLevel = {})); /** * Default logger configuration */ const DEFAULT_CONFIG = { level: LogLevel.NONE, timestamps: true }; /** * Logger class */ class Logger { /** * Configure the logger * * @param config - Logger configuration */ static configure(config) { Logger.config = { ...Logger.config, ...config }; } /** * Set the log level * * @param level - Log level */ static setLevel(level) { Logger.config.level = level; } /** * Log a message at the error level * * @param message - Message to log * @param data - Additional data to log */ static error(message, data) { Logger.log(message, LogLevel.ERROR, data); } /** * Log a message at the warn level * * @param message - Message to log * @param data - Additional data to log */ static warn(message, data) { Logger.log(message, LogLevel.WARN, data); } /** * Log a message at the info level * * @param message - Message to log * @param data - Additional data to log */ static info(message, data) { Logger.log(message, LogLevel.INFO, data); } /** * Log a message at the debug level * * @param message - Message to log * @param data - Additional data to log */ static debug(message, data) { Logger.log(message, LogLevel.DEBUG, data); } /** * Log a message at the trace level * * @param message - Message to log * @param data - Additional data to log */ static trace(message, data) { Logger.log(message, LogLevel.TRACE, data); } /** * Sanitizes an object to exclude image data * * @param data - Object to sanitize * @returns Sanitized object */ static sanitizeImageData(data) { if (!data || typeof data !== 'object') { return data; } // Create a shallow copy of the object const sanitized = Array.isArray(data) ? [...data] : { ...data }; // Check each property for potential image data for (const key in sanitized) { if (Object.prototype.hasOwnProperty.call(sanitized, key)) { const value = sanitized[key]; // Check for common image field names if (['image', 'data', 'content', 'file', 'buffer', 'base64'].includes(key.toLowerCase())) { // Check if value is likely image data (string longer than 1000 chars or Buffer) if ((typeof value === 'string' && value.length > 1000) || (value && typeof value === 'object' && 'buffer' in value) || (value instanceof Buffer)) { sanitized[key] = '[IMAGE DATA EXCLUDED]'; } } else if (typeof value === 'string' && value.length > 1000 && (value.startsWith('data:image') || value.startsWith('/9j/') || // JPEG value.startsWith('iVBOR') || // PNG /^[A-Za-z0-9+/=]{1000,}$/.test(value))) { // Also check for base64 encoded images in other fields sanitized[key] = '[IMAGE DATA EXCLUDED]'; } else if (typeof value === 'object' && value !== null) { // Recursively sanitize nested objects sanitized[key] = Logger.sanitizeImageData(value); } } } return sanitized; } /** * Log a message at the specified level * * @param message - Message to log * @param level - Log level * @param data - Additional data to log */ static log(message, level, data) { if (level > Logger.config.level) { return; } const timestamp = Logger.config.timestamps ? `[${new Date().toISOString()}] ` : ''; const levelStr = LogLevel[level].padEnd(5); let logMessage = `${timestamp}${levelStr} - ${message}`; if (data !== undefined) { if (typeof data === 'object') { try { // Sanitize object to exclude image data before stringifying const sanitizedData = Logger.sanitizeImageData(data); const dataStr = JSON.stringify(sanitizedData, null, 2); logMessage += `\n${dataStr}`; } catch (error) { logMessage += `\n[Object could not be stringified]`; } } else { // For non-object data, check if it's a string that might be base64 encoded image if (typeof data === 'string' && data.length > 1000 && (data.startsWith('data:image') || data.startsWith('/9j/') || // JPEG data.startsWith('iVBOR') || // PNG /^[A-Za-z0-9+/=]{1000,}$/.test(data))) { logMessage += ' [IMAGE DATA EXCLUDED]'; } else { logMessage += ` ${data}`; } } } if (Logger.config.logHandler) { Logger.config.logHandler(logMessage, level); } else { switch (level) { case LogLevel.ERROR: console.error(logMessage); break; case LogLevel.WARN: console.warn(logMessage); break; default: console.log(logMessage); break; } } } } exports.Logger = Logger; /** * Current configuration */ Logger.config = { ...DEFAULT_CONFIG }; //# sourceMappingURL=logger.js.map