AUDIT / src /lib /__tests__ /finalTextCleanerN7.test.ts
Arypulka98's picture
feat(audit): deploy full backend cluster node (part 2)
cc11e77 verified
Raw
History Blame Contribute Delete
3.08 kB
/**
* finalTextCleanerN7.test.ts — N7: EN disclaimer patterns in stripDisclaimers
*
* finalTextCleaner.ts aveva 23 pattern IT ma 0 pattern EN.
* N2 aveva gia' aggiunto L1_HALLUCINATION_EN a liteAutoCorrectBlock,
* ma stripDisclaimers non aveva mai ricevuto equivalenti EN.
* Rischio: risposte in EN con "As an AI...", "I don't have access..."
* passavano la pulizia finale senza essere strippate.
*/
import { describe, it, expect } from "vitest";
import { stripDisclaimers } from "@/lib/agentLoop/finalTextCleaner";
// Trailing EN disclaimers che devono essere rimossi
const EN_TRAILING = [
["As an AI language model, I cannot guarantee accuracy.", ""],
["As an AI assistant, my knowledge is limited.", ""],
["I don't have access to real-time information.", ""],
["I don't have access to the internet.", ""],
["However, I cannot guarantee the accuracy of this information.", ""],
["However, I can't verify current prices.", ""],
["My training data cutoff is 2024.", ""],
["As of my knowledge cutoff, this was the latest data.", ""],
["I'd recommend checking official sources for verification.", ""],
["For the most up-to-date information, please check official sources.", ""],
];
// Risposte reali con disclaimer in coda — deve restare solo il contenuto utile
const REAL_RESPONSES = [
[
"La capitale della Francia e' Parigi.
As an AI language model, I cannot guarantee accuracy.",
"La capitale della Francia e' Parigi.",
],
[
"Il PIL italiano e' circa 2.000 miliardi.
However, I can't verify current economic data.",
"Il PIL italiano e' circa 2.000 miliardi.",
],
[
"Il modello GPT-4 e' stato rilasciato nel 2023.
My training data cutoff is January 2024.",
"Il modello GPT-4 e' stato rilasciato nel 2023.",
],
];
// Frasi che NON devono essere toccate (NO disclaimer)
const NO_STRIP = [
"As an AI company, OpenAI has released many models.", // "as an AI company", non "As an AI language model"
"I don't have a favorite color.", // non disclaimer tecnico
"However, I can answer your question now.", // "I can", non "I cannot"
];
describe("N7: stripDisclaimers rimuove EN disclaimers (trailing)", () => {
it.each(EN_TRAILING)("EN trailing '%s' -> vuoto", (input, _expected) => {
const result = stripDisclaimers(input as string);
expect(result).toBe("");
});
it.each(REAL_RESPONSES)("risposta mista: rimane solo parte utile", (input, expected) => {
const result = stripDisclaimers(input as string);
expect(result).toBe(expected as string);
});
it("N7-1: non tocca frasi IT esistenti", () => {
const it_input = "La temperatura oggi e' 22 gradi.\nTuttavia ti consiglio di verificare l'app meteo.";
const result = stripDisclaimers(it_input);
expect(result).toBe("La temperatura oggi e' 22 gradi.");
});
it("N7-2: 'As an AI company' non viene strippato", () => {
const result = stripDisclaimers("As an AI company, OpenAI ha rilasciato molti modelli.");
expect(result).toContain("OpenAI");
});
});