Privacy before the prompt: three of our own models for the GDPR.

Before a prompt reaches an external model, three of our own models check it in the privacy layer: names and addresses, people without a name, special categories under Art. 9 and 10. On our own hardware in Austria, in milliseconds.

Measured against large models and established tools

Art. 4 GDPR: people, companies, addresses

blind set: 120 texts, 695 values

The basic form of personal data: names of people and companies, and addresses. The hard cases are lower-case names in chats, initials, names in tables and names that are also ordinary words. Measured: how many marked values are found and how many hits are correct.

SystemTypevalues found ↑precision ↑Time per text ↓
ALLSmartArt4 0.3Bown model own model 94.4%656/695 · 92.4–95.9%94.4%671/711 · 92.4–95.8%≈ 41 ms
GLiNERopen source open source 86.6%602/695 · 83.9–88.9%85.3%628/736 · 82.6–87.7%≈ 58 ms

Clearly ahead of GLiNER on both values; the intervals do not overlap. GLiNER configured as it ran live with us until 1 Nov 2026: urchade/gliner_multi-v2.1, threshold 0.5, with the same regex and secrets stages in front.

Art. 4 GDPR, indirect: identifiable without a name

blind set 2: 113 texts with an identifiable person, 112 harmless

A text is personal data even without a name. "The mayor of Neukirchen" or "the only midwife in town" point to exactly one person. Measured: how often the person is still identifiable after replacement and how often harmless texts are changed unnecessarily.

SystemTypestill identifiable afterwards ↓false alarms ↓Time per text ↓
ALLSmartArt4i 0.3Bown model own model 8.8%10/113 · 4.9–15.5%2.7%3/112 · 0.9–7.6%≈ 15 ms
Qwen 3.6 35Bopen weights open weights 11.5%13/113 · 6.8–18.7%1.8%2/112 · 0.5–6.3%≈ 75 ms

As good as Qwen 3.6 35B: both differences are within the measurement uncertainty. ALLSmartArt4i is about five times faster in the median (15 ms against 75 ms added by the Qwen check) and above all steady: with Qwen, one request in twenty took 2.7 s or more extra.

Art. 9 and 10 GDPR: special categories and criminal offences

blind set 5: 151 sensitive, 149 harmless texts

Art. 9 GDPR protects some information particularly strictly: health, racial or ethnic origin, political opinions, religious or philosophical beliefs, trade union membership, sex life and sexual orientation, genetic and biometric data. Criminal convictions and offences are covered separately by Art. 10; the model detects both, even when they appear only indirectly, for example through a medication or a church office. Measured: how many sensitive texts are detected and how many hits are actually sensitive (precision).

SystemTypesensitive texts found ↑precision ↑Time per text ↓
ALLSmartArt9-10 4.2B + 0.3Bown model own model 97.4%147/151 · 93.4–99.0%95.5%147/154 · 90.9–97.8%≈ 90 ms
Clef 27Bopen weights open weights 92.1%139/151 · 86.6–95.4%98.6%139/141 · 95.0–99.6%≈ 3.1 s
Clef Flash 9Bopen weights open weights 92.1%139/151 · 86.6–95.4%90.3%139/154 · 84.6–94.0%≈ 0.9 s
Jev (TypeSafe)cloud API, commercial cloud API, commercial 97.4%147/151 · 93.4–99.0%87.5%147/168 · 81.6–91.7%≈ 190 ms

Paired comparisons on the same 300 texts: ALLSmartArt9-10 finds significantly more sensitive texts than Clef 27B and Clef Flash (p ≈ 0.02 each) and raises significantly fewer false alarms than Clef Flash (p ≈ 0.04) and Jev (p ≈ 0.001). Jev finds as many sensitive texts. Clef 27B has the fewest false alarms; the difference to ALLSmartArt9-10 is not significant (p ≈ 0.06).

Blind set: test texts written and labelled to our definitions by a separate agent that knows neither the model nor the training data, and none of its texts was ever used in training. Each task measured on the same blind set; below each value the case count and the 95% interval (Wilson). ↑ higher is better, ↓ lower is better. "tbd": measurement to follow, Jev (TypeSafe) is a commercial cloud service, measured through its public API; its time includes the network round trip. All other times on our own hardware (NVIDIA GB10), Clef in Ollama.

ALLSmartArt4

Art. 4 Nr. 1 DSGVO · v3

Detects people, companies and addresses.

Including the cases where general-purpose recognisers fail: lower-case names in chats, initials, names in tables and CSV, names that are also words, names from every language area. Roles, departments, rooms and code identifiers stay untouched. A place counts only when it belongs to a person.

BasemmBERT
Parameters0.3B
Duration≈ 41 ms per request
In the gatewayevery level from mask
people found
97.4 %81.3 %
all values found
94.4 %86.6 %
Precision
94.4 %85.3 %

Measured on: Blind set: 120 texts with 695 marked values, German and English. Before: GLiNER.

Example

hi tom, the delivery goes to Rosseggerweg 7, 4553 Schlierbach.
hi <<PERSON_1>>, the delivery goes to <<LOC_1>>, <<LOC_2>>.

Limits

  • A place next to a person is sometimes taken for an address.
  • Street names without a house number occasionally cause false alarms.

ALLSmartArt4i

Art. 4 Nr. 1 DSGVO, indirekt · v2

Finds people who are identifiable without a name.

