secuprompt
Version:
Protect your AI from Prompt Injection
35 lines (34 loc) • 1.27 kB
JavaScript
;
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;