UNPKG

llm-guard

Version:

A TypeScript library for validating and securing LLM prompts

68 lines (67 loc) 2.88 kB
"use strict"; 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 __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LLMGuard = void 0; const pii_1 = require("./guards/pii"); const profanity_1 = require("./guards/profanity"); const jailbreak_1 = require("./guards/jailbreak"); const toxicity_1 = require("./guards/toxicity"); const relevance_1 = require("./guards/relevance"); const prompt_injection_1 = require("./guards/prompt-injection"); class LLMGuard { constructor(config = {}) { this.guards = {}; // Initialize guards with explicit boolean values this.guards.pii = new pii_1.PIIGuard(config.pii !== false); this.guards.profanity = new profanity_1.ProfanityGuard(config.profanity !== false); this.guards.jailbreak = new jailbreak_1.JailbreakGuard(config.jailbreak !== false); this.guards.toxicity = new toxicity_1.ToxicityGuard(config.toxicity !== false); this.guards.relevance = new relevance_1.RelevanceGuard(config.relevance !== false, config.relevanceOptions); this.guards.promptInjection = new prompt_injection_1.PromptInjectionGuard(config.promptInjection !== false); } async validate(prompt) { const results = []; let isValid = true; let overallScore = 1.0; for (const guard of Object.values(this.guards)) { if (guard && guard.isEnabled()) { const result = await guard.validate(prompt); results.push(result); // Update overall validation status isValid = isValid && result.valid; // Update overall score (take the minimum score) if (result.score !== undefined) { overallScore = Math.min(overallScore, result.score); } } } return { id: Date.now().toString(), input: prompt, isValid, score: overallScore, results }; } async validateBatch(prompts) { const responses = await Promise.all(prompts.map(prompt => this.validate(prompt))); return { responses }; } } exports.LLMGuard = LLMGuard; __exportStar(require("./types"), exports);