A role in a place, an office, a unique description, a chain of small attributes: "the mayor of Neukirchen", "the only midwife in town". The model replaces the whole passage, not just the place name. It replaced the check by a large language model.

BasemmBERT
Parameters0.3B
Duration≈ 15 ms per text
In the gatewaystrict level
person still identifiable afterwards
9 %12 %
false alarms on harmless texts
2.7 %1.8 %
check duration
15 ms75 ms

Measured on: Independent blind set 2: 240 texts, a third of them long, 39 % English. Identifiability checked independently. Before: check by Qwen 3.6 35B.

Example

Write to the mayor of Neukirchen am Walde that the meeting is postponed.
Write to the <<INDIRECT_1>> that the meeting is postponed.

Limits

  • Chains of several scattered attributes are caught in only about half of the cases.

ALLSmartArt9-10

Art. 9 / Art. 10 DSGVO · v3.1

Detects special categories of personal data and finds the sensitive passages.

Health, racial or ethnic origin, political opinion, religion, trade union membership, genetics, biometrics, sex life and criminal offences, including when they are only revealed indirectly: dialysis, strike pay, an electronic ankle tag, a medication without a diagnosis. A classifier scores the text, a second model finds the words we replace.

BaseQwen3.5-4B (LoRA) + mmBERT
Parameters4.2B + 0.3B
Duration≈ 90 ms per section
In the gatewaySpecial-category levels flag, mask, block
sensitive texts found
97.3 %98.7 %
false alarms on harmless texts
4.0 %18.0 %
Precision
96.1 %84.6 %

Measured on: Blind set 4: 300 texts, 150 sensitive and 150 harmless, 105 of them hard counterexamples. Before: our version 2.

Example

Mrs Berger is only available half days since her chemo.
<<PERSON_1>> is only available half days <<PRIVACY_1>>.

Limits

  • Clerical offices in short sentences are still missed.
  • Masking removes which illness, but not always that there is one: "since her <<PRIVACY_1>>" still reveals something. The re-check then replaces the whole sentence or blocks. For destinations outside the EU, blocking remains the safe level.
Open weights

Hugging Face · Apache 2.0

The three models are on Hugging Face under Apache 2.0. For licensing reasons they are not the same weights as here: they are trained separately, only on data that permits open distribution, and come close to the versions here. ALLSmartArt4 and ALLSmartArt4i are fast on a CPU too (≈ 25 ms for 30 words).

Versions

Each of the three models went through several versions before going live; the public versions were trained separately on top. Each model measured on one blind set.

ALLSmartArt9-10

blind set 4: 150 sensitive, 150 harmless texts
VersionDateWhat changedsensitive foundfalse alarmsprecision
v2 31.10.more training data, labelling rule based on the GDPR and case law 148/15027/15084.6 %
v3 01.11.harmless counterparts sharpened, against false alarms 143/1504/15097.3 %
v3.1 live 01.11.targeted cases: clerical offices, religious holidays, mandates, ethnic minorities, female partners 146/1506/15096.1 %

Before that, two small models and a first version with 4 bn parameters, measured on earlier sets. The topics of v3.1 were derived from errors on blind set 4; it was therefore also measured on the new blind set 5: 147/151 found, 7/149 false alarms.

ALLSmartArt4i

blind set 2: 174 passages, 112 harmless texts
VersionDateWhat changedpassages foundprecisionharmless changed
v1 01.11.first version 79 %97 %2/112
v2 01.11.additional data on roles in context 87 %96 %5/112
v2 + Filter live 01.11.single lower-case words dropped 87 %98 %3/112

ALLSmartArt4

blind set: 120 texts, 695 values
VersionDateWhat changedvalues foundprecision
GLiNER starting point, live until 1 Nov 86.6 %85.3 %
v1 01.11.people and companies; addresses still missing 75.3 %97.8 %
v2 01.11.address type added 94.0 %96.0 %
v3 live 01.11.rule for places of residence, targeted additional data 94.4 %94.4 %

v3 finds more than v2 but raises slightly more false alarms.

How the three models work together

In the gateway the models run one after another before a prompt leaves the house. First, fixed rules find secrets such as keys and passwords as well as phone numbers, IBANs and similar patterns. ALLSmartArt4 finds names of people and companies as well as addresses. ALLSmartArt4i finds people who are identifiable without a name. ALLSmartArt9-10 checks whether the text touches special categories under Art. 9 or criminal offences under Art. 10, and finds the sensitive passages.

Every finding is replaced by a placeholder such as <<PERSON_1>>. If a model fails, the request is rejected instead of being passed on unchecked. If you need the names back in the reply, you only get them at the pseudonymize level, and only within your own gateway.

Which level for what

  1. 1. maskmask

    For most requests to external models: names, companies, addresses and identifiers are replaced, with no way back. The external model never sees who it is about.

  2. 2. pseudonymizepseudonymize

    When the reply needs the real names again, for example letters or summaries. The mapping stays in the gateway and is restored in the reply.

  3. 3. strictstrict

    For sensitive areas such as HR, healthcare organisations or associations: people who are identifiable without a name are replaced as well, for example "the chairman of the music society".

  4. 4. Special categoriesSpecial categories

    Flag only reports, mask replaces the sensitive passages, block rejects the request. For most applications we recommend mask; block where such data must not leave at all.

All models run on our own hardware in Austria; the three of the privacy layer together in about 10 GB of GPU memory.