MCPcopy
hub / github.com/maziyarpanahi/openmed

github.com/maziyarpanahi/openmed @v1.7.0 sqlite

repository ↗ · DeepWiki ↗ · release v1.7.0 ↗
7,767 symbols 28,467 edges 509 files 2,364 documented · 30%
README

OpenMed — yerel öncelikli sağlık yapay zekâsı

Cihazdan asla çıkmayan yerel öncelikli sağlık yapay zekâsı

Klinik metni tek satır kodla yapılandırılmış içgörüye dönüştürün.

Varlık çıkarımı, PII kimliksizleştirme ve tamamen kendi donanımınızda çalışan 1.000'den fazla özelleşmiş tıbbi model — Python'da tek satırdan, Apple MLX destekli iPhone'da yerel bir Swift uygulamasına kadar. Bulut yok. Tedarikçi bağımlılığı yok. Hasta verileri ağınızdan çıkmıyor.

PyPI Python Models arXiv License Stars

Swift — OpenMedKit Apple Silicon — MLX Platforms Docs

1.000+ model  ·  12 dil  ·  247 PII denetim noktası  ·  %100 cihazda  ·  Apache-2.0

English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی


İş başında görün

OpenMed bir klinik taburcu belgesindeki PII'yi gerçek zamanlı kimliksizleştiriyor

Gerçek zamanlı PII kimliksizleştirme — Nemotron Privacy Filter, bir klinik taburcu belgesindeki adları, adresleri, kimlik numaralarını ve fatura verilerini tamamen cihazda maskeliyor. (Gösterilen tüm değerler sentetiktir.)


30 saniyelik örnek

from openmed import analyze_text

result = analyze_text(
    "Patient started on imatinib for chronic myeloid leukemia.",
    model_name="disease_detection_superclinical",
)

for entity in result.entities:
    print(f"{entity.label:<12} {entity.text:<28} {entity.confidence:.2f}")
# DISEASE      chronic myeloid leukemia     0.98
# DRUG         imatinib                     0.95

Yerel olarak çalışan son teknoloji bir klinik NER modeli — API anahtarı yok, ağ çağrısı yok.


Neden OpenMed?

OpenMed Bulut tıbbi API'leri
Cihazınızda/sunucularınızda çalışır
Hasta verileri ağınızdan çıkar Asla Tedarikçiye gönderilir
Maliyet Ücretsiz ve açık kaynak Çağrı başına ücret
Özelleşmiş tıbbi modeller 1.000+ Sınırlı
Diller 12+ Değişken
Çevrimdışı / izole (air-gapped)
Apple Silicon (MLX) hızlandırma yok
Yerel iOS / macOS uygulamaları ✅ OpenMedKit ile
Tedarikçi bağımlılığı Yok — Apache-2.0 Var
  • Özelleşmiş modeller — 1.000'den fazla özenle seçilmiş biyomedikal ve klinik model; birçoğu tescilli çözümleri geride bırakır.
  • HIPAA uyumlu kimliksizleştirme — 18 Safe Harbor tanımlayıcısının tamamı, akıllı varlık birleştirme ve biçimi koruyan sahte değerler.
  • Her yerde çalışır — CPU, CUDA, Apple Silicon (MLX) ve OpenMedKit ile iOS/macOS uygulamalarında yerel olarak.
  • Tek satırda dağıtım — Python API, Docker'lı REST servisi veya toplu işlem hatları.
  • Bağımlılık yok — Apache-2.0, sizin altyapınız, sizin verileriniz.

Cihazda, Apple'da — Swift, MLX ve iOS

OpenMed, verilerinizin zaten bulunduğu yerde çalışmak için tasarlandı. Apple donanımında MLX ile hızlanır ve OpenMedKit aracılığıyla doğrudan iPhone, iPad ve Mac uygulamalarına girer — böylece PII tespiti ve klinik çıkarım tamamen çevrimdışı, cihaz üzerinde gerçekleşir.

// Add OpenMedKit to your app
dependencies: [
    .package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.5.5"),
]
  • MLX çalışma zamanı — PII token sınıflandırması, Privacy Filter ailesi ve deneysel GLiNER ailesi zero-shot görevleri için (CoreML yedek yolu ile).
  • Tek model adı, her platform — Apple olmayan donanımda MLX model adları otomatik olarak ilgili PyTorch denetim noktasına geri döner.
  • Apple Silicon'da Python da: pip install "openmed[mlx]".

Kılavuzlar: MLX arka ucu · OpenMedKit (Swift) · CoreML dışa aktarma


