UNPKG

secuprompt

Version:

Protect your AI from Prompt Injection

35 lines (34 loc) 1.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.score_semantic = void 0; const data_1 = require("../data"); const embedding_1 = require("../core/embedding"); const cluster_vecs = data_1.semantic_clusters.map(({ tag, samples }) => { const sum = new Array(embedding_1.vec_dim).fill(0); samples.forEach(s => { const e = (0, embedding_1.embed)(s); for (let i = 0; i < embedding_1.vec_dim; i++) sum[i] += e[i]; }); const count = samples.length || 1; for (let i = 0; i < embedding_1.vec_dim; i++) sum[i] /= count; return { tag, vec: sum }; }); const score_semantic = (txt) => { const vec = (0, embedding_1.embed)(txt); let best = 0; let tag = "none"; for (const { tag: c_tag, vec: c_vec } of cluster_vecs) { const sim = (0, embedding_1.cosine)(vec, c_vec); if (sim > best) { best = sim; tag = c_tag; } } const level = best >= 0.78 ? "high" : best >= 0.5 ? "medium" : "low"; const detail = level === "low" ? [] : [`semantic_${level}_${tag}`]; const score = best >= 0.5 ? best : best * 0.5; return { score: (0, embedding_1.normalize)(score), detail }; }; exports.score_semantic = score_semantic;