You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-`OpenMed/privacy-filter-multilingual-mlx-8bit` — MLX 8-bit quantized (Apple Silicon and OpenMedKit demos).
18
+
These artifacts use the OpenAI Privacy Filter architecture and officially support 16 languages through the OpenMed multilingual PII corpus.
19
+
-**Python MLX routing for multilingual Privacy Filter artifacts**:
20
+
-`_MLX_MODEL_MAP` entries for the full and 8-bit multilingual MLX repo IDs.
21
+
-`privacy-filter-multilingual` and `multilingual-privacy-filter` MLX family aliases, both resolving to the existing OpenAI Privacy Filter model class and BIOES decoder.
22
+
- Family-aware Torch fallback so multilingual MLX model names substitute `OpenMed/privacy-filter-multilingual` on non-MLX hosts instead of the OpenAI baseline.
23
+
-**Multilingual Privacy Filter Studio** in `examples/privacy_filter_multilingual_studio/`, a web demo comparing the OpenAI baseline, OpenAI Nemotron Privacy Filter, and OpenMed Multilingual Privacy Filter with English, French, and Arabic examples.
24
+
-**OpenMed Scan Demo multilingual mode** with `OpenMed/privacy-filter-multilingual-mlx-8bit`, a three-engine picker, EN/FR/AR sample buttons, and new French/Arabic scanned demo documents for screenshot-ready flows.
25
+
-**Release notes** for v1.4.0 in `RELEASE_NOTES_v1.4.0.md`.
26
+
27
+
### Changed
28
+
29
+
- Privacy Filter docs and README now describe three Privacy Filter families and label the multilingual model as **OpenMed Multilingual Privacy Filter**.
30
+
- OpenMedKit and demo version surfaces now point at `1.4.0`.
31
+
- The scan demo clears previous annotation windows whenever the language/sample changes, avoiding stale entities from earlier model runs.
32
+
- The multilingual web studio scan animation now performs a single top-to-bottom pass while redacting line by line, matching the stronger visual rhythm of the original Privacy Filter Studio.
33
+
34
+
### Fixed
35
+
36
+
- Improved Swift model-download handling so stale cached 401/404 responses cannot masquerade as `openmed-mlx.json` manifests after a public model becomes available.
37
+
- Tightened stale-result invalidation in iOS and web demo flows so slower previous model runs cannot overwrite a newly selected language/sample.
38
+
39
+
### Tests
40
+
41
+
- Added Python unit coverage for multilingual MLX backend selection, family-aware Torch fallback, and MLX Privacy Filter family dispatch aliases.
42
+
- Rebuilt the OpenMed Scan Demo after the multilingual 8-bit integration.
Copy file name to clipboardExpand all lines: README.md
+19-11Lines changed: 19 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,16 +56,16 @@ Apple Silicon acceleration in Python:
56
56
uv pip install -e ".[mlx]"
57
57
```
58
58
59
-
Swift apps on macOS and iOS use `OpenMedKit`. In `1.2.0`, that means:
59
+
Swift apps on macOS and iOS use `OpenMedKit`. As of `1.4.0`, that means:
60
60
61
-
-**MLX** on Apple Silicon macOS and real iPhone/iPad hardware for supported OpenMed PII, OpenAI Privacy Filter, and experimental GLiNER-family artifacts
61
+
-**MLX** on Apple Silicon macOS and real iPhone/iPad hardware for supported OpenMed PII, OpenAI Privacy Filter, OpenAI Nemotron Privacy Filter, OpenMed Multilingual Privacy Filter, and experimental GLiNER-family artifacts
62
62
-**CoreML** when you already have a bundled Apple model package or want the fallback Apple path
OpenMed ships **two checkpoints**of the OpenAI Privacy Filter architecture — same model code (gpt-oss-style sparse-MoE transformer with local attention, sink tokens, RoPE+YaRN, tiktoken `o200k_base` tokenization), different training data:
265
+
OpenMed ships **three Privacy Filter families**on the OpenAI Privacy Filter architecture — same model code (gpt-oss-style sparse-MoE transformer with local attention, sink tokens, RoPE+YaRN, tiktoken `o200k_base` tokenization), different training data:
| OpenAI Privacy Filter | OpenAI's PII training set |[`openai/privacy-filter`](https://huggingface.co/openai/privacy-filter)|[`OpenMed/privacy-filter-mlx`](https://huggingface.co/OpenMed/privacy-filter-mlx)|[`OpenMed/privacy-filter-mlx-8bit`](https://huggingface.co/OpenMed/privacy-filter-mlx-8bit)|
| OpenAI Privacy Filter | OpenAI's PII training set |[`openai/privacy-filter`](https://huggingface.co/openai/privacy-filter)|[`OpenMed/privacy-filter-mlx`](https://huggingface.co/OpenMed/privacy-filter-mlx)|[`OpenMed/privacy-filter-mlx-8bit`](https://huggingface.co/OpenMed/privacy-filter-mlx-8bit)|
| OpenMed Multilingual Privacy Filter | OpenMed multilingual PII corpus with official support for 16 languages |[`OpenMed/privacy-filter-multilingual`](https://huggingface.co/OpenMed/privacy-filter-multilingual)|[`OpenMed/privacy-filter-multilingual-mlx`](https://huggingface.co/OpenMed/privacy-filter-multilingual-mlx)|[`OpenMed/privacy-filter-multilingual-mlx-8bit`](https://huggingface.co/OpenMed/privacy-filter-multilingual-mlx-8bit)|
271
272
272
273
All model IDs above route through the **same**`extract_pii()` / `deidentify()` API — only the `model_name=` argument changes.
273
274
275
+
The MLX artifacts above use the OpenMed MLX artifact layout consumed by [OpenMedKit](swift/OpenMedKit) for native macOS, iOS, and iPadOS apps.
276
+
274
277
#### Install
275
278
276
279
The PyTorch path runs anywhere (Linux, macOS, Windows; CPU or CUDA):
@@ -329,6 +336,7 @@ The MLX artifact names work everywhere — on a non-Apple-Silicon host (or anywh
329
336
330
337
-`OpenMed/privacy-filter-mlx*` ⇒ falls back to `openai/privacy-filter`
331
338
-`OpenMed/privacy-filter-nemotron-mlx*` ⇒ falls back to `OpenMed/privacy-filter-nemotron`
339
+
-`OpenMed/privacy-filter-multilingual-mlx*` ⇒ falls back to `OpenMed/privacy-filter-multilingual`
332
340
333
341
So your code can ship an MLX model name and run on any host without changes — Apple Silicon users get MLX speed, everyone else gets the same family's PyTorch checkpoint.
OpenMed v1.4.0 is the multilingual Privacy Filter release.
4
+
5
+
This release brings the **OpenMed Multilingual Privacy Filter** into the main OpenMed ecosystem across Python, MLX, OpenMedKit, the iOS Scan Demo, and the web demo experience. The new family officially supports 16 languages and ships in PyTorch, MLX full-precision, and MLX 8-bit forms.
6
+
7
+
The headline: developers can now use the same `extract_pii()` / `deidentify()` API for the OpenAI baseline, OpenAI Nemotron Privacy Filter, and OpenMed Multilingual Privacy Filter, while Apple demos can showcase all three model choices without changing application code.
8
+
9
+
## Highlights
10
+
11
+
- Added the OpenMed Multilingual Privacy Filter model family:
12
+
-`OpenMed/privacy-filter-multilingual`
13
+
-`OpenMed/privacy-filter-multilingual-mlx`
14
+
-`OpenMed/privacy-filter-multilingual-mlx-8bit`
15
+
- Added Python MLX routing for the multilingual full and 8-bit artifacts.
16
+
- Added family-aware fallback so multilingual MLX names resolve to the multilingual PyTorch checkpoint on non-MLX hosts.
17
+
- Added MLX family aliases for multilingual Privacy Filter artifacts that reuse the existing OpenAI Privacy Filter runtime and BIOES decoder.
18
+
- Updated the OpenMed Scan Demo with the 8-bit multilingual model, a clearer three-model picker, and EN/FR/AR sample buttons.
19
+
- Added French and Arabic scanned demo documents for screenshot-ready multilingual flows.
20
+
- Added a multilingual web studio that compares the OpenAI baseline, OpenAI Nemotron Privacy Filter, and OpenMed Multilingual Privacy Filter.
21
+
- Updated README, anonymization docs, MLX docs, Swift docs, CHANGELOG, and version surfaces for `1.4.0`.
22
+
23
+
## Privacy Filter Families
24
+
25
+
OpenMed now documents and routes three Privacy Filter families:
All three families use the OpenAI Privacy Filter architecture. The multilingual family uses OpenMed multilingual PII training data and officially supports 16 languages.
34
+
35
+
## Python Usage
36
+
37
+
The public API stays the same:
38
+
39
+
```python
40
+
from openmed import extract_pii, deidentify
41
+
42
+
text ="Patient Marie Dubois, nee le 14/03/1982, email marie.dubois@example.fr."
On Apple Silicon with MLX available, the MLX artifact runs through `PrivacyFilterMLXPipeline`. On other hosts, OpenMed substitutes the matching PyTorch checkpoint and emits a one-time warning:
The iOS Scan Demo now presents three privacy engines cleanly:
67
+
68
+
- OpenMed PII
69
+
- OpenAI Nemotron Privacy Filter
70
+
- OpenMed Multilingual Privacy Filter
71
+
72
+
The multilingual path uses `OpenMed/privacy-filter-multilingual-mlx-8bit` so the demo stays aligned with the 8-bit Apple artifact strategy. The sample controls now use compact `EN`, `FR`, and `AR` buttons, and switching language/sample clears previous annotations before the next run starts.
73
+
74
+
The multilingual web studio now uses a single top-to-bottom scan pass and redacts line by line during that pass, matching the original Privacy Filter Studio demo feel without looping the scan effect.
75
+
76
+
## Upgrade Notes
77
+
78
+
- The package version is now `1.4.0`.
79
+
- Swift demo marketing versions are now `1.4.0`.
80
+
-`OpenMed/privacy-filter-multilingual-mlx` and `OpenMed/privacy-filter-multilingual-mlx-8bit` are first-class model names in the MLX routing table.
81
+
- The multilingual MLX artifacts must include a valid `openmed-mlx.json`; stale cached HTTP error bodies are no longer treated as manifests by the scan demo downloader.
82
+
83
+
## Validation
84
+
85
+
This release adds targeted unit coverage for multilingual Privacy Filter routing, MLX family alias dispatch, and family-aware fallback behavior. The OpenMed Scan Demo was also rebuilt after the multilingual 8-bit integration.
Copy file name to clipboardExpand all lines: docs/examples.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,9 +24,9 @@ Run them with VS Code, Jupyter, or Google Colab—each relies on the same `uv pi
24
24
25
25
## Apple Silicon & Swift recipes
26
26
27
-
OpenMed `1.2.0`adds release-critical Apple entry points:
27
+
OpenMed `1.4.0`includes release-critical Apple entry points:
28
28
29
-
-[MLX Backend](./mlx-backend.md) for Python on Apple Silicon Macs, including Privacy Filter and experimental GLiNER-family artifacts
29
+
-[MLX Backend](./mlx-backend.md) for Python on Apple Silicon Macs, including Privacy Filter, OpenMed Multilingual Privacy Filter, and experimental GLiNER-family artifacts
30
30
-[OpenMedKit (Swift Package)](./swift-openmedkit.md) for macOS, iOS, and iPadOS apps
0 commit comments