Skip to content

OpenMed 1.8.0 is cross-platform now

Latest

Choose a tag to compare

@maziyarpanahi maziyarpanahi released this 09 Jul 08:18
436a612

OpenMed 1.8.0 is the cross-platform runtime, production service, privacy coverage, clinical extraction, and release-evidence release.

This release extends the v1.7 multimodal and browser foundation into a coordinated Python, Swift, Kotlin/Android, TypeScript, React Native, browser, REST, gRPC, and deployment surface. It also adds deeper clinical terminology and event extraction, broader multimodal privacy coverage, stronger privacy gates, and supply-chain evidence for containers and releases.

Release date: 2026-07-09.

Release target: release/openmed-180 at cdee44e77662c74c68967ec38f4a5b29ce4ec105.

Previous release: v1.7.0 at 82dece146bed8bbbae7fc731afee1448534b2b29.

Highlights

  • Added Android OpenMedKit: Gradle project setup, Kotlin API types, span merger, BIO/BIOES decoder, ONNX and ORT Mobile inference, ML Kit OCR adapter, model catalog/download cache, document/image intake, Compose and scan demos, Android CI, parity fixtures, and guarded Maven Central publishing.
  • Added browser and mobile JavaScript runtimes: typed OpenMedKit web package, ONNX Runtime Web loader for WASM/WebGPU, React Native bridge, TypeScript client parity, Swift-Kotlin API parity checks, and public runtime surface snapshots.
  • Hardened production service paths with API-key/JWT authentication, request IDs, no-PHI JSON logging, OpenTelemetry tracing, gRPC, async jobs, webhooks, Helm deployment, multi-arch images, circuit breakers, retries/backoff, metrics, warm pools, batching, coalescing, priority queues, backpressure, and graceful readiness/liveness handling.
  • Expanded structured and batch privacy pipelines across SMART-on-FHIR bulk ingestion, object storage, Spark, Dask, DuckDB, pandas, polars, lakehouse tables, streaming columnar redaction, dbt/warehouse redaction, and privacy-gateway redaction before external model calls.
  • Added multimodal privacy coverage for DOCX text offsets, plain-image redaction, DICOM headers, burned-in DICOM pixel OCR redaction, redacted-PDF text-layer fidelity checks, EPUB extraction, vCard/iCalendar redaction, and PHI-safe document examples.
  • Added new identifier coverage: UK NHS/NINO, IBAN, SWIFT/BIC, ICAO passport/MRZ, and validator-backed national-ID support for Slovak, Latvian, Malay, Filipino, and Danish locales. The model-backed PII language allow-list remains the 15 codes in openmed.core.pii_i18n.SUPPORTED_LANGUAGES.
  • Deepened clinical extraction with normalized timelines, document assertion graphs, clinical event frames, medication attribute relations, coreference, concept normalization, UCUM units, free vocabulary grounding, RxNorm, ICD-10-CM, HPO, CodeableConcept export, OMOP CDM loader foundations, GDPR DSAR exports, and expanded domain label maps.
  • Strengthened evaluation and release evidence with streaming token classification, speculative MLX PII decoding, QLoRA smoke recipes, leakage-weighted distillation, ONNX/Core ML/OpenVINO optimization, paged KV-cache attention, memory-budgeted scheduling, benchmark ledgers, active-learning queues, hard-negative mining, cross-lingual transfer gates, model-card/datasheet generation, flakiness control, conformal calibration/abstention, mobile performance benchmarks, comparator matrices, load tests, and training provenance gates.
  • Added release and supply-chain hardening: trusted publishing, SLSA provenance, image signing, container SBOMs, vulnerability gates, baseline-aware secret scanning, pre-commit scanning, reproducible release metadata, and static OpenAPI version-surface checks.

Platform Runtimes

Android and Kotlin

