Download Latest Version OpenMed v1.9.1 source code.zip (25.8 MB)
Email in envelope

Get an email when there's a new version of OpenMed

Home / v1.9.0
Name Modified Size InfoDownloads / Week
Parent folder
sbom.cdx.json 2026-07-14 8.3 kB
image-sbom.cdx.json 2026-07-14 1.4 MB
image-sbom.cdx.json.sha256 2026-07-14 86 Bytes
openmed-image-sbom_767877b06732ba8ae94415ea1af9c6edb0651119.cyclonedx.json 2026-07-14 1.4 MB
OpenMed v1.9.0 source code.tar.gz 2026-07-14 25.0 MB
OpenMed v1.9.0 source code.zip 2026-07-14 25.8 MB
README.md 2026-07-14 16.5 kB
Totals: 7 Items   53.6 MB 0

OpenMed + ONNX: Faster on CPU, runs in your browsers, and Android phones! ❤️

OpenMed v1.9.0 is ready: one token-classification model repository can now run across Python, browsers, Node.js, and Android without rebuilding tokenizer or tensor plumbing for every platform.

The release introduces OnnxModel for Python, loadOnnxModel in the new public openmed npm package, and OpenMedKit.fromDirectory for Android. It adds automatic INT8 selection, Hugging Face tokenizer offset parity, BIO/BILOU entity aggregation, ONNX external-data support, WebGPU/WebAssembly execution, immutable Android installation through JitPack, and resumable catalog publication.

Beyond the shared ONNX contract, v1.9.0 includes the work already present on the release branch after v1.8.1: richer clinical extraction and service clients, full Korean and Romanian PII packs for a 17-language model-backed allow-list, stronger multilingual and privacy evaluation gates, new developer-quality tooling, and refreshed documentation and product messaging.

Install or upgrade:

:::bash
pip install --upgrade "openmed==1.9.0"
npm install openmed@1.9.0

Swift Package Manager:

:::swift
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.9.0")

Android through JitPack:

:::kotlin
implementation("com.github.maziyarpanahi:openmed:v1.9.0")

Release notes: https://openmed.life/docs/release/v1.9.0/

Full changelog: https://github.com/maziyarpanahi/openmed/compare/v1.8.1...v1.9.0

Release scope

