README / README.md
admin-promptshield's picture
Org card
105a1f2 verified
|
Raw History Blame Contribute Delete
1.76 kB
---
title: promptshield
sdk: static
pinned: false
license: mit
short_description: Document anonymization that runs on your device
---
# promptShield
Document anonymization that never uploads your documents.
We build an offline PII detection and redaction tool for contracts, financial
statements and medical records. The desktop app runs a local engine; the web app
runs the **entire pipeline in the browser** β€” PDF parsing, OCR, entity detection
and redaction β€” so a document never leaves the device it was opened on.
That constraint is why we publish here. Running detection client-side makes model
size a product decision: every megabyte is a first-visit download, paid by the
user before they have seen anything work.
## Models
- **[bert-base-multilingual-cased-ner-hrl-latin](https://huggingface.co/promptshield/bert-base-multilingual-cased-ner-hrl-latin)**
β€” Davlan's multilingual NER model with the vocabulary a Latin-script
deployment can never tokenize removed. **178.5 MB β†’ 139.6 MB with provably
identical output**: 0 entity differences across 2,219 entities, max logit
delta 0.0000000000. Not a distillation β€” no encoder weight is touched.
## The idea, if you only read one thing
In `bert-base-multilingual-cased`, the 119,547-token embedding table is **~92 MB
of the 178 MB file** β€” more than half the model. Most deployments ship a handful
of the 104 languages it covers and download the rest anyway. Dropping the
unreachable rows is exact, not approximate: the embedding is per-tensor
quantized and read by a `Gather`, so surviving rows keep their values *and* their
dequantization.
Verified by comparing raw logits, not entity lists β€” those can agree by luck.
πŸ”— [promptshield.ca](https://promptshield.ca)