Android is now a first-class OpenMedKit target. The release adds a standalone Gradle project, Kotlin API types, de-identification engine, token decoder, semantic-unit merger, ONNX token classifier, ORT Mobile export path, ML Kit OCR adapter, model catalog, offline cache manager, document/image intake, Compose demo, scan demo, parity fixtures, and Android CI.

Users building mobile apps can validate Python-to-Android span equivalence, exercise model download/cache behavior, and prepare AAR publishing through the guarded Central Portal workflow.

Browser, TypeScript, and React Native

The JavaScript surface moves beyond static export. The new typed web package wraps token-classification decoding and ONNX Runtime Web loading for WASM/WebGPU. React Native gains a bridge for on-device de-identification, and client parity tests keep generated REST client surfaces aligned with the committed OpenAPI document.

Swift and Apple

The Swift package remains the Apple-native surface. v1.8.0 adds Swift-Kotlin API parity checks, mobile benchmarking, Core ML residency gates, ONNX/Core ML optimization checks, and the OPENMED_MLX_MMAP toggle for debugging eager vs. memory-mapped MLX weight loading.

Service, Deployment, and Operations

The FastAPI service gained production controls around identity, observability, scale, and failure handling.

  • API-key and JWT authentication middleware
  • request correlation IDs and no-PHI JSON logging
  • OpenTelemetry tracing with PHI-safe span attributes
  • gRPC protobuf contracts and generated stubs
  • async jobs and webhook callbacks for long-running de-identification
  • priority queues, backpressure, dynamic batching, and request coalescing
  • circuit breakers and retry/backoff around model loading and inference
  • Helm deployment, multi-arch container builds, hardened distroless images, container SBOMs, signed images, SLSA provenance, and vulnerability scanning

Batch and data-platform integrations expanded through object-storage runners, SMART-on-FHIR bulk ingestion, Spark structured streaming, Dask accessors, DuckDB UDFs, pandas/polars accessors, streaming columnar redaction, lakehouse column redaction, and a dbt-style warehouse transformation package.

Privacy and Multimodal Coverage

v1.8.0 broadens both file-format and identifier coverage.

  • DOCX text extraction with offset maps
  • plain-image pixel redaction
  • DICOM header de-identification and burned-in pixel OCR redaction
  • redacted-PDF text-layer leakage and visual fidelity verification
  • EPUB text extraction with inline whitespace preservation
  • vCard and iCalendar PHI redaction
  • UK health identifiers, IBAN, SWIFT/BIC, passport/MRZ, and validator-backed locale ID packs

The per-language PII extraction API still uses the 15 model-backed SUPPORTED_LANGUAGES entries: ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, and tr. New validator-backed ID coverage is exposed through locale and national-ID provider paths where those languages are marked as ID-only.

Clinical Extraction and Interop

Clinical extraction moved from individual helpers toward a richer structured layer.

  • normalized timeline resolution
  • clinical event frames for medication and lab trends
  • document assertion graph reconciliation
  • medication attribute relation decoding
  • clinical coreference and entity linking
  • pluggable terminology concept normalization
  • UCUM measurement normalization
  • RxNorm, ICD-10-CM, and HPO linkers
  • CodeableConcept builders and span mapping
  • deterministic note-to-CDM extraction and OMOP CDM loader foundations
  • GDPR DSAR subject-access exports
  • severity/laterality, genomic variant, gastroenterology, endocrinology, nutrition/diet, anesthesia, and multilingual context cue coverage

Evaluation, Models, and Release Evidence

This release adds evidence infrastructure for model quality, privacy leakage, and reproducibility.

  • streaming token classification and speculative MLX PII decoding
  • QLoRA smoke recipe gate and leakage-weighted distillation primitives
  • ONNX graph optimization, dynamic-shape validation, ORT Mobile, OpenVINO, Core ML residency, and ARM INT8 recall certification
  • paged KV-cache attention and memory-budgeted model scheduling
  • benchmark run ledger, comparator matrix runner, load-test harness, and mobile performance benchmark runner
  • active-learning gate failure queues, context masking, and hard-negative mining
  • cross-lingual transfer evaluation, multilingual context cues, and lexical grounding aliases
  • model-card/datasheet generation from provenance-hashed evaluation artifacts
  • flakiness quarantine, conformal calibration, conformal abstention, and training provenance reproducibility gates