This release contains 35 release-scope pull requests: 34 pull requests merged onto master after the v1.8.1 release branch was cut, plus release pull request [#1550]. GitHub's generated notes also surface [#1545] and [#1546], but those two pull requests are already part of the v1.8.1 release topology and are not counted again in v1.9.0.

The completed PR head contains origin/master as an ancestor: PR head 767877b06732ba8ae94415ea1af9c6edb0651119, master d47c238099238e1651e566fe6bdf4c6f71ffeb4a, and merge base d47c238099238e1651e566fe6bdf4c6f71ffeb4a. The completed release range contains 333 reachable commits and 34 first-parent merges after v1.8.1, with 330 files changed, 39,752 insertions, and 1,991 deletions. Recompute these values only if the PR head changes again before tagging.

Highlights

  • Cross-platform ONNX: OnnxModel.from_pretrained(...) for Python CPU, loadOnnxModel(...) for browsers and Node.js, and OpenMedKit.fromDirectory(...) for Android consume the same exported token-classification repository (#1550).
  • Browser and Node.js package: the public openmed npm package ships ESM/CommonJS exports, TypeScript definitions, ONNX Runtime Web support, WebGPU/WebAssembly selection, offline-local loading controls, package tests, audits, and provenance-backed publishing (#1550).
  • Android distribution: OpenMedKit uses DJL Hugging Face tokenization, preserves character offsets, validates sidecar artifacts, and installs from immutable Git tags through JitPack (#1550).
  • Safer model rollout: resumable Android/ORT conversion, automatic INT8 preference, external-data handling, model-card runtime metadata, fail-closed artifact reuse, and Xet-disabled batch publication make the catalog rollout repeatable (#1550).
  • MLX usability: direct OpenMed/...-mlx repository IDs resolve as pre-converted artifacts, optional tokenizer imports remain lazy, and runnable token-classification and GLiNER examples document the intended paths (#1550).
  • Clinical extraction and clients: relation metrics, strict/relaxed scoring and release gates, dataframe output, an immunization zero-shot domain, a Go REST client, a Postman collection, REST recipes, and a Jupyter result widget (#1159, [#1211], [#1212], [#1224], [#1379], [#1382], [#1385], [#1387]).
  • Multilingual privacy: Korean and Romanian join the model-backed PII allow-list; Canadian and Australian identifier validators, CJK honorific handling, RTL rendering, translation augmentation, multilingual section detection, and surrogate quality gates broaden locale fidelity (#1544, [#1389], [#1340], [#1342], [#1346], [#1384], [#1221], [#1225], [#1226]).
  • Evaluation and safety: critical-finding recall, leakage-under-extraction, multilingual benchmark aggregation, false-negative exploration, throughput/accuracy reporting, memory profiling, property-based fuzzing, a redactor threat model, and a synthetic burned-in-PHI DICOM benchmark strengthen release evidence (#1213, [#1214], [#1223], [#1343], [#1347], [#1349], [#1350], [#1352], [#1388]).
  • Developer quality and documentation: artifact-backed model-card datasheets, Hub model-pull helpers, public-API docstring checks, PEP 561 typing, persona quickstarts, troubleshooting guidance, bounded long-note pipeline latency, and refreshed OpenMed branding round out the release (#1228, [#1339], [#1341], [#1348], [#1380], [#1383], [#1386], [#1415]).

Cross-platform ONNX contract

The release packages tokenizer assets, ONNX graphs, optional external data, and runtime metadata once so each platform can expose a native API without recreating model-specific preprocessing.

Python supports local paths and Hugging Face repositories, automatic INT8 preference, tokenizer offset mapping, BIO/BILOU aggregation, external-data graphs, zero-valued token_type_ids when required, and CPU execution through optional ONNX Runtime dependencies.

The openmed npm package supports browsers and Node.js with ESM/CommonJS entry points, generated declarations, ONNX Runtime Web loading, WebGPU/WASM capability selection, cache reuse, and offline-only local model loading by default.

Android OpenMedKit loads the same repository layout through OpenMedKit.fromDirectory, uses DJL's Apache-2.0 Hugging Face tokenizer implementation to preserve tokenizer.json behavior and character offsets, and packages the library as a release AAR available from immutable Git tags through JitPack.

Standard token-classification repositories are compatible with this contract. GLiNER zero-shot span models and privacy-filter mixture-of-experts models remain explicitly excluded because they do not use the standard token-classification graph contract.

Clinical, multilingual, and evaluation additions

Clinical extraction gains relation metrics, synthetic gold loading, strict and relaxed scoring, an RE release gate, dataframe output, and an immunization domain with FHIR-aligned labels. Service consumers gain a Go SDK, Postman collection, REST recipes, and a rich notebook display.

The model-backed PII allow-list now contains 17 codes: ar, de, en, es, fr, he, hi, id, it, ja, ko, nl, pt, ro, te, th, and tr. Korean and Romanian add native identifier validation, locale-aware surrogates, synthetic fixtures, and model/service wiring. Additional locale work covers Canadian SIN and provincial cards, Australian Medicare and TFN identifiers, CJK honorifics, RTL rendering, multilingual section detection, translation augmentation, and surrogate-quality validation.

Release evidence expands through critical-finding recall and leakage-under-extraction gates, multilingual benchmark aggregation, false-negative exploration, throughput-versus-accuracy reports, memory profiling, property-based de-identification fuzzing, a redactor threat model and leakage-bypass catalog, and a synthetic burned-in-PHI DICOM benchmark.

Security and release engineering

  • Fixable vulnerability waivers were replaced with dependency and base-image upgrades, and the vulnerability gate rejects a waiver when a fixed version exists.
  • Python, npm, Swift, Android, Helm, OpenAPI, container, and demo version surfaces align on 1.9.0.
  • Stable Swift and Android documentation uses immutable version coordinates rather than moving branch/snapshot references.
  • Generated Android/ORT model cards use the package version as their stable JitPack coordinate.
  • Python wheels and sdists, npm artifacts, Android AARs, Swift package builds, strict documentation, Helm templates, OpenAPI output, workflow references, repository policy, and vulnerability policy all retain explicit validation gates.
  • Local-first privacy defaults remain unchanged: no mandatory network calls after model download, no telemetry by default, and no raw PHI in logs, caches, temp files, or audit artifacts.

Migration notes

  • Python users should upgrade to openmed==1.9.0 and install only the optional runtime extras they need.
  • Browser and Node.js users should install openmed@1.9.0; the earlier scoped package name is not the public v1.9 package.
  • Swift users should pin the minimum compatible package version to 1.9.0.
  • Android users should add JitPack and install com.github.maziyarpanahi:openmed:v1.9.0; master-SNAPSHOT is a moving development coordinate and is not release-stable.
  • Applications using the shared ONNX contract must retain the repository tokenizer and runtime sidecar files with the graph. Android publication fails closed when required artifacts are incomplete.
  • The v1.8.1 architecture-safe attention-selection fix remains included. Explicit eager, sdpa, and flash_attention_2 selections retain their existing behavior.

Validation completed on 2026-07-14

  • Hosted PR checks on final head 767877b06732ba8ae94415ea1af9c6edb0651119: 30 successful, 1 expected PR-only manifest-publication skip, 0 pending, and 0 failures; GitHub reports the PR mergeable with a clean merge state.
  • Full Python suite: 4669 passed, 43 skipped.
  • Focused model-card and release-version suite: 29 passed.
  • Ruff fix/lint/format gates: passed across 763 Python files.
  • Strict MkDocs build: passed; only the repository's existing unnavlisted-page notes and the expected no-git-history warning for the new v1.9 page were emitted.
  • Release-version preflight: passed for Python, README, Swift, Android, MkDocs, website, OpenAPI, Helm, npm, and demo bundle surfaces.
  • Repository policy, lockfile consistency, GitHub Actions lint/reference checks, OpenAPI regeneration consistency, and git diff --check: passed.
  • Python wheel and sdist: built successfully; both passed twine check.
  • Swift OpenMedKit: formatting and lint passed; 65 tests executed with 0 failures and 14 expected local-artifact skips.
  • Android OpenMedKit: debug AAR assembly and debug unit tests passed; Gradle completed 44 actionable tasks successfully.
  • openmed npm package: build, typecheck, 9 Node tests, audit with zero vulnerabilities, and dry-run package inspection passed.
  • React Native package: typecheck, 4 parity/privacy tests, and audit with zero vulnerabilities passed.
  • Helm: default and optional ServiceMonitor/PodDisruptionBudget lint and template paths passed.
  • Image assets were left unchanged at maintainer direction.

Pull-request inventory

  • Cross-platform runtime and distribution: [#1550], [#1339].
  • Clinical extraction, service clients, notebooks, and documentation: [#1159], [#1211], [#1212], [#1224], [#1379], [#1380], [#1382], [#1383], [#1385], [#1386], [#1387].
  • Multilingual privacy and locale handling: [#1544], [#1389], [#1340], [#1342], [#1346], [#1384], [#1221], [#1225], [#1226].
  • Evaluation, safety, and developer quality: [#1213], [#1214], [#1223], [#1228], [#1341], [#1343], [#1347], [#1348], [#1349], [#1350], [#1352], [#1388].
  • Brand and product messaging: [#1415].

Contributor note

Thank you to @Ankitha101003 for the Korean PII language-pack contribution in [#1544] and to everyone whose merged work is represented in this release.

What's Changed

New Contributors

Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.8.1...v1.9.0

Source: README.md, updated 2026-07-14