[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-84158":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":40,"readmeContent":41,"aiSummary":9,"trendingCount":16,"starSnapshotCount":16,"syncStatus":42,"lastSyncTime":43,"discoverSource":44},84158,"openmed","maziyarpanahi\u002Fopenmed","maziyarpanahi","open-source healthcare ai",null,"https:\u002F\u002Fgithub.com\u002Fmaziyarpanahi\u002Fopenmed","Python",2232,241,21,67,0,501,665,1667,106.15,false,"main",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"healthcare","llm","bert","deepseek","on-device","on-premise","qwen","sovereign-ai","mlx","swift","ios","swift-package","swiftui","ner","pii","pii-detection","2026-06-12 04:01:43","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"docs\u002Fbrand\u002Fopenmed-mascot-lockup.png\" alt=\"OpenMed — local-first healthcare AI\" width=\"400\" \u002F>\n\n\u003Ch3>Local-first healthcare AI that never leaves the device\u003C\u002Fh3>\n\n\u003Cp>\u003Cb>Turn clinical text into structured insight with one line of code.\u003C\u002Fb>\u003Cbr\u002F>\nEntity extraction, PII de-identification, and 1,000+ specialized medical models that run entirely on\nyour own hardware — from a one-liner in Python to a native Swift app on iPhone, powered by Apple MLX.\nNo cloud. No vendor lock-in. No patient data leaving your network.\u003C\u002Fp>\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenmed\u002F\">\u003Cimg alt=\"PyPI\" src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fopenmed?style=for-the-badge&label=PyPI&logo=pypi&logoColor=white&color=0D6E6E\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\">\u003Cimg alt=\"Python\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.10+-128787?style=for-the-badge&logo=python&logoColor=white\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002FOpenMed\">\u003Cimg alt=\"Models\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%A4%97%20Models-1%2C000+-F5E27A?style=for-the-badge&labelColor=0E1116\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2508.01630\">\u003Cimg alt=\"arXiv\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2508.01630-C5453A?style=for-the-badge&logo=arxiv&logoColor=white\">\u003C\u002Fa>\n  \u003Ca href=\"LICENSE\">\u003Cimg alt=\"License\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache_2.0-0A5656?style=for-the-badge\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziyarpanahi\u002Fopenmed\u002Fstargazers\">\u003Cimg alt=\"Stars\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fmaziyarpanahi\u002Fopenmed?style=for-the-badge&logo=github&logoColor=0E1116&color=F5E27A&labelColor=0E1116\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp>\n  \u003Ca href=\"swift\u002FOpenMedKit\">\u003Cimg alt=\"Swift — OpenMedKit\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-OpenMedKit-0D6E6E?style=for-the-badge&logo=swift&logoColor=white\">\u003C\u002Fa>\n  \u003Ca href=\"docs\u002Fmlx-backend.md\">\u003Cimg alt=\"Apple Silicon — MLX\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FApple_Silicon-MLX-0E1116?style=for-the-badge&logo=apple&logoColor=white\">\u003C\u002Fa>\n  \u003Ca href=\"docs\u002Fswift-openmedkit.md\">\u003Cimg alt=\"Platforms\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRuns_on-iOS,_iPadOS,_macOS-1C2128?style=for-the-badge&logo=apple&logoColor=white\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopenmed.life\u002Fdocs\">\u003Cimg alt=\"Docs\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocs-openmed.life-128787?style=for-the-badge&logo=readthedocs&logoColor=white\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp>\n  \u003Cb>1,000+ models\u003C\u002Fb> &nbsp;·&nbsp; \u003Cb>12 languages\u003C\u002Fb> &nbsp;·&nbsp; \u003Cb>247 PII checkpoints\u003C\u002Fb> &nbsp;·&nbsp; \u003Cb>100% on-device\u003C\u002Fb> &nbsp;·&nbsp; \u003Cb>Apache-2.0\u003C\u002Fb>\n\u003C\u002Fp>\n\n\u003Cp>\n  \u003Cb>English\u003C\u002Fb> ·\n  \u003Ca href=\"README.zh-CN.md\">简体中文\u003C\u002Fa> ·\n  \u003Ca href=\"README.es.md\">Español\u003C\u002Fa> ·\n  \u003Ca href=\"README.fr.md\">Français\u003C\u002Fa> ·\n  \u003Ca href=\"README.de.md\">Deutsch\u003C\u002Fa> ·\n  \u003Ca href=\"README.it.md\">Italiano\u003C\u002Fa> ·\n  \u003Ca href=\"README.pt.md\">Português\u003C\u002Fa> ·\n  \u003Ca href=\"README.nl.md\">Nederlands\u003C\u002Fa> ·\n  \u003Ca href=\"README.ar.md\">العربية\u003C\u002Fa> ·\n  \u003Ca href=\"README.hi.md\">हिन्दी\u003C\u002Fa> ·\n  \u003Ca href=\"README.te.md\">తెలుగు\u003C\u002Fa> ·\n  \u003Ca href=\"README.ja.md\">日本語\u003C\u002Fa> ·\n  \u003Ca href=\"README.tr.md\">Türkçe\u003C\u002Fa> ·\n  \u003Ca href=\"README.fa.md\">فارسی\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003C\u002Fdiv>\n\n---\n\n## See it in action\n\nOpenMed runs **entirely on the device** — clinical text never leaves it. Here it is on iPhone, fully offline:\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"docs\u002Fbrand\u002Fopenmed-ios-scan.png\" alt=\"OpenMed Scan on iPhone — on-device PII de-identification and clinical extraction via OpenMedKit\" width=\"840\" \u002F>\n  \u003Cbr\u002F>\n  \u003Csub>\u003Cb>On iPhone via \u003Ca href=\"swift\u002FOpenMedKit\">OpenMedKit\u003C\u002Fa>\u003C\u002Fb> — scan a clinical note, de-identify it, and extract clinical signals, all locally with Apple MLX. Nothing is uploaded.\u003C\u002Fsub>\n\u003C\u002Fdiv>\n\n\u003Cbr\u002F>\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"docs\u002Fbrand\u002Fopenmed-pii-demo.gif\" alt=\"OpenMed redacting PII from a clinical discharge document in real time\" width=\"760\" \u002F>\n  \u003Cbr\u002F>\n  \u003Csub>\u003Cb>Real-time PII de-identification\u003C\u002Fb> — the Nemotron Privacy Filter redacting names, addresses, IDs, and billing data from a clinical discharge packet, entirely on-device. \u003Ci>(All values shown are synthetic.)\u003C\u002Fi>\u003C\u002Fsub>\n\u003C\u002Fdiv>\n\n---\n\n## 30-second example\n\n```python\nfrom openmed import analyze_text\n\nresult = analyze_text(\n    \"Patient started on imatinib for chronic myeloid leukemia.\",\n    model_name=\"disease_detection_superclinical\",\n)\n\nfor entity in result.entities:\n    print(f\"{entity.label:\u003C12} {entity.text:\u003C28} {entity.confidence:.2f}\")\n# DISEASE      chronic myeloid leukemia     0.98\n# DRUG         imatinib                     0.95\n```\n\nA state-of-the-art clinical NER model running locally — no API key, no network call.\n\n---\n\n## Why OpenMed?\n\n|                                       |       **OpenMed**        |   Cloud medical APIs   |\n| ------------------------------------- | :----------------------: | :--------------------: |\n| Runs on your device \u002F servers         |            ✅            |           ❌           |\n| Patient data leaves your network      |        **Never**         |   Sent to the vendor   |\n| Cost                                  |    Free & open-source    |    Per-call pricing    |\n| Specialized medical models            |          1,000+          |        Limited         |\n| Languages                             |           12+            |         Varies         |\n| Offline \u002F air-gapped                  |            ✅            |           ❌           |\n| Apple Silicon (MLX) acceleration      |            ✅            |          n\u002Fa           |\n| Native iOS \u002F macOS apps               |   ✅ via OpenMedKit      |           ❌           |\n| Vendor lock-in                        |    None — Apache-2.0     |          Yes           |\n\n- **Specialized models** — 1,000+ curated biomedical & clinical models, many outperforming proprietary stacks.\n- **HIPAA-aware de-identification** — all 18 Safe Harbor identifiers, smart entity merging, format-preserving fakes.\n- **Runs everywhere** — CPU, CUDA, Apple Silicon (MLX), and natively in iOS\u002FmacOS apps via OpenMedKit.\n- **One-line deployment** — Python API, Dockerized REST service, or batch pipelines.\n- **Zero lock-in** — Apache-2.0, your infrastructure, your data.\n\n---\n\n## On-device on Apple — Swift, MLX & iOS\n\nOpenMed is built to run where your data already lives. On Apple hardware it accelerates with **MLX**,\nand it ships straight into iPhone, iPad, and Mac apps through **[OpenMedKit](swift\u002FOpenMedKit)** — so\nPII detection and clinical extraction happen fully offline, on the device.\n\n```swift\n\u002F\u002F Add OpenMedKit to your app\ndependencies: [\n    .package(url: \"https:\u002F\u002Fgithub.com\u002Fmaziyarpanahi\u002Fopenmed.git\", from: \"1.5.5\"),\n]\n```\n\n- **MLX runtime** for PII token classification, the Privacy Filter family, and experimental GLiNER-family zero-shot tasks — with a CoreML fallback path.\n- **One model name, every platform** — MLX model names automatically fall back to the matching PyTorch checkpoint on non-Apple hardware.\n- **Python on Apple Silicon** too: `pip install \"openmed[mlx]\"`.\n\nGuides: [MLX backend](docs\u002Fmlx-backend.md) · [OpenMedKit (Swift)](docs\u002Fswift-openmedkit.md) · [CoreML export](docs\u002Fcoreml-export.md)\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"docs\u002Fbrand\u002Fopenmed-mlx-speedup.png\" alt=\"MLX vs CPU latency on Apple Silicon — 24 to 33 times faster\" width=\"840\" \u002F>\n  \u003Cbr\u002F>\n  \u003Csub>\u003Cb>MLX on Apple Silicon: 24–33× faster than CPU PyTorch\u003C\u002Fb> for the Privacy Filter — median latency per inference step, lower is better.\u003C\u002Fsub>\n\u003C\u002Fdiv>\n\n---\n\n## How it works\n\n```mermaid\nflowchart LR\n    A[\"Clinical text\"] --> B[\"OpenMed\u003Cbr\u002F>(100% on-device)\"]\n    B --> C[\"Medical entities\"]\n    B --> D[\"PII detected\"]\n    B --> E[\"De-identified text\"]\n    style B fill:#0D6E6E,stroke:#0A5656,stroke-width:2px,color:#ffffff\n    style C fill:#D6EBEB,stroke:#0D6E6E,color:#0E1116\n    style D fill:#F7DCD8,stroke:#C5453A,color:#0E1116\n    style E fill:#F5E27A,stroke:#A9A088,color:#0E1116\n```\n\n---\n\n## Quick start\n\n```bash\n# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)\npip install \"openmed[hf]\"\n\n# Add the REST service\npip install \"openmed[hf,service]\"\n\n# Apple Silicon acceleration (MLX)\npip install \"openmed[mlx]\"\n```\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"33%\" valign=\"top\">\n\n**Python API**\n\n```python\nfrom openmed import analyze_text\n\nanalyze_text(\n  \"Patient received 75mg \"\n  \"clopidogrel for NSTEMI.\",\n  model_name=\n  \"pharma_detection_superclinical\",\n)\n```\n\n\u003C\u002Ftd>\n\u003Ctd width=\"33%\" valign=\"top\">\n\n**REST service**\n\n```bash\nuvicorn openmed.service.app:app \\\n  --host 0.0.0.0 --port 8080\n```\n\n`GET \u002Fhealth`\n`POST \u002Fanalyze`\n`POST \u002Fpii\u002Fextract`\n`POST \u002Fpii\u002Fdeidentify`\n\n\u003C\u002Ftd>\n\u003Ctd width=\"33%\" valign=\"top\">\n\n**Batch**\n\n```python\nfrom openmed import BatchProcessor\n\np = BatchProcessor(\n  model_name=\n  \"disease_detection_superclinical\",\n  group_entities=True,\n)\np.process_texts([...])\n```\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n**Offline \u002F air-gapped?** Point `model_name` (or `model_id`) at a local directory and OpenMed loads it without contacting the Hugging Face Hub:\n\n```python\nfrom openmed import OpenMedConfig, analyze_text\n\nresult = analyze_text(\n    \"Patient presents with chronic myeloid leukemia and Type 2 diabetes.\",\n    model_id=\".\u002Fmodels\u002FOpenMed-NER-DiseaseDetect-SuperClinical-434M\",\n    config=OpenMedConfig(device=\"cpu\"),\n)\n```\n\n---\n\n## Models\n\nA curated registry of specialized medical NER models — browse the [full catalog](https:\u002F\u002Fopenmed.life\u002Fdocs\u002Fmodel-registry).\n\n| Model | Specialization | Entity types | Size |\n|-------|----------------|--------------|------|\n| `disease_detection_superclinical` | Disease & conditions | DISEASE, CONDITION, DIAGNOSIS | 434M |\n| `pharma_detection_superclinical`  | Drugs & medications  | DRUG, MEDICATION, TREATMENT   | 434M |\n| `pii_superclinical_large`     | PII & de-identification | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |\n| `anatomy_detection_electramed`    | Anatomy & body parts | ANATOMY, ORGAN, BODY_PART     | 109M |\n| `gene_detection_genecorpus`       | Genes & proteins     | GENE, PROTEIN                 | 109M |\n\n---\n\n## Privacy: PII detection & de-identification\n\n```python\nfrom openmed import extract_pii, deidentify\n\ntext = \"Patient: John Doe, DOB: 01\u002F15\u002F1970, SSN: 123-45-6789\"\n\n# Extract PII with smart merging (prevents tokenization fragmentation)\nresult = extract_pii(text, model_name=\"pii_superclinical_large\", use_smart_merging=True)\n\n# De-identify with the method you need\ndeidentify(text, method=\"mask\")     # [NAME], [DATE]\ndeidentify(text, method=\"replace\")  # Faker-backed, locale-aware, format-preserving fakes\ndeidentify(text, method=\"hash\")     # Cryptographic hashing\ndeidentify(text, method=\"shift_dates\", date_shift_days=180)\n```\n\n- **Smart entity merging** keeps `01\u002F15\u002F1970` whole instead of fragmenting it.\n- **Faker-backed obfuscation** with custom clinical-ID providers (CPF, CNPJ, BSN, NIR, Codice Fiscale, NIE, Aadhaar, Steuer-ID, NPI).\n- **HIPAA**: all 18 Safe Harbor identifiers, configurable confidence thresholds.\n- **Batch PII** (v1.5.5): extract or de-identify across many documents with `BatchProcessor(operation=\"extract_pii\" | \"deidentify\", batch_size=16)`.\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"docs\u002Fassets\u002Fpii-batch-benchmark.png\" alt=\"Batch PII processing throughput — up to 3.3x on CPU and 2.2x on MLX\" width=\"840\" \u002F>\n  \u003Cbr\u002F>\n  \u003Csub>\u003Cb>Batch processing\u003C\u002Fb> — up to \u003Cb>3.3×\u003C\u002Fb> higher throughput on CPU and \u003Cb>2.2×\u003C\u002Fb> on MLX vs. one document at a time.\u003C\u002Fsub>\n\u003C\u002Fdiv>\n\n[Complete PII notebook](examples\u002Fnotebooks\u002FPII_Detection_Complete_Guide.ipynb) · [Smart merging](docs\u002Fpii-smart-merging.md) · [Anonymization](docs\u002Fanonymization.md)\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Privacy Filter family\u003C\u002Fb> — three model families on the OpenAI Privacy Filter architecture\u003C\u002Fsummary>\n\n\u003Cbr\u002F>\n\nSame model code (gpt-oss-style sparse-MoE transformer with local attention, sink tokens, RoPE+YaRN, tiktoken `o200k_base`), different training data. All route through the **same** `extract_pii()` \u002F `deidentify()` API — only `model_name=` changes.\n\n| Variant | PyTorch (CPU + CUDA) | MLX (Apple Silicon) | MLX 8-bit |\n| --- | --- | --- | --- |\n| **OpenAI Privacy Filter** | [`openai\u002Fprivacy-filter`](https:\u002F\u002Fhuggingface.co\u002Fopenai\u002Fprivacy-filter) | [`OpenMed\u002Fprivacy-filter-mlx`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-mlx) | [`…-mlx-8bit`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-mlx-8bit) |\n| **Nemotron-PII fine-tune** | [`OpenMed\u002Fprivacy-filter-nemotron`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-nemotron) | [`…-nemotron-mlx`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-nemotron-mlx) | [`…-nemotron-mlx-8bit`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-nemotron-mlx-8bit) |\n| **OpenMed Multilingual** | [`OpenMed\u002Fprivacy-filter-multilingual`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-multilingual) | [`…-multilingual-mlx`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-multilingual-mlx) | [`…-multilingual-mlx-8bit`](https:\u002F\u002Fhuggingface.co\u002FOpenMed\u002Fprivacy-filter-multilingual-mlx-8bit) |\n\n```python\nfrom openmed import extract_pii\n\ntext = \"Patient Sarah Connor (DOB: 03\u002F15\u002F1985) at MRN 4471882.\"\n\nextract_pii(text, model_name=\"openai\u002Fprivacy-filter\")              # PyTorch baseline\nextract_pii(text, model_name=\"OpenMed\u002Fprivacy-filter-nemotron\")    # same code, different weights\nextract_pii(text, model_name=\"OpenMed\u002Fprivacy-filter-mlx\")         # Apple Silicon (MLX)\n```\n\nOn non-Apple-Silicon hosts, MLX model names are automatically substituted with the matching PyTorch checkpoint (with a one-time warning) — ship one model name, run anywhere. See [Privacy Filter architecture & backend routing](docs\u002Fanonymization.md#privacy-filter-family).\n\n\u003C\u002Fdetails>\n\n---\n\n## Multilingual PII (12 languages)\n\nExtraction and de-identification across `en`, `fr`, `de`, `it`, `es`, `nl`, `hi`, `te`, `pt`, `ar`, `ja`, and `tr` — **247 PII checkpoints** total.\n\n```bash\npython -c \"from openmed import extract_pii; print([(e.label, e.text) for e in extract_pii('Dr. Pedro Almeida, CPF: 123.456.789-09, email: pedro@hospital.pt', lang='pt').entities])\"\n```\n\n\u003Cdetails>\n\u003Csummary>Show per-language examples (Portuguese, Dutch, Hindi, Arabic, Japanese, Turkish)\u003C\u002Fsummary>\n\n\u003Cbr\u002F>\n\n```python\nfrom openmed import extract_pii\n\nportuguese = extract_pii(\"Paciente: Pedro Almeida, CPF: 123.456.789-09, telefone: +351 912 345 678\", lang=\"pt\", use_smart_merging=True)\ndutch      = extract_pii(\"Patiënt: Eva de Vries, BSN: 123456782, telefoon: +31 6 12345678\", lang=\"nl\", use_smart_merging=True)\nhindi      = extract_pii(\"रोगी: अनीता शर्मा, फोन: +91 9876543210, पता: नई दिल्ली 110001\", lang=\"hi\", use_smart_merging=True)\narabic     = extract_pii(\"المريضة ليلى حسن، الهاتف +20 10 1234 5678، الرقم القومي 29801011234567.\", lang=\"ar\", use_smart_merging=True)\njapanese   = extract_pii(\"患者 佐藤 花子、電話 +81 90 1234 5678、マイナンバー 1234 5678 9012.\", lang=\"ja\", use_smart_merging=True)\nturkish    = extract_pii(\"Hasta Ayşe Yılmaz, telefon +90 532 123 45 67, TCKN 10000000146.\", lang=\"tr\", use_smart_merging=True)\n\nfor r in (portuguese, dutch, hindi, arabic, japanese, turkish):\n    print([(e.label, e.text) for e in r.entities])\n```\n\n\u003C\u002Fdetails>\n\n---\n\n## REST API\n\nA Docker-friendly FastAPI service with request validation, shared pipeline preload, and unified error envelopes.\n\n```bash\npip install \"openmed[hf,service]\"\nuvicorn openmed.service.app:app --host 0.0.0.0 --port 8080\n\n# or with Docker\ndocker build -t openmed:1.5.5 .\ndocker run --rm -p 8080:8080 -e OPENMED_PROFILE=prod openmed:1.5.5\n```\n\n```bash\ncurl -X POST http:\u002F\u002F127.0.0.1:8080\u002Fpii\u002Fextract \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"text\":\"Paciente: Maria Garcia, DNI: 12345678Z\",\"lang\":\"es\"}'\n```\n\n**Model lifecycle (v1.5.5):** free memory on demand with `GET \u002Fmodels\u002Floaded`, `POST \u002Fmodels\u002Funload`, and a `keep_alive` idle window:\n\n```bash\nOPENMED_SERVICE_KEEP_ALIVE=10m uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080\ncurl -X POST http:\u002F\u002F127.0.0.1:8080\u002Fmodels\u002Funload -H \"Content-Type: application\u002Fjson\" -d '{\"all\":true}'\n```\n\nSee the full [REST service guide](docs\u002Frest-service.md).\n\n---\n\n## Documentation\n\nFull guides at **[openmed.life\u002Fdocs](https:\u002F\u002Fopenmed.life\u002Fdocs\u002F)**.\n\n| | | |\n|---|---|---|\n| [Getting Started](https:\u002F\u002Fopenmed.life\u002Fdocs\u002F) | [Analyze Text](https:\u002F\u002Fopenmed.life\u002Fdocs\u002Fanalyze-text) | [Model Registry](https:\u002F\u002Fopenmed.life\u002Fdocs\u002Fmodel-registry) |\n| [PII Detection Guide](examples\u002Fnotebooks\u002FPII_Detection_Complete_Guide.ipynb) | [Anonymization](docs\u002Fanonymization.md) | [Batch Processing](https:\u002F\u002Fopenmed.life\u002Fdocs\u002Fbatch-processing) |\n| [Configuration Profiles](https:\u002F\u002Fopenmed.life\u002Fdocs\u002Fprofiles) | [REST Service](docs\u002Frest-service.md) | [MLX Backend](docs\u002Fmlx-backend.md) |\n\n---\n\n## Meet the mascot\n\n\u003Cimg src=\"docs\u002Fbrand\u002Fopenmed-mascot-icon.png\" alt=\"OpenMed mascot\" width=\"104\" align=\"left\" \u002F>\n\nOpenMed's guardian is a fluffy Persian cat styled as a tiny **Avicenna (Ibn Sina)** — the great Persian\nphysician whose *Canon of Medicine* was the world's standard medical text for some 600 years. He keeps\nwatch over the open book of medical knowledge, in a palette built around Persian turquoise (*fīrūza*):\na local-first guardian for your most private data.\n\n\u003Cbr clear=\"left\"\u002F>\n\n---\n\n## Contributing\n\nContributions welcome — bug reports, feature requests, and PRs alike.\n\n- [Open an issue](https:\u002F\u002Fgithub.com\u002Fmaziyarpanahi\u002Fopenmed\u002Fissues)\n- **Translations welcome** — help complete the other-language READMEs linked in the switcher at the top.\n\n---\n\n## Credits\n\nOpenMed builds on excellent open-source work — particular thanks to **OpenAI** (the [Privacy Filter](https:\u002F\u002Fhuggingface.co\u002Fopenai\u002Fprivacy-filter) architecture), **NVIDIA** (the [Nemotron PII dataset](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fnvidia\u002FNemotron-PII-v1)), **Hugging Face** (`transformers` & the model ecosystem), **Apple** ([MLX](https:\u002F\u002Fgithub.com\u002Fml-explore\u002Fmlx)), and the **[Faker](https:\u002F\u002Ffaker.readthedocs.io\u002F)** maintainers.\n\n## License\n\nReleased under the [Apache-2.0 License](LICENSE).\n\n## Citation\n\n```bibtex\n@misc{panahi2025openmedneropensourcedomainadapted,\n      title={OpenMed NER: Open-Source, Domain-Adapted State-of-the-Art Transformers for Biomedical NER Across 12 Public Datasets},\n      author={Maziyar Panahi},\n      year={2025},\n      eprint={2508.01630},\n      archivePrefix={arXiv},\n      primaryClass={cs.CL},\n      url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2508.01630},\n}\n```\n\n---\n\n## Star History\n\nIf OpenMed is useful to you, a star helps others discover it.\n\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#maziyarpanahi\u002Fopenmed&Date\">\n  \u003Cimg src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=maziyarpanahi\u002Fopenmed&type=Date\" alt=\"Star History Chart\" width=\"640\" \u002F>\n\u003C\u002Fa>\n\n---\n\n\u003Cdiv align=\"center\">\n\nBuilt by the OpenMed team\n\n\u003Ca href=\"https:\u002F\u002Fopenmed.life\">Website\u003C\u002Fa> ·\n\u003Ca href=\"https:\u002F\u002Fopenmed.life\u002Fdocs\">Docs\u003C\u002Fa> ·\n\u003Ca href=\"https:\u002F\u002Fx.com\u002Fopenmed_ai\">X \u002F Twitter\u003C\u002Fa> ·\n\u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fopenmed-ai\u002F\">LinkedIn\u003C\u002Fa>\n\n\u003C\u002Fdiv>\n",2,"2026-06-11 04:12:27","trending"]