Fixes and Hardening

Key fixes include replacing optimizer-stripped bare assert statements with explicit exceptions, adding explicit UTF-8 handling in MLX/Core ML and other file/subprocess paths, guarding JSON decoding and malformed manifest logging, chaining re-raised exceptions cleanly, pinning MLX Swift for iOS builds, fixing multilingual test span offsets, constraining DSAR matching by vault key, adapting HPO linker tests to the vocabulary loader, keeping Pages deployments from canceling in-progress docs publishes, and completing F401/F541 cleanup after the large v1.8 merge train.

Security

v1.8.0 adds and strengthens no-raw-PHI logging, offline mode socket blocking, privacy-gateway redaction before external LLM calls, policy compiler coverage proofs, DP surrogate budgeting, k-anonymity/l-diversity/t-closeness enforcement, membership-inference defenses, adversarial de-identification robustness, federated leakage evaluation, secret scanning, pre-commit hook scanning, and vulnerability gates.

Migration Notes

  • Update package references from 1.7.0 to 1.8.0 in Swift Package Manager, Docker image tags, Helm values, and deployment runbooks.
  • The Python package version is 1.8.0; the committed OpenAPI spec is regenerated from openmed.__version__ and reports 1.8.0.
  • Helm defaults now use image tag 1.8.0 and chart appVersion: "1.8.0".
  • Swift demo bundle versions are updated to 1.8.0.
  • The model-backed PII language allow-list remains 15 codes: ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, and tr. Additional locale work in this release adds validator-backed national-ID paths rather than full default PII model entries for every new locale.
  • Service operators can adopt auth, tracing, batching, coalescing, metrics, and Helm settings independently. Review docs/serving/ and docs/deploy/helm.md before enabling them in production.
  • Android, browser, and React Native paths now have runnable packages and parity tests, but mobile apps should still validate target-device performance, model cache behavior, and redaction quality with local synthetic fixtures before release.
  • New privacy-gateway paths are designed to redact before external model calls; they do not change the local-first default for PHI workflows.

Release Evidence

  • Release branch: release/openmed-180
  • Release target commit: cdee44e77662c74c68967ec38f4a5b29ce4ec105
  • Last release tag: v1.7.0 at 82dece146bed8bbbae7fc731afee1448534b2b29
  • Total commits reviewed since v1.7.0: 434
  • Merge commits reviewed: 223
  • Non-merge commits reviewed: 211
  • First-parent commits reviewed: 79
  • First-parent merge commits reviewed: 41
  • Unique PR links in GitHub generated notes for v1.7.0...v1.8.0: 144
  • Aggregate diff reviewed: 631 files changed, 114,993 insertions, 1,396 deletions

Validation

  • scripts/release/check_release_version.py --version 1.8.0
  • scripts/release/check_repo_policy.py
  • uv lock --check
  • make lint
  • make format-check
  • make docs-build
  • .venv/bin/python -m pytest tests/ -q (3915 passed, 37 skipped)
  • make build
  • swift test in swift/OpenMedKit
  • ./gradlew :openmedkit:assembleDebug :openmedkit:testDebugUnitTest --stacktrace in android
  • npm test in js/openmedkit-web
  • npm test in js/openmedkit-react-native
  • scripts/export_openapi.py
  • git diff --check
  • Hugging Face Space visibility safety scan

Non-blocking validation notes: MkDocs reports existing docs pages that are intentionally not in nav, Swift skips local MLX artifact smoke tests when private local artifacts are not configured, Gradle reports deprecation warnings from the current Android toolchain, and the web package has one low-severity dev-only esbuild audit advisory while production npm dependencies report zero vulnerabilities.

What's Changed

New Contributors

Full Changelog: v1.7.0...v1.8.0