OpenMed v1.7.0¶
OpenMed 1.7.0 is the multimodal de-identification and evaluation-depth release.
This release turns the v1.6 privacy assurance foundation into a broader local-first clinical data platform: multimodal document intake, OCR adapters, structured clinical extraction, FHIR/HL7/CDA/CSV de-identification, streaming and batch service controls, richer policy profiles, and typed clients for Python, Swift, and TypeScript.
It also deepens the evidence layer around releases: benchmark scorecards, threshold sweeps, leakage heatmaps, membership-inference probes, k-anonymity metrics, utility-loss reports, release-gate previews, evidence bundles, SBOMs, reproducible locks, and stronger supply-chain checks.
Release date: 2026-07-01.
Highlights¶
- Added multimodal document primitives, source spans, OCR adapters, image/PDF redaction, Markdown/AsciiDoc offset extraction, metadata scrubbing, JSONL chat-log de-identification, and language-aware OCR configuration.
- Added de-identification adapters for CDA/C-CDA XML, HL7 v2, CSV/TSV, FHIR
$de-identify, FHIR Bulk NDJSON, deterministic FHIR bundles,OperationOutcome,Provenance,AuditEvent, and CodeableConcept validation/provenance helpers. - Added clinical extraction and normalization for lab values, vital signs, medication sigs, problem lists, summary cards, microbiology concepts, dermatology and ophthalmology domains, clinical concept labels, assertion context, status vocabulary, and clinical-term protection.
- Expanded language and locale coverage with Indonesian, Thai, Hebrew RTL, Polish PESEL, Korean RRN, Unicode script segmentation, locale national-ID providers, and deterministic locale PHI generation.
- Added runtime de-identification features including typed
AnalyzeResult,DeidentificationResult.to_dataframe(), redaction preview diffs, cross-document surrogate vaults, patient-keyed date shifting, format-preserving redaction, minimum-necessary strength selection, custom recognizers, streaming incremental de-identification, explain traces, section stamping, and per-document risk budgets. - Added new CLI and SDK surfaces:
openmed deid,openmed fhir bundle,openmed models recommend,openmed models diff,openmed policy diff,openmed doctor,openmed gates preview,openmed gates bundle,openmed audit,openmed risk, model-card previews, a typed Python REST client, a TypeScript REST client, and Swift policy-profile support. - Added REST service operations for model warm pools, dynamic batching, request coalescing, rate and concurrency limits, readiness/liveness split, graceful shutdown, trusted hosts, CORS configuration, Prometheus-style metrics, Docker Compose, and Kafka streaming de-identification.
- Added evaluation and release evidence tooling for DrugProt, public biomedical NER, i2b2, clinical PHI manifests, dataset cards, fixture coverage, per-section recall, result caching, fairness, robustness, error analysis, leakage heatmaps, membership inference, linkage attacks, k-anonymity/l-diversity/t-closeness, audit diffs, model scorecards, threshold sweeps, flaky-run detection, paired significance, calibration reliability, utility loss, policy compliance, benchmark history diffs, nano-tier certification, and risk dashboards.
- Added model and backend work for Laneformer MLX-LM, MLX INT4 certification, Core ML INT8 export, AWQ/GPTQ recipes, bitsandbytes 4-bit loading, FlashAttention/SDPA/eager selection, PyTorch MPS tuning, ONNX/WebGPU and Transformers.js exports, tokenizer caching, Mode-A distillation, DAPT corpus assembly, DirectID, hard-negative sampling, and span-relation graph decoding.
- Added security and release engineering coverage: root responsible disclosure policy, breach runbook and report template, CycloneDX SBOM generation, reproducible-lock workflow, lockfile drift gate, GitHub Actions ref validation, manifest schema validation, dependency updates, doctest-backed examples, and PHI-safe diagnostics.
The Big Picture¶
OpenMed v1.7.0 is about broadening what can be safely de-identified and proving more of the surrounding workflow.
The v1.6 release established policy-aware spans, audit reports, risk scoring, and release gates. v1.7 applies that foundation to more input types and operational paths: scanned documents, PDFs, Markdown and AsciiDoc, structured tables, HL7 v2, CDA/C-CDA XML, FHIR operations, bulk NDJSON, chat logs, Kafka streams, and REST clients.
The evaluation story also moves from single aggregate scores toward release-grade evidence: per-language leakage heatmaps, per-section recall, dataset cards, fixture coverage, model scorecards, threshold sweeps, fairness and robustness reports, utility-loss metrics, and evidence bundles that make gate decisions easier to inspect.
Multimodal And Document Redaction¶
The new multimodal layer gives OpenMed a shared contract for document ingestion and source-preserving redaction.
This release adds:
openmed.multimodalprimitives for document content, source spans, handlers, and lazy registration- image redaction and OCR result contracts
- Tesseract, PaddleOCR, EasyOCR, and docTR engine adapters
- OCR language configuration for non-English scans
- PDF coordinate projection for detected spans
- Markdown and AsciiDoc text extraction with character-offset maps
- metadata scrubbing and verification for images, PDFs, and DOCX files
- JSONL chat-log de-identification with role and turn structure preservation
The result is a cleaner path from scanned or mixed-format clinical material to audited text, coordinates, redactions, and PHI-safe summaries.
Interoperability And Structured Health Data¶
v1.7.0 adds a large set of healthcare interchange helpers.
New or expanded interop paths include:
- CDA/C-CDA XML de-identification
- HL7 v2 message parsing and field-level redaction
- CSV/TSV PHI column classification and redaction manifests
- FHIR
$de-identifyoperation wrappers - FHIR Bulk NDJSON de-identification
- deterministic FHIR Bundle assembly and stable
urn:uuidreferences - FHIR
OperationOutcomegeneration - FHIR
ProvenanceandAuditEventemission from signed audit reports - CodeableConcept builders, text fallback checks, and code-system version pinning
- PHILTER, pyDeid, GLiNER-BioMed, LangChain, and spaCy adapter surfaces
These additions make OpenMed more useful in pipelines that already speak health-data formats instead of plain text alone.
Clinical Extraction And Context¶
Clinical extraction is now broader and more context-aware.
This release adds or expands:
- dermatology and ophthalmology zero-shot domains
- microbiology labels and routing metadata
- lab reference range parsing and flag handling
- vital signs extraction
- medication sig normalization
- problem-list deduplication and status reconciliation
- clinical summary cards without PHI
- clinical concept canonical labels
- clinical assertion context records
- negation, section-aware ConText assertions, and sentence-bounded cue scope
- clinical term protection to reduce false PII hits on protected clinical vocabulary
- status vocabulary normalization for substance, employment, and living-status language
Together these changes reduce over-redaction risk and improve downstream structured clinical outputs.
Language, Locale, And Identifier Coverage¶
v1.7.0 expands multilingual PII coverage and locale correctness.
New coverage includes:
- Indonesian PII with NIK validation
- Thai PII patterns and fixtures
- Hebrew RTL PII handling
- Polish PESEL validation
- South Korean RRN validation
- Unicode script detection and mixed-script segmentation
- locale national-ID provider registry
- per-language surrogate coherence regression coverage
- locale-aware date and number normalization
- deterministic locale PHI generation for training and evaluation
Runtime, Service, And Clients¶
The runtime and service layers are more production-oriented.
Notable additions:
- model warm pools and resident model limits
- dynamic REST batching
- request coalescing for identical in-flight work
- rate-limit and concurrency-limit middleware
- split
/livezand/readyzprobes with graceful shutdown behavior - trusted-host and CORS configuration
- optional Prometheus-style metrics without PHI-derived labels
- Docker Compose with HF cache volume
- Kafka streaming de-identification connector
- typed Python REST client
- TypeScript REST client
- Swift OpenMedKit de-identification JSON export and bundled policy profiles
Evaluation, Risk, And Release Evidence¶
The evaluation system now produces more granular evidence for privacy and model quality.
New capabilities include:
- DrugProt public relation-extraction evaluation
- biomedical NER benchmark suite
- i2b2 eval-only loader
- clinical PHI dataset manifest
- dataset cards without row text
- fixture coverage reports
- per-section recall reports
- eval result caching
- model fleet freshness metrics
- fairness, robustness, and error-analysis reports
- leakage heatmaps by label and language
- membership-inference and linkage attack modes
- k-anonymity, l-diversity, and t-closeness reports
- audit-report diffs
- model scorecards
- threshold sweeps and paired significance testing
- flaky-run variance detection
- calibration reliability data
- over-redaction and utility-loss reports
- policy-profile compliance evaluation
- cross-release benchmark history diffs
- risk dashboard rendering
- release-gate dry-run previews and evidence bundles
Models, Backends, And Training¶
v1.7.0 adds model export and training infrastructure across Apple, browser, PyTorch, and quantized paths.
New work includes:
- Laneformer MLX language model runtime
- MLX INT4 recall certification
- Core ML INT8 palettized export
- AWQ and GPTQ 4-bit recipes
- bitsandbytes 4-bit load-time quantization
- FlashAttention, SDPA, and eager attention backend selection
- PyTorch Metal/MPS device selection and tuning
- ONNX/WebGPU export artifacts
- Transformers.js browser export target
- tokenizer caching
- Mode-A knowledge distillation
- DAPT corpus assembler
- DirectID tiny-head contract
- hard-negative training sampler
- span-relation graph decoder
- ONNX and quantized artifact publishing metadata
Security, Supply Chain, And Docs¶
The release also hardens project operations.
Additions include:
- root
SECURITY.mdand private vulnerability reporting guidance - contributor onboarding and community health files
- breach notification runbook and breach report template
- CycloneDX SBOM generation and release attachment
- reproducible-lock workflow
- lockfile drift gate
- GitHub Actions ref validation
- manifest schema validation command and CI gate
- release docs for trust status, clinical context, SBOM, reproducible dependencies, OpenAPI, REST clients, quantization, and policy workflows
- doctest-backed examples for public APIs
- explicit UTF-8 file/subprocess handling, subprocess timeouts, and lazy logging formatting fixes
Fixes¶
- Audit span records now sort deterministically across runs.
- Date shifting avoids zero-day offsets, preserves shifted intervals by default, and handles slash/dash two-digit-year formats more consistently.
- Unicode offset redaction in the pipeline was fixed.
- Duplicate FHIR resource IDs are rejected.
- JSON loading paths in core, eval, NER, and risk modules raise clearer errors or fail closed on corrupt JSON.
- Optional-extra failures now produce clearer skipped-capability metadata.
- Safety sweeps reduce over-redaction from bare numeric identifier patterns.
- GitHub Actions ref validation and setup-uv pinning were tightened.
- Manifest validation now runs through
uv. - The CLI fallback message for the basic TUI entry point was corrected.
Migration Notes¶
analyze_text(..., output_format="dict")now returns a frozenAnalyzeResult;to_dict()and mapping access preserve the legacy payload shape.- Clinical term protection is enabled by default in PII extraction and the staged pipeline, which can suppress ambiguous PERSON, LOCATION, or ORG matches that exactly match protected clinical vocabulary.
- FHIR
OperationOutcomeoutput emits R4issue.expression; legacyissue.locationis accepted on input but is not emitted. ServiceRuntime.get_loader()now returns the warm-pool proxy. Useget_model_loader()when raw loader access is required.- Custom OCR engines should accept the keyword-only
languagesparameter. - OCR auto-selection can choose optional EasyOCR or docTR engines when they are installed.
- REST deployments using custom Host headers must configure
OPENMED_SERVICE_TRUSTED_HOSTS; wildcard CORS and trusted-host settings are rejected. - Unsupported Core ML architectures now fail before model loading/tracing, and
--quantized-outputrequires--quantize int8. - The canonical label set expanded with clinical concept labels.
format_preserveexpands the de-identification action enum and schema surface.- The legacy
shift_datesboolean remains accepted, but new code should prefermethod="shift_dates"with explicit date-shift options.
PR Review Summary¶
Reviewed range: v1.6.0..origin/release/openmed-170
- Last release:
v1.6.0at1863350b - Reviewed head:
origin/release/openmed-170at36ae8666 - First-parent commits reviewed: 189
- Merged PR commits reviewed: 148
- Additional squash/direct PRs covered by these notes: 36
- Total PRs covered by these notes: 184
- Direct maintenance commits without a new PR number reviewed:
e7f080b4(revert grouped Actions update),38e86172(pin setup-uv action),cd3f2b9e(run manifest validation throughuv),d1061d7b(README update), and79d56791(avoid MkDocs autorefs in doctest outputs) - Aggregate diff: 483 files changed, 87,085 insertions, 1,222 deletions
Major PR groups:
- Multimodal, OCR, and document redaction: #555, #567, #717, #749, #558, #726, #745, #755, #758
- Interop and structured health data: #566, #642, #631, #629, #626, #625, #553, #557, #737, #777, #784, #689, #690, #704, #372
- Clinical extraction and context: #552, #410, #560, #568, #565, #718, #683, #773, #684, #691, #738, #739, #782, #785, #774, #698
- Language, locale, and identifiers: #562, #747, #746, #748, #709, #609, #610, #614, #766
- Evaluation, risk, and release gates: #617, #615, #743, #701, #688, #703, #702, #725, #680, #724, #723, #740, #735, #681, #682, #753, #754, #762, #765, #734, #764, #744, #786, #337, #351, #633, #634, #635, #636, #637, #638, #732, #379
- Service, CLI, and SDKs: #632, #630, #750, #742, #722, #788, #789, #756, #741, #721, #780, #771, #772, #730, #775, #787, #696, #728, #776, #564
- Models, backends, and training: #644, #620, #619, #627, #759, #760, #761, #719, #736, #790, #383, #751, #622, #612, #349, #603, #1020
- Security, docs, CI, and release engineering: #648, #647, #716, #720, #1083, #693, #700, #607, #710, #711, #712, #713, #714, #715, #1021, #409, #697, #763, #185, #640, #646, #604, #605, #407
Open Items Before Tagging¶
- Run the full project lint, test, build, and release-gate suite if you want coverage beyond the focused release-prep gates listed below.
- Confirm the v1.7.0 release-gate candidate bundle has required metadata, calibration evidence, span fixtures, quantization evidence, SBOM, and reproducible-lock evidence.
- If the GitHub release body is generated automatically, confirm it is based on
v1.6.0...v1.7.0and keep theFixes #399issue reference out of the PR count. - Decide whether
CHANGELOG.mdshould be expanded to include the 36 squash/direct PRs as explicit PR-number references, or whether the detailed release-note inventory is the source of truth for that level of traceability.
Verification For This Draft¶
- The v1.6.0 GitHub release body and local
RELEASE_NOTES_v1.6.0.mdwere used as the style reference. - The reviewed range is
v1.6.0..origin/release/openmed-170; current reviewed head is36ae8666. - The first-parent range contains 189 commits: 148 merge commits plus 41 direct first-parent commits.
- GitHub generated release notes for
v1.7.0resolve to 184 PR links. The extra#399in a commit title is an issue reference, not a PR, and is not counted as a PR. - Remaining
1.6search hits after the version bump are historical changelog entries, compare ranges, CycloneDX/spec/style/dependency values, or changelog-generator examples. python3 scripts/release/check_release_version.py --version 1.7.0passed.python3 scripts/release/check_repo_policy.pypassed.- Focused tests passed:
70 passed, 2 warningsfor release changelog, FHIR provenance, audit/risk CLI, OpenAPI spec, and service API tests. make docs-buildpassed under MkDocs strict mode.git diff --checkpassed.
What's Changed¶
- feat: declare the [multimodal] extra and ingest/redact contract by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/555
- feat:added FHIR OperationOutcome builder for exporter and validation results by @Sidharth1743 in https://github.com/maziyarpanahi/openmed/pull/566
- feat: add dermatology and ophthalmology domains to NER catalog by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/552
- feat: add Tesseract and PaddleOCR engine adapters with a common OCR result contract by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/567
- Build the hard-negative harness for training batches by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/349
- Feature/lab parser by @VishnuPrasath-S-20 in https://github.com/maziyarpanahi/openmed/pull/568
- Add per-language locale and national-ID surrogate coherence regression suite by @cycsmail in https://github.com/maziyarpanahi/openmed/pull/562
- Add the LangChain redaction wrapper integration spike by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/373
- Define the nightly trust results schema by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/379
- Add ONNX and WebGPU export artifacts by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/383
- Define DirectID tiny head contract by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/603
- Add clinical PHI flagship dataset manifest by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/388
- fix: correct misleading message in _run_basic_tui_entry fallback (Fixes #399) by @rtmalikian in https://github.com/maziyarpanahi/openmed/pull/407
- fix: reject duplicate resource ids in FHIR Bundle assembler by @gitcommit90 in https://github.com/maziyarpanahi/openmed/pull/557
- feat: add Canada PIPEDA policy profile and register alias by @AbrarH4 in https://github.com/maziyarpanahi/openmed/pull/561
- Fix Unicode offset redaction in pipeline by @alberthammerich in https://github.com/maziyarpanahi/openmed/pull/563
- feat: add docker-compose.yml with HF cache volume and healthcheckout by @elysianx138 in https://github.com/maziyarpanahi/openmed/pull/564
- Add clinical negation axis by @alberthammerich in https://github.com/maziyarpanahi/openmed/pull/565
- fix: never auto-select a zero-day date shift offset by @otmanm in https://github.com/maziyarpanahi/openmed/pull/604
- Add negation-trap and quasi-identifier uniqueness regression suites by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/351
- Publish model fleet freshness metrics from the manifest by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/337
- fix: preserve slash/dash date format for 2-digit years by @otmanm in https://github.com/maziyarpanahi/openmed/pull/605
- Add fairness eval by demographic group by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/633
- Add a robustness eval with typo, OCR-noise and casing perturbations by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/634
- Add a per-entity confusion-matrix and error-analysis report by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/635
- Add clinical assertion context record by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/636
- Add a manifest schema validator command and CI gate by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/637
- Add clinical context trap regression suite by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/638
- Fix PII language count source of truth drift by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/640
- Add custom detector plugin API by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/643
- Enrich model manifest fields by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/639
- Add model discovery search over manifest by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/641
- fix: change keep_year default from True to False to preserve date intervals by @AlexFucuson9 in https://github.com/maziyarpanahi/openmed/pull/646
- docs: add SECURITY.md responsible-disclosure policy and private reporting by @annaladasur in https://github.com/maziyarpanahi/openmed/pull/648
- docs: add contributor onboarding guide by @blut-agent in https://github.com/maziyarpanahi/openmed/pull/647
- fix: deterministic ordering of audit span records across runs by @mvanhorn in https://github.com/maziyarpanahi/openmed/pull/645
- Add Laneformer MLX language model runtime by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/644
- feat: add standalone FHIR CodeableConcept builder by @sharrmeen in https://github.com/maziyarpanahi/openmed/pull/642
- Add service model warm pool by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/632
- Add FHIR de-identify operation wrapper to use the deidentify() in openmed/core/pii.py by @Sidharth1743 in https://github.com/maziyarpanahi/openmed/pull/631
- Add dynamic request batching to the REST service inference path by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/630
- Add CDA/CCDA XML de-identification by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/629
- Publish static OpenAPI spec for REST service by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/628
- Add an AWQ 4-bit quantization recipe for token-classification families by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/627
- Add HL7 v2 message de-identification by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/626
- Add CSV/TSV PHI column redaction by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/625
- Add spaCy pipeline component for PII de-identification by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/624
- Build the Mode-A knowledge-distillation pipeline by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/622
- Add progress callbacks to BatchProcessor by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/621
- Add INT4 MLX recall certification by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/620
- Harden CoreML conversion to full token-classification family coverage and INT8 palettization by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/619
- Add the DrugProt public relation-extraction eval suite by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/617
- test: add python-dateutil to dev extras and a dual-path parity test by @otmanm in https://github.com/maziyarpanahi/openmed/pull/616
- fix: sync dev extra lock metadata by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/649
- build(deps): bump the github-actions group across 1 directory with 4 updates by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/607
- docs: add per-method de-identification quickstart by @abdouloued in https://github.com/maziyarpanahi/openmed/pull/409
- OM-334 Add lab reference range flag helper by @Ispagiytiy in https://github.com/maziyarpanahi/openmed/pull/560
- refactor: extract deterministic FHIR reference helper by @prakashiitp in https://github.com/maziyarpanahi/openmed/pull/553
- feat: add microbiology domain scaffolding (closes #314) by @Zeesky-code in https://github.com/maziyarpanahi/openmed/pull/410
- ci: use uv for test dependency setup by @nyxst4ck in https://github.com/maziyarpanahi/openmed/pull/185
- Proudly add #1 trending repo of the day by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/697
- Add a to_dataframe() helper to the typed de-identification result by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/706
- Add a Swift de-identification result-to-JSON exporter matching the Python schema by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/692
- Add a first-5-minutes redact-extract-FHIR example on synthetic data by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/694
- Add a redaction preview diff over original and redacted text by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/695
- Add eval dataset cards by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/701
- Add a per-section recall report for clinical notes by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/703
- Add a clinical-entities-to-flat-table exporter for analytics by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/705
- fix: validate GitHub Actions refs in CI by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/700
- Add eval result caching keyed by model, suite, and code hash by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/702
- Add a CI lockfile-drift gate verifying uv.lock matches pyproject by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/693
- Add opt-in result cache for analysis and de-identification by @coolstick784 in https://github.com/maziyarpanahi/openmed/pull/708
- build(deps): bump https://github.com/astral-sh/ruff-pre-commit from v0.15.18 to 0.15.20 in the pre-commit-hooks group by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/710
- build(deps-dev): bump the python-dependencies group with 2 updates by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/715
- build(deps): bump actions/setup-python from 5 to 6 by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/711
- build(deps): bump actions/cache from 5 to 6 by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/712
- build(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/713
- build(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in https://github.com/maziyarpanahi/openmed/pull/714
- Add clinical term protection list by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/698
- Add Metal/MPS device-selection and perf-tuning for the torch backend by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/719
- feat: add OCR language-pack configuration for non-English clinical scans by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/717
- feat: add Polish PESEL and South Korean RRN national-ID validators by @AlexFucuson9 in https://github.com/maziyarpanahi/openmed/pull/709
- docs: add root CONTRIBUTING.md and CODE_OF_CONDUCT.md by @annaladasur in https://github.com/maziyarpanahi/openmed/pull/716
- feat: add leakage heatmap by label and language (OM-403) by @SACHokstack in https://github.com/maziyarpanahi/openmed/pull/725
- feat: add a membership-inference probe to the re-identification attack modes by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/724
- feat: add k-anonymity, l-diversity and t-closeness measurement for tabular outputs by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/723
- feat(service): split liveness/readiness probes and add graceful shutdown by @mvanhorn in https://github.com/maziyarpanahi/openmed/pull/722
- Add an openmed models recommend command for device-fit selection by @cycsmail in https://github.com/maziyarpanahi/openmed/pull/721
- feat: add CycloneDX SBOM generation, CI artifact, and release attachment by @annaladasur in https://github.com/maziyarpanahi/openmed/pull/720
- feat: add clinical-concept canonical labels for grounding by @pardeep-singh in https://github.com/maziyarpanahi/openmed/pull/718
- Add a golden-fixture coverage report by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/688
- feat: add openmed doctor environment diagnostics command by @prakashiitp in https://github.com/maziyarpanahi/openmed/pull/730
- Add a consistent cross-document surrogate vault for stable pseudonyms by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/729
- Add a gate-evidence bundler that assembles the G1a-G8 evidence pack by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/735
- Extend model publishing to ONNX and quantized artifacts by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/736
- Add NDJSON FHIR bulk-export ingestion and de-identification by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/737
- Add a sentence-windowed ConText cue scanner that emits scoped modifier hits by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/738
- Scope ConText assertions to their note section by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/739
- Add an audit-report diff tool for comparing two de-identification runs by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/740
- Add rate-limit and concurrency-limit middleware to the REST service by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/742
- Add a vital-signs structuring extractor for blood pressure, heart rate, temperature and oxygen saturation by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/683
- Add the public biomedical-NER benchmark suite (BC5CDR, NCBI Disease, JNLPBA, Species-800, BC2GM) by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/743
- Define the Nano-tier distillation target spec and SLO certification check by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/744
- Add an Indonesian (id) PII language pack with NIK validator by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/747
- Add EasyOCR engine adapter to the OCR contract by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/749
- Add a tokenizer caching layer to avoid repeated tokenizer loads by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/751
- Expand multilingual golden eval fixtures with three new languages by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/752
- Add flaky eval variance detection by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/753
- Add paired significance testing between two benchmark runs by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/754
- Add a universal image and document metadata scrubber for embedded PHI by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/755
- Add a TypeScript REST client SDK for the de-identification service by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/756
- Add Kafka streaming de-identification connector by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/757
- Add a GPTQ 4-bit quantization recipe with a shared calibration loader by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/759
- Add an opt-in flash-attention / SDPA attention backend selector by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/761
- Add calibration and reliability diagram data to the eval harness by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/762
- Add runnable doctest examples to core public functions by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/763
- Add an over-redaction and clinical-utility-loss eval report by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/765
- Add a locale-aware date and number format normalization helper by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/766
- Add status vocabulary normalization helpers by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/767
- Add an Australia Privacy Act policy profile as a data-driven config by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/769
- Add a GDPR Article 9 special-category-health policy profile by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/770
- Add policy-profile config diffing by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/771
- Tighten openmed doctor diagnostics reporting by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/772
- Add medication-sig frequency and duration normalization helper by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/773
- Add a release-gate dry-run preview that scores gates without writing a signed report by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/775
- Add an openmed fhir CLI subcommand over the FHIR Bundle assembler by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/777
- Add format-preserving redaction action for structured identifiers by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/778
- Add a minimum-necessary redaction-strength selector by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/779
- Raise a clear error when a required optional extra is missing in the pipeline by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/781
- Reduce safety-sweep over-redaction from bare numeric identifier patterns by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/783
- Add FHIR Provenance and AuditEvent emission from signed audit reports by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/784
- Wire the clinical section detector into the pipeline section hook by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/785
- Add risk dashboard renderer by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/786
- Add an optional Prometheus-style metrics endpoint exposing counts and latency only by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/788
- Generate a typed Python REST client from the committed OpenAPI spec by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/789
- fix(core,eval,ner,risk): guard json.loads against JSONDecodeError by @AlexFucuson9 in https://github.com/maziyarpanahi/openmed/pull/958
- Add a policy-profile validator and linter with a CLI command by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/728
- Add a linkage attack mode against an external quasi-identifier table by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/732
- Document the clinical context and extraction-depth layer in the docs site by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/774
- Add model card preview command by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/776
- Add custom deny and allow recognizer by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/696
- Add Transformers.js export target for browser token classification by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/790
- Add PDF coordinate projection for multimodal redaction by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/726
- Add a Unicode script-detection and mixed-script segmentation helper for i18n PII by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/609
- Add locale national ID provider registry by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/610
- Add typed AnalyzeResult object returned by analyze_text by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/611
- Build the DAPT corpus assembler with versioned passage manifest by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/612
- Add the active-learning queue runtime for gate failures and low-agreement spans by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/613
- Add the locale PHI synthetic data generator for per-language training by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/614
- Add the i2b2 2006/2014 de-identification eval-only loader with PHI category map by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/615
- Add a pipeline explain() trace view that justifies each span's final action by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/727
- Add streaming incremental de-identification over chunked text by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/731
- Add per-document risk budgeting with fail-closed enforcement by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/733
- Add a policy-profile compliance eval for the six bundled de-identification profiles by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/734
- Add an openmed deid CLI subcommand wrapping the de-identification pipeline by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/741
- Add a leakage heatmap by label and language by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/680
- Add Swift deidentify policy profiles by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/685
- Add a per-model scorecard generator for the eval harness by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/681
- Add a confidence-threshold sweep report with precision-recall curve by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/682
- Add a problem-list deduplication and clinical-status reconciliation helper by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/684
- Add Philter, pyDeid, and GLiNER-BioMed comparator adapters by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/372
- Add Markdown and AsciiDoc text extraction with char-offset map by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/745
- Add a Thai (th) PII language pack by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/746
- Add Hebrew RTL PII language pack by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/748
- Add service request coalescing by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/750
- Add JSONL chat-log de-identification with role and turn structure preservation by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/758
- Add a bitsandbytes 4-bit load-time quantization option for the model loader by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/760
- Add cross-release benchmark history diffing by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/764
- Add a UK ICO policy profile as a data-driven config by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/768
- Prevent ConText scope leakage across sentence boundaries by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/782
- Add openmed audit and risk CLI subcommands over the audit and risk APIs by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/787
- Add configurable CORS and trusted-host middleware by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/686
- Add code-system version pinning and provenance stamping for exported codes by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/689
- Add a CodeableConcept text-fallback consistency check by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/690
- Add a clinical document summary card with no PHI by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/691
- Add patient-keyed stable cross-document date shifting by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/704
- Add manifest registry diff between releases by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/780
- feat: add docTR OCR engine adapter with absolute coordinate conversion by @VishnuPrasath-S-20 in https://github.com/maziyarpanahi/openmed/pull/558
- docs: add breach notification runbook and report template by @prakashiitp in https://github.com/maziyarpanahi/openmed/pull/1021
- Generalize the span decoder into a span-relation graph decoder by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1020
- fix: add explicit UTF-8 encoding to subprocess and file I/O calls by @AlexFucuson9 in https://github.com/maziyarpanahi/openmed/pull/1088
- fix: add timeout to subprocess.run calls to prevent indefinite hangs by @AlexFucuson9 in https://github.com/maziyarpanahi/openmed/pull/1090
- Reproducible lock by @KaustAbhinand in https://github.com/maziyarpanahi/openmed/pull/1083
- fix: use lazy logging with %s formatting (20 instances) by @AlexFucuson9 in https://github.com/maziyarpanahi/openmed/pull/1092
New Contributors¶
- @Sidharth1743 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/566
- @VishnuPrasath-S-20 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/568
- @gitcommit90 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/557
- @AbrarH4 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/561
- @elysianx138 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/564
- @otmanm made their first contribution in https://github.com/maziyarpanahi/openmed/pull/604
- @AlexFucuson9 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/646
- @annaladasur made their first contribution in https://github.com/maziyarpanahi/openmed/pull/648
- @blut-agent made their first contribution in https://github.com/maziyarpanahi/openmed/pull/647
- @mvanhorn made their first contribution in https://github.com/maziyarpanahi/openmed/pull/645
- @sharrmeen made their first contribution in https://github.com/maziyarpanahi/openmed/pull/642
- @abdouloued made their first contribution in https://github.com/maziyarpanahi/openmed/pull/409
- @Ispagiytiy made their first contribution in https://github.com/maziyarpanahi/openmed/pull/560
- @prakashiitp made their first contribution in https://github.com/maziyarpanahi/openmed/pull/553
- @Zeesky-code made their first contribution in https://github.com/maziyarpanahi/openmed/pull/410
- @nyxst4ck made their first contribution in https://github.com/maziyarpanahi/openmed/pull/185
- @coolstick784 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/708
- @SACHokstack made their first contribution in https://github.com/maziyarpanahi/openmed/pull/725
- @KaustAbhinand made their first contribution in https://github.com/maziyarpanahi/openmed/pull/1083
Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.6.0...v1.7.0