/** * 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"); }); });