Nasıl çalışır

flowchart LR
    A["Klinik metin"] --> B["OpenMed

(%100 cihazda)"]
    B --> C["Tıbbi varlıklar"]
    B --> D["PII tespit edildi"]
    B --> E["Kimliksizleştirilmiş metin"]
    style B fill:#0D6E6E,stroke:#0A5656,stroke-width:2px,color:#ffffff
    style C fill:#D6EBEB,stroke:#0D6E6E,color:#0E1116
    style D fill:#F7DCD8,stroke:#C5453A,color:#0E1116
    style E fill:#F5E27A,stroke:#A9A088,color:#0E1116

Hızlı başlangıç

# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)
pip install "openmed[hf]"

# Add the REST service
pip install "openmed[hf,service]"

# Apple Silicon acceleration (MLX)
pip install "openmed[mlx]"
**Python API**
from openmed import analyze_text

analyze_text(
  "Patient received 75mg "
  "clopidogrel for NSTEMI.",
  model_name=
  "pharma_detection_superclinical",
)
**REST servisi**
uvicorn openmed.service.app:app \
  --host 0.0.0.0 --port 8080
`GET /health` `POST /analyze` `POST /pii/extract` `POST /pii/deidentify`
**Toplu**
from openmed import BatchProcessor

p = BatchProcessor(
  model_name=
  "disease_detection_superclinical",
  group_entities=True,
)
p.process_texts([...])

Çevrimdışı / izole mi? model_name'i (veya model_id'yi) yerel bir dizine yönlendirin; OpenMed onu Hugging Face Hub'a bağlanmadan yükler:

from openmed import OpenMedConfig, analyze_text

result = analyze_text(
    "Patient presents with chronic myeloid leukemia and Type 2 diabetes.",
    model_id="./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M",
    config=OpenMedConfig(device="cpu"),
)

Modeller

Özelleşmiş tıbbi NER modellerinden oluşan özenle seçilmiş bir kayıt — tam kataloğa göz atın.

Model Uzmanlık Varlık türleri Boyut
disease_detection_superclinical Hastalıklar ve durumlar DISEASE, CONDITION, DIAGNOSIS 434M
pharma_detection_superclinical İlaçlar ve tedaviler DRUG, MEDICATION, TREATMENT 434M
pii_superclinical_large PII ve kimliksizleştirme NAME, DATE, SSN, PHONE, EMAIL, ADDRESS 434M
anatomy_detection_electramed Anatomi ve vücut bölümleri ANATOMY, ORGAN, BODY_PART 109M
gene_detection_genecorpus Genler ve proteinler GENE, PROTEIN 109M

Gizlilik: PII tespiti ve kimliksizleştirme

from openmed import extract_pii, deidentify

text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"

# Extract PII with smart merging (prevents tokenization fragmentation)
result = extract_pii(text, model_name="pii_superclinical_large", use_smart_merging=True)

# De-identify with the method you need
deidentify(text, method="mask")     # [NAME], [DATE]
deidentify(text, method="replace")  # Faker-backed, locale-aware, format-preserving fakes
deidentify(text, method="hash")     # Cryptographic hashing
deidentify(text, method="shift_dates", date_shift_days=180)
  • Akıllı varlık birleştirme, 01/15/1970'i parçalamak yerine bütün tutar.
  • Faker tabanlı gizleme — klinik kimlikler için özel sağlayıcılarla (CPF, CNPJ, BSN, NIR, Codice Fiscale, NIE, Aadhaar, Steuer-ID, NPI).
  • HIPAA: 18 Safe Harbor tanımlayıcısının tamamı, yapılandırılabilir güven eşikleriyle.

Tam PII defteri · Akıllı birleştirme · Anonimleştirme

Privacy Filter ailesi — OpenAI Privacy Filter mimarisi üzerinde üç model ailesi

