Replace toxicity model with multi-label classifier
This commit is contained in:
parent
803df7feee
commit
1568c787f8
24 changed files with 2581129 additions and 119717 deletions
|
|
@ -1,14 +1,16 @@
|
|||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { applyResult, removeOrphanedPlaceholders, restore } from "../src/content/filter";
|
||||
import { applyResult, removeOrphanedPlaceholders, restore, selectFilterLabel } from "../src/content/filter";
|
||||
import { DEFAULT_SETTINGS } from "../src/shared/types";
|
||||
|
||||
const scores = { toxicity: .91, severe_toxicity: .1, obscene: .3, threat: .2, insult: .8, identity_attack: .1, sexual_explicit: .1 };
|
||||
|
||||
describe("content filtering", () => {
|
||||
afterEach(() => document.body.replaceChildren());
|
||||
|
||||
it("collapses toxic content and restores it", () => {
|
||||
const element = document.createElement("article");
|
||||
document.body.append(element);
|
||||
applyResult(element, { requestId: "1", id: "1", textHash: "x", label: "toxic", probability: .91, navigationId: "n" }, DEFAULT_SETTINGS);
|
||||
applyResult(element, { requestId: "1", id: "1", textHash: "x", scores, navigationId: "n" }, DEFAULT_SETTINGS);
|
||||
expect(element.style.display).toBe("none");
|
||||
expect(document.querySelector("[data-vibeguard-placeholder]")).not.toBeNull();
|
||||
restore(element);
|
||||
|
|
@ -19,13 +21,19 @@ describe("content filtering", () => {
|
|||
it("preserves the original display value when filtering is reconciled repeatedly", () => {
|
||||
const element = document.createElement("article");
|
||||
document.body.append(element);
|
||||
const result = { requestId: "1", id: "1", textHash: "x", label: "toxic" as const, probability: .91, navigationId: "n" };
|
||||
const result = { requestId: "1", id: "1", textHash: "x", scores, navigationId: "n" };
|
||||
applyResult(element, result, DEFAULT_SETTINGS);
|
||||
applyResult(element, result, DEFAULT_SETTINGS);
|
||||
restore(element);
|
||||
expect(element.style.display).toBe("");
|
||||
});
|
||||
|
||||
it("uses the highest enabled category above the threshold", () => {
|
||||
const result = { requestId: "1", id: "1", textHash: "x", scores, navigationId: "n" };
|
||||
expect(selectFilterLabel(result, { ...DEFAULT_SETTINGS, enabledLabels: ["insult", "threat"], threshold: .5 })).toEqual({ label: "insult", probability: .8 });
|
||||
expect(selectFilterLabel(result, { ...DEFAULT_SETTINGS, enabledLabels: [], threshold: .5 })).toBeUndefined();
|
||||
});
|
||||
|
||||
it("removes placeholders no longer paired with the current post element", () => {
|
||||
const stale = document.createElement("div");
|
||||
const orphan = document.createElement("div");
|
||||
|
|
|
|||
Loading…
Reference in a new issue