UNPKG

secuprompt

Version:

Protect your AI from Prompt Injection

53 lines (52 loc) 1.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalize = exports.cosine = exports.embed = exports.seg_text = exports.vec_dim = void 0; exports.vec_dim = 64; const token_re = /[^\p{L}\p{N}]+/u; const seg_text = (txt) => { const bits = txt .split(/[\.\!\?\n\r]+/g) .map(v => v.trim().toLowerCase()) .filter(Boolean); if (!bits.length) bits.push(txt.toLowerCase()); return bits; }; exports.seg_text = seg_text; const embed = (txt) => { const v = new Array(exports.vec_dim).fill(0); const toks = txt.toLowerCase().split(token_re).filter(Boolean); if (!toks.length) return v; for (const t of toks) { let h = 0; for (let i = 0; i < t.length; i++) { h = (h * 31 + t.charCodeAt(i)) >>> 0; } const idx = h % exports.vec_dim; v[idx] += 1; const idx2 = (h >>> 3) % exports.vec_dim; v[idx2] += 0.5; } const mag = Math.sqrt(v.reduce((s, x) => s + x * x, 0)); if (mag === 0) return v; for (let i = 0; i < exports.vec_dim; i++) v[i] /= mag; return v; }; exports.embed = embed; const cosine = (a, b) => { let dot = 0, ma = 0, mb = 0; for (let i = 0; i < exports.vec_dim; i++) { dot += a[i] * b[i]; ma += a[i] * a[i]; mb += b[i] * b[i]; } if (ma === 0 || mb === 0) return 0; return dot / (Math.sqrt(ma) * Math.sqrt(mb)); }; exports.cosine = cosine; const normalize = (v) => v < 0 ? 0 : v > 1 ? 1 : v; exports.normalize = normalize;