Model kodu aynıdır (yerel dikkat, sink token'ları, RoPE+YaRN, tiktoken o200k_base tokenizasyonlu gpt-oss tarzı seyrek MoE Transformer); yalnızca eğitim verisi farklıdır. Tümü aynı extract_pii() / deidentify() API'sini kullanır — yalnızca model_name= argümanı değişir.

Varyant PyTorch (CPU + CUDA) MLX (Apple Silicon) MLX 8-bit
OpenAI Privacy Filter openai/privacy-filter OpenMed/privacy-filter-mlx …-mlx-8bit
Nemotron-PII fine-tune OpenMed/privacy-filter-nemotron …-nemotron-mlx …-nemotron-mlx-8bit
OpenMed Multilingual OpenMed/privacy-filter-multilingual …-multilingual-mlx …-multilingual-mlx-8bit
from openmed import extract_pii

text = "Patient Sarah Connor (DOB: 03/15/1985) at MRN 4471882."

extract_pii(text, model_name="openai/privacy-filter")              # PyTorch baseline
extract_pii(text, model_name="OpenMed/privacy-filter-nemotron")    # same code, different weights
extract_pii(text, model_name="OpenMed/privacy-filter-mlx")         # Apple Silicon (MLX)

Apple Silicon olmayan ana makinelerde MLX model adları otomatik olarak ilgili PyTorch denetim noktasıyla değiştirilir (tek seferlik bir uyarıyla) — bir model adı yazın, her yerde çalıştırın. Bkz. Privacy Filter mimarisi ve arka uç yönlendirme.


Çok dilli PII (12 dil)

en, fr, de, it, es, nl, hi, te, pt, ar, ja ve tr dillerinde çıkarım ve kimliksizleştirme — toplam 247 PII denetim noktası.

python -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])"

Dile göre örnekleri göster (Portekizce, Felemenkçe, Hintçe, Arapça, Japonca, Türkçe)

from openmed import extract_pii

portuguese = extract_pii("Paciente: Pedro Almeida, CPF: 123.456.789-09, telefone: +351 912 345 678", lang="pt", use_smart_merging=True)
dutch      = extract_pii("Patiënt: Eva de Vries, BSN: 123456782, telefoon: +31 6 12345678", lang="nl", use_smart_merging=True)
hindi      = extract_pii("रोगी: अनीता शर्मा, फोन: +91 9876543210, पता: नई दिल्ली 110001", lang="hi", use_smart_merging=True)
arabic     = extract_pii("المريضة ليلى حسن، الهاتف +20 10 1234 5678، الرقم القومي 29801011234567.", lang="ar", use_smart_merging=True)
japanese   = extract_pii("患者 佐藤 花子、電話 +81 90 1234 5678、マイナンバー 1234 5678 9012.", lang="ja", use_smart_merging=True)
turkish    = extract_pii("Hasta Ayşe Yılmaz, telefon +90 532 123 45 67, TCKN 10000000146.", lang="tr", use_smart_merging=True)

for r in (portuguese, dutch, hindi, arabic, japanese, turkish):
    print([(e.label, e.text) for e in r.entities])

REST API

İstek doğrulama, paylaşımlı pipeline ön yükleme ve birleşik hata zarfları içeren, Docker dostu bir FastAPI servisi.

```bash pip insta

Extension points exported contracts — how you extend this code

OpenMedClientOptions (Interface)
(no doc)
clients/typescript/src/index.ts
AnalyzeRequest (Interface)
(no doc)
clients/typescript/src/index.ts
PIIExtractRequest (Interface)
(no doc)
clients/typescript/src/index.ts
PIIDeidentifyRequest (Interface)
(no doc)
clients/typescript/src/index.ts
ModelUnloadRequest (Interface)
(no doc)
clients/typescript/src/index.ts

Core symbols most depended-on inside this repo

get
called by 1244
openmed/core/result_cache.py
get
called by 526
openmed/eval/leakage_heatmap.py
items
called by 288
openmed/clinical/context.py
extend
called by 149
openmed/training/adjudication.py
normalize_label
called by 103
openmed/core/labels.py
get
called by 97
openmed/clinical/context.py
deidentify
called by 91
openmed/core/pii.py
values
called by 83
openmed/clinical/context.py

Shape

Function 4,452
Method 2,338
Class 754
Route 207
Interface 16

Languages

Python98%
TypeScript2%

Modules by API surface

tests/unit/test_pii_i18n.py225 symbols
tests/unit/test_pii.py203 symbols
tests/unit/test_pii_multilingual_regression.py118 symbols
openmed/eval/release_gates.py94 symbols
openmed/cli/main.py77 symbols
openmed/eval/metrics.py75 symbols
openmed/core/pipeline.py72 symbols
tests/unit/test_core.py71 symbols
openmed/core/pii.py69 symbols
openmed/clinical/context.py64 symbols
tests/unit/test_processing.py63 symbols
tests/unit/test_batch.py63 symbols

Dependencies from manifests, versioned

typescript5.5.4 · 1×
faker22.0 · 1×
pyyaml6.0 · 1×
spacy3.7 · 1×
tokenizers0.15 · 1×
torch2.1 · 1×
transformers4.55 · 1×

For agents

$ claude mcp add openmed \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact