Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -24,18 +24,31 @@ Labels are multi-label rather than exclusive: `direct_injection`, `indirect_inje
|
|
| 24 |
|
| 25 |
## What changed in this version, and why it is the headline
|
| 26 |
|
| 27 |
-
|
| 28 |
-
architecture
|
| 29 |
-
conversational benign prose only to 18 registers including technical text.
|
| 30 |
|
| 31 |
Measured through the shipped configuration at threshold 0.43:
|
| 32 |
|
| 33 |
-
| |
|
| 34 |
-
|---|---|---|
|
| 35 |
-
| ordinary support questions it fires on | 7 of 12 | **
|
| 36 |
-
| technical identifiers
|
| 37 |
-
|
|
| 38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
The previous model read a bare UUID, a git commit hash, a data URI and a sha256 digest as
|
| 41 |
`jailbreak` or `direct_injection`, and read *"Someone is using my account, how do I lock
|
|
@@ -50,36 +63,35 @@ so an imperative request and a high-entropy identifier were equally out of distr
|
|
| 50 |
|
| 51 |
| label | precision | recall | F1 | FPR |
|
| 52 |
|---|---|---|---|---|
|
| 53 |
-
| `direct_injection` | 0.
|
| 54 |
-
| `indirect_injection` | 0.
|
| 55 |
-
| `jailbreak` | 0.
|
| 56 |
|
| 57 |
-
Mean per-language F1 0.
|
| 58 |
-
0.8367, then `ga` 0.9762 and `cs` 0.9767. Maltese is not in XLM-RoBERTa's pretraining set,
|
| 59 |
and that is a fact about the base model rather than a diagnosis: the same gap in another
|
| 60 |
detector here closed entirely on corpus size alone, so read 0.8367 as a number to improve
|
| 61 |
and not as a ceiling.
|
| 62 |
|
| 63 |
## Corpus
|
| 64 |
|
| 65 |
-
|
| 66 |
-
`gpt-oss:120b`. 26 languages evenly at 1,656 to 1,690 rows each.
|
| 67 |
-
`
|
| 68 |
-
|
| 69 |
|
| 70 |
-
|
| 71 |
wrong script for their language, 22 outside their length band.
|
| 72 |
|
| 73 |
## Known weakness
|
| 74 |
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
instruction override also looks like on the surface.
|
| 79 |
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
|
|
|
| 83 |
|
| 84 |
## Use it at 0.43
|
| 85 |
|
|
@@ -92,7 +104,7 @@ plateau's top without chasing the floor.
|
|
| 92 |
## Export
|
| 93 |
|
| 94 |
INT8 with the Gather-only quantisation recipe. 0 of 300 decisions changed against the fp32
|
| 95 |
-
graph, probability drift p99 0.
|
| 96 |
weight hashes.
|
| 97 |
|
| 98 |
## Licence
|
|
|
|
| 24 |
|
| 25 |
## What changed in this version, and why it is the headline
|
| 26 |
|
| 27 |
+
Three corpora in, the false positives on ordinary customer traffic are gone. Same
|
| 28 |
+
architecture and hyperparameters throughout; only the corpus moved.
|
|
|
|
| 29 |
|
| 30 |
Measured through the shipped configuration at threshold 0.43:
|
| 31 |
|
| 32 |
+
| | v3 | v4 | **v5, this one** |
|
| 33 |
+
|---|---|---|---|
|
| 34 |
+
| ordinary support questions it fires on | 7 of 12 | 1 of 12 | **0 of 12** |
|
| 35 |
+
| technical identifiers, at 0.43 | 4 of 4 | 0 of 4 | 1 of 4 |
|
| 36 |
+
| technical identifiers, at 0.95 | 4 of 4 | 0 of 4 | **0 of 4** |
|
| 37 |
+
| the three canonical attacks | 3 of 3 | 3 of 3 | **3 of 3** |
|
| 38 |
+
| mean per-language F1 | 0.9755 | 0.9855 | **0.9891** |
|
| 39 |
+
| worst language | – | mt 0.8367 | **mt 0.8817** |
|
| 40 |
+
|
| 41 |
+
v5 added one register, `mundane_account_access`, and it lives in the corpus generator's
|
| 42 |
+
shared mundane set so `moderation` and the five single-label classifiers inherit it too. The
|
| 43 |
+
gap it fills was invisible because the three registers already there are all prose *about*
|
| 44 |
+
things in the third person, a password reset notice or an appointment booking. None of them
|
| 45 |
+
was a customer speaking, so "How do I reset my password?" was out of distribution for every
|
| 46 |
+
corpus anchored on them, and two detectors independently learned to treat customers as
|
| 47 |
+
hostile.
|
| 48 |
+
|
| 49 |
+
**It is not a clean sweep, and the card should say so.** A bare UUID reads
|
| 50 |
+
`direct_injection` at 0.944 under v5, clearing 0.43 where v4 had it at zero. It stays below
|
| 51 |
+
0.95. Net across both shapes v5 is ahead and the regression is real.
|
| 52 |
|
| 53 |
The previous model read a bare UUID, a git commit hash, a data URI and a sha256 digest as
|
| 54 |
`jailbreak` or `direct_injection`, and read *"Someone is using my account, how do I lock
|
|
|
|
| 63 |
|
| 64 |
| label | precision | recall | F1 | FPR |
|
| 65 |
|---|---|---|---|---|
|
| 66 |
+
| `direct_injection` | 0.9528 | 0.9957 | 0.9738 | 0.0057 |
|
| 67 |
+
| `indirect_injection` | 0.9709 | 0.9901 | 0.9804 | 0.0021 |
|
| 68 |
+
| `jailbreak` | 0.9367 | 0.9850 | 0.9603 | 0.0077 |
|
| 69 |
|
| 70 |
+
Mean per-language F1 0.9891. Weakest are `mt` 0.8817, then `ga` 0.9762 and `cs` 0.9767. Maltese is not in XLM-RoBERTa's pretraining set,
|
|
|
|
| 71 |
and that is a fact about the base model rather than a diagnosis: the same gap in another
|
| 72 |
detector here closed entirely on corpus size alone, so read 0.8367 as a number to improve
|
| 73 |
and not as a ceiling.
|
| 74 |
|
| 75 |
## Corpus
|
| 76 |
|
| 77 |
+
45,541 examples: 12,285 attacks and 33,256 benign, 27.0 percent attack share, generated with
|
| 78 |
+
`gpt-oss:120b`. 26 languages evenly at 1,656 to 1,690 rows each. 19 registers, including `technical_identifiers` and
|
| 79 |
+
`technical_payload`, and four `mundane_*` registers shared with the other classifiers in
|
| 80 |
+
this family, of which `mundane_account_access` is v5's addition.
|
| 81 |
|
| 82 |
+
276 generated rows were rejected before writing: 127 placeholders, 77 duplicates, 50 in the
|
| 83 |
wrong script for their language, 22 outside their length band.
|
| 84 |
|
| 85 |
## Known weakness
|
| 86 |
|
| 87 |
+
A bare UUID reads `direct_injection` at 0.944, which clears the shipped 0.43 and not 0.95.
|
| 88 |
+
v4 had it at zero, so this is a regression on the technical shape bought alongside a fix to
|
| 89 |
+
the account-access one. Both are corpus properties rather than thresholds.
|
|
|
|
| 90 |
|
| 91 |
+
The account-access failure v4 could not fix is gone: *"Please cancel my subscription."* read
|
| 92 |
+
`direct_injection` at 0.9775 under v4, identical at 0.43 and 0.95 so no threshold reached it.
|
| 93 |
+
Two of 35,025 rows matched that phrasing then; v5 has 1,862 rows in the account-access
|
| 94 |
+
register and 16 carrying that exact phrasing as benign.
|
| 95 |
|
| 96 |
## Use it at 0.43
|
| 97 |
|
|
|
|
| 104 |
## Export
|
| 105 |
|
| 106 |
INT8 with the Gather-only quantisation recipe. 0 of 300 decisions changed against the fp32
|
| 107 |
+
graph, probability drift p99 0.00005, max 0.15393, and the max is one row where the p99 is what the gate reads. `onnx/export_manifest.json` carries the
|
| 108 |
weight hashes.
|
| 109 |
|
| 110 |
## Licence
|