UNPKG

llmverify

Version:

AI Output Verification Toolkit — Local-first LLM safety, hallucination detection, PII redaction, prompt injection defense, and runtime monitoring. Zero telemetry. OWASP LLM Top 10 aligned.

117 lines 9.73 kB
"use strict"; /** * Configuration Management * * Loads configuration from files and environment variables * * @module config */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.loadConfigFromEnv = loadConfigFromEnv; exports.loadConfigFile = loadConfigFile; exports.mergeConfigs = mergeConfigs; exports.loadConfig = loadConfig; exports.createDefaultConfigFile = createDefaultConfigFile; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const config_1 = require("../types/config"); const ENV_PREFIX = 'LLMVERIFY_'; /** * Load config from environment variables */ function loadConfigFromEnv() { const config = {}; if (process.env[`${ENV_PREFIX}TIER`]) { config.tier = process.env[`${ENV_PREFIX}TIER`]; } if (process.env[`${ENV_PREFIX}API_KEY`]) { config.privacy = { ...config.privacy, apiKey: process.env[`${ENV_PREFIX}API_KEY`] }; } return config; } /** * Load config from file */ function loadConfigFile(searchPath) { const startPath = searchPath || process.cwd(); const configPath = path.join(startPath, 'llmverify.config.json'); if (fs.existsSync(configPath)) { try { return JSON.parse(fs.readFileSync(configPath, 'utf-8')); } catch (error) { console.warn('Failed to load config:', error); } } return null; } /** * Merge configs with priority: runtime > env > file > defaults */ function mergeConfigs(fileConfig, envConfig, runtimeConfig) { return { ...config_1.DEFAULT_CONFIG, ...(fileConfig || {}), ...envConfig, ...(runtimeConfig || {}) }; } /** * Load complete configuration */ function loadConfig(runtimeConfig) { const fileConfig = loadConfigFile(); const envConfig = loadConfigFromEnv(); return mergeConfigs(fileConfig, envConfig, runtimeConfig); } /** * Create default config file */ function createDefaultConfigFile(targetPath) { const configPath = path.join(targetPath || process.cwd(), 'llmverify.config.json'); const defaultConfig = { tier: 'free', engines: { hallucination: { enabled: true }, consistency: { enabled: true }, jsonValidator: { enabled: true }, csm6: { enabled: true, profile: 'baseline' } } }; fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2)); return configPath; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0gsOENBWUM7QUFLRCx3Q0FhQztBQUtELG9DQVdDO0FBS0QsZ0NBSUM7QUFLRCwwREFlQztBQXBGRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDRDQUF5RDtBQUV6RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUI7SUFDL0IsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO0lBRXZCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLFVBQW1CO0lBQ2hELE1BQU0sU0FBUyxHQUFHLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUVqRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsVUFBa0MsRUFDbEMsU0FBMEIsRUFDMUIsYUFBK0I7SUFFL0IsT0FBTztRQUNMLEdBQUcsdUJBQWM7UUFDakIsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDckIsR0FBRyxTQUFTO1FBQ1osR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7S0FDZixDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLGFBQStCO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFDdEMsT0FBTyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxVQUFtQjtJQUN6RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUVuRixNQUFNLGFBQWEsR0FBRztRQUNwQixJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRTtZQUNQLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDaEMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtZQUM5QixhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ2hDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtTQUM3QztLQUNGLENBQUM7SUFFRixFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnRcbiAqIFxuICogTG9hZHMgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIFxuICogQG1vZHVsZSBjb25maWdcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29uZmlnLCBERUZBVUxUX0NPTkZJRyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZyc7XG5cbmNvbnN0IEVOVl9QUkVGSVggPSAnTExNVkVSSUZZXyc7XG5cbi8qKlxuICogTG9hZCBjb25maWcgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWdGcm9tRW52KCk6IFBhcnRpYWw8Q29uZmlnPiB7XG4gIGNvbnN0IGNvbmZpZzogYW55ID0ge307XG4gIFxuICBpZiAocHJvY2Vzcy5lbnZbYCR7RU5WX1BSRUZJWH1USUVSYF0pIHtcbiAgICBjb25maWcudGllciA9IHByb2Nlc3MuZW52W2Ake0VOVl9QUkVGSVh9VElFUmBdO1xuICB9XG4gIFxuICBpZiAocHJvY2Vzcy5lbnZbYCR7RU5WX1BSRUZJWH1BUElfS0VZYF0pIHtcbiAgICBjb25maWcucHJpdmFjeSA9IHsgLi4uY29uZmlnLnByaXZhY3ksIGFwaUtleTogcHJvY2Vzcy5lbnZbYCR7RU5WX1BSRUZJWH1BUElfS0VZYF0gfTtcbiAgfVxuICBcbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBMb2FkIGNvbmZpZyBmcm9tIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWdGaWxlKHNlYXJjaFBhdGg/OiBzdHJpbmcpOiBQYXJ0aWFsPENvbmZpZz4gfCBudWxsIHtcbiAgY29uc3Qgc3RhcnRQYXRoID0gc2VhcmNoUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHN0YXJ0UGF0aCwgJ2xsbXZlcmlmeS5jb25maWcuanNvbicpO1xuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjb25maWc6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2UgY29uZmlncyB3aXRoIHByaW9yaXR5OiBydW50aW1lID4gZW52ID4gZmlsZSA+IGRlZmF1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MoXG4gIGZpbGVDb25maWc6IFBhcnRpYWw8Q29uZmlnPiB8IG51bGwsXG4gIGVudkNvbmZpZzogUGFydGlhbDxDb25maWc+LFxuICBydW50aW1lQ29uZmlnPzogUGFydGlhbDxDb25maWc+XG4pOiBDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgIC4uLihmaWxlQ29uZmlnIHx8IHt9KSxcbiAgICAuLi5lbnZDb25maWcsXG4gICAgLi4uKHJ1bnRpbWVDb25maWcgfHwge30pXG4gIH0gYXMgQ29uZmlnO1xufVxuXG4vKipcbiAqIExvYWQgY29tcGxldGUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZyhydW50aW1lQ29uZmlnPzogUGFydGlhbDxDb25maWc+KTogQ29uZmlnIHtcbiAgY29uc3QgZmlsZUNvbmZpZyA9IGxvYWRDb25maWdGaWxlKCk7XG4gIGNvbnN0IGVudkNvbmZpZyA9IGxvYWRDb25maWdGcm9tRW52KCk7XG4gIHJldHVybiBtZXJnZUNvbmZpZ3MoZmlsZUNvbmZpZywgZW52Q29uZmlnLCBydW50aW1lQ29uZmlnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgZGVmYXVsdCBjb25maWcgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENvbmZpZ0ZpbGUodGFyZ2V0UGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCB8fCBwcm9jZXNzLmN3ZCgpLCAnbGxtdmVyaWZ5LmNvbmZpZy5qc29uJyk7XG4gIFxuICBjb25zdCBkZWZhdWx0Q29uZmlnID0ge1xuICAgIHRpZXI6ICdmcmVlJyxcbiAgICBlbmdpbmVzOiB7XG4gICAgICBoYWxsdWNpbmF0aW9uOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICAgIGNvbnNpc3RlbmN5OiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICAgIGpzb25WYWxpZGF0b3I6IHsgZW5hYmxlZDogdHJ1ZSB9LFxuICAgICAgY3NtNjogeyBlbmFibGVkOiB0cnVlLCBwcm9maWxlOiAnYmFzZWxpbmUnIH1cbiAgICB9XG4gIH07XG4gIFxuICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGRlZmF1bHRDb25maWcsIG51bGwsIDIpKTtcbiAgcmV0dXJuIGNvbmZpZ1BhdGg7XG59XG4iXX0=