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.
- 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.
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.
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.
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 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.
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
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
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
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
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
- 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.
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.
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
- 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.
- 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.
- feat: declare the [multimodal] extra and ingest/redact contract by @pardeep-singh in maziyarpanahi/openmed#555
- feat:added FHIR OperationOutcome builder for exporter and validation results by @Sidharth1743 in maziyarpanahi/openmed#566
- feat: add dermatology and ophthalmology domains to NER catalog by @pardeep-singh in maziyarpanahi/openmed#552
- feat: add Tesseract and PaddleOCR engine adapters with a common OCR result contract by @pardeep-singh in maziyarpanahi/openmed#567
- Build the hard-negative harness for training batches by @maziyarpanahi in maziyarpanahi/openmed#349
- Feature/lab parser by @VishnuPrasath-S-20 in maziyarpanahi/openmed#568
- Add per-language locale and national-ID surrogate coherence regression suite by @cycsmail in maziyarpanahi/openmed#562
- Add the LangChain redaction wrapper integration spike by @maziyarpanahi in maziyarpanahi/openmed#373
- Define the nightly trust results schema by @maziyarpanahi in maziyarpanahi/openmed#379
- Add ONNX and WebGPU export artifacts by @maziyarpanahi in maziyarpanahi/openmed#383
- Define DirectID tiny head contract by @maziyarpanahi in maziyarpanahi/openmed#603
- Add clinical PHI flagship dataset manifest by @maziyarpanahi in maziyarpanahi/openmed#388
- fix: correct misleading message in _run_basic_tui_entry fallback (Fixes #399) by @rtmalikian in maziyarpanahi/openmed#407
- fix: reject duplicate resource ids in FHIR Bundle assembler by @gitcommit90 in maziyarpanahi/openmed#557
- feat: add Canada PIPEDA policy profile and register alias by @AbrarH4 in maziyarpanahi/openmed#561
- Fix Unicode offset redaction in pipeline by @alberthammerich in maziyarpanahi/openmed#563
- feat: add docker-compose.yml with HF cache volume and healthcheckout by @elysianx138 in maziyarpanahi/openmed#564
- Add clinical negation axis by @alberthammerich in maziyarpanahi/openmed#565
- fix: never auto-select a zero-day date shift offset by @otmanm in maziyarpanahi/openmed#604
- Add negation-trap and quasi-identifier uniqueness regression suites by @maziyarpanahi in maziyarpanahi/openmed#351
- Publish model fleet freshness metrics from the manifest by @maziyarpanahi in maziyarpanahi/openmed#337
- fix: preserve slash/dash date format for 2-digit years by @otmanm in maziyarpanahi/openmed#605
- Add fairness eval by demographic group by @maziyarpanahi in maziyarpanahi/openmed#633
- Add a robustness eval with typo, OCR-noise and casing perturbations by @maziyarpanahi in maziyarpanahi/openmed#634
- Add a per-entity confusion-matrix and error-analysis report by @maziyarpanahi in maziyarpanahi/openmed#635
- Add clinical assertion context record by @maziyarpanahi in maziyarpanahi/openmed#636
- Add a manifest schema validator command and CI gate by @maziyarpanahi in maziyarpanahi/openmed#637
- Add clinical context trap regression suite by @maziyarpanahi in maziyarpanahi/openmed#638
- Fix PII language count source of truth drift by @maziyarpanahi in maziyarpanahi/openmed#640
- Add custom detector plugin API by @maziyarpanahi in maziyarpanahi/openmed#643
- Enrich model manifest fields by @maziyarpanahi in maziyarpanahi/openmed#639
- Add model discovery search over manifest by @maziyarpanahi in maziyarpanahi/openmed#641
- fix: change keep_year default from True to False to preserve date intervals by @AlexFucuson9 in maziyarpanahi/openmed#646
- docs: add SECURITY.md responsible-disclosure policy and private reporting by @annaladasur in maziyarpanahi/openmed#648
- docs: add contributor onboarding guide by @blut-agent in maziyarpanahi/openmed#647
- fix: deterministic ordering of audit span records across runs by @mvanhorn in maziyarpanahi/openmed#645
- Add Laneformer MLX language model runtime by @maziyarpanahi in maziyarpanahi/openmed#644
- feat: add standalone FHIR CodeableConcept builder by @sharrmeen in maziyarpanahi/openmed#642
- Add service model warm pool by @maziyarpanahi in maziyarpanahi/openmed#632
- Add FHIR de-identify operation wrapper to use the deidentify() in openmed/core/pii.py by @Sidharth1743 in maziyarpanahi/openmed#631
- Add dynamic request batching to the REST service inference path by @maziyarpanahi in maziyarpanahi/openmed#630
- Add CDA/CCDA XML de-identification by @maziyarpanahi in maziyarpanahi/openmed#629
- Publish static OpenAPI spec for REST service by @maziyarpanahi in maziyarpanahi/openmed#628
- Add an AWQ 4-bit quantization recipe for token-classification families by @maziyarpanahi in maziyarpanahi/openmed#627
- Add HL7 v2 message de-identification by @maziyarpanahi in maziyarpanahi/openmed#626
- Add CSV/TSV PHI column redaction by @maziyarpanahi in maziyarpanahi/openmed#625
- Add spaCy pipeline component for PII de-identification by @maziyarpanahi in maziyarpanahi/openmed#624
- Build the Mode-A knowledge-distillation pipeline by @maziyarpanahi in maziyarpanahi/openmed#622
- Add progress callbacks to BatchProcessor by @maziyarpanahi in maziyarpanahi/openmed#621
- Add INT4 MLX recall certification by @maziyarpanahi in maziyarpanahi/openmed#620
- Harden CoreML conversion to full token-classification family coverage and INT8 palettization by @maziyarpanahi in maziyarpanahi/openmed#619
- Add the DrugProt public relation-extraction eval suite by @maziyarpanahi in maziyarpanahi/openmed#617
- test: add python-dateutil to dev extras and a dual-path parity test by @otmanm in maziyarpanahi/openmed#616
- fix: sync dev extra lock metadata by @maziyarpanahi in maziyarpanahi/openmed#649
- build(deps): bump the github-actions group across 1 directory with 4 updates by @dependabot[bot] in maziyarpanahi/openmed#607
- docs: add per-method de-identification quickstart by @abdouloued in maziyarpanahi/openmed#409
- OM-334 Add lab reference range flag helper by @Ispagiytiy in maziyarpanahi/openmed#560
- refactor: extract deterministic FHIR reference helper by @prakashiitp in maziyarpanahi/openmed#553
- feat: add microbiology domain scaffolding (closes #314) by @Zeesky-code in maziyarpanahi/openmed#410
- ci: use uv for test dependency setup by @nyxst4ck in maziyarpanahi/openmed#185
- Proudly add #1 trending repo of the day by @maziyarpanahi in maziyarpanahi/openmed#697
- Add a to_dataframe() helper to the typed de-identification result by @maziyarpanahi in maziyarpanahi/openmed#706
- Add a Swift de-identification result-to-JSON exporter matching the Python schema by @maziyarpanahi in maziyarpanahi/openmed#692
- Add a first-5-minutes redact-extract-FHIR example on synthetic data by @maziyarpanahi in maziyarpanahi/openmed#694
- Add a redaction preview diff over original and redacted text by @maziyarpanahi in maziyarpanahi/openmed#695
- Add eval dataset cards by @maziyarpanahi in maziyarpanahi/openmed#701
- Add a per-section recall report for clinical notes by @maziyarpanahi in maziyarpanahi/openmed#703
- Add a clinical-entities-to-flat-table exporter for analytics by @maziyarpanahi in maziyarpanahi/openmed#705
- fix: validate GitHub Actions refs in CI by @maziyarpanahi in maziyarpanahi/openmed#700
- Add eval result caching keyed by model, suite, and code hash by @maziyarpanahi in maziyarpanahi/openmed#702
- Add a CI lockfile-drift gate verifying uv.lock matches pyproject by @maziyarpanahi in maziyarpanahi/openmed#693
- Add opt-in result cache for analysis and de-identification by @coolstick784 in maziyarpanahi/openmed#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 maziyarpanahi/openmed#710
- build(deps-dev): bump the python-dependencies group with 2 updates by @dependabot[bot] in maziyarpanahi/openmed#715
- build(deps): bump actions/setup-python from 5 to 6 by @dependabot[bot] in maziyarpanahi/openmed#711
- build(deps): bump actions/cache from 5 to 6 by @dependabot[bot] in maziyarpanahi/openmed#712
- build(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in maziyarpanahi/openmed#713
- build(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in maziyarpanahi/openmed#714
- Add clinical term protection list by @maziyarpanahi in maziyarpanahi/openmed#698
- Add Metal/MPS device-selection and perf-tuning for the torch backend by @maziyarpanahi in maziyarpanahi/openmed#719
- feat: add OCR language-pack configuration for non-English clinical scans by @pardeep-singh in maziyarpanahi/openmed#717
- feat: add Polish PESEL and South Korean RRN national-ID validators by @AlexFucuson9 in maziyarpanahi/openmed#709
- docs: add root CONTRIBUTING.md and CODE_OF_CONDUCT.md by @annaladasur in maziyarpanahi/openmed#716
- feat: add leakage heatmap by label and language (OM-403) by @SACHokstack in maziyarpanahi/openmed#725
- feat: add a membership-inference probe to the re-identification attack modes by @pardeep-singh in maziyarpanahi/openmed#724
- feat: add k-anonymity, l-diversity and t-closeness measurement for tabular outputs by @pardeep-singh in maziyarpanahi/openmed#723
- feat(service): split liveness/readiness probes and add graceful shutdown by @mvanhorn in maziyarpanahi/openmed#722
- Add an openmed models recommend command for device-fit selection by @cycsmail in maziyarpanahi/openmed#721
- feat: add CycloneDX SBOM generation, CI artifact, and release attachment by @annaladasur in maziyarpanahi/openmed#720
- feat: add clinical-concept canonical labels for grounding by @pardeep-singh in maziyarpanahi/openmed#718
- Add a golden-fixture coverage report by @maziyarpanahi in maziyarpanahi/openmed#688
- feat: add openmed doctor environment diagnostics command by @prakashiitp in maziyarpanahi/openmed#730
- Add a consistent cross-document surrogate vault for stable pseudonyms by @maziyarpanahi in maziyarpanahi/openmed#729
- Add a gate-evidence bundler that assembles the G1a-G8 evidence pack by @maziyarpanahi in maziyarpanahi/openmed#735
- Extend model publishing to ONNX and quantized artifacts by @maziyarpanahi in maziyarpanahi/openmed#736
- Add NDJSON FHIR bulk-export ingestion and de-identification by @maziyarpanahi in maziyarpanahi/openmed#737
- Add a sentence-windowed ConText cue scanner that emits scoped modifier hits by @maziyarpanahi in maziyarpanahi/openmed#738
- Scope ConText assertions to their note section by @maziyarpanahi in maziyarpanahi/openmed#739
- Add an audit-report diff tool for comparing two de-identification runs by @maziyarpanahi in maziyarpanahi/openmed#740
- Add rate-limit and concurrency-limit middleware to the REST service by @maziyarpanahi in maziyarpanahi/openmed#742
- Add a vital-signs structuring extractor for blood pressure, heart rate, temperature and oxygen saturation by @maziyarpanahi in maziyarpanahi/openmed#683
- Add the public biomedical-NER benchmark suite (BC5CDR, NCBI Disease, JNLPBA, Species-800, BC2GM) by @maziyarpanahi in maziyarpanahi/openmed#743
- Define the Nano-tier distillation target spec and SLO certification check by @maziyarpanahi in maziyarpanahi/openmed#744
- Add an Indonesian (id) PII language pack with NIK validator by @maziyarpanahi in maziyarpanahi/openmed#747
- Add EasyOCR engine adapter to the OCR contract by @maziyarpanahi in maziyarpanahi/openmed#749
- Add a tokenizer caching layer to avoid repeated tokenizer loads by @maziyarpanahi in maziyarpanahi/openmed#751
- Expand multilingual golden eval fixtures with three new languages by @maziyarpanahi in maziyarpanahi/openmed#752
- Add flaky eval variance detection by @maziyarpanahi in maziyarpanahi/openmed#753
- Add paired significance testing between two benchmark runs by @maziyarpanahi in maziyarpanahi/openmed#754
- Add a universal image and document metadata scrubber for embedded PHI by @maziyarpanahi in maziyarpanahi/openmed#755
- Add a TypeScript REST client SDK for the de-identification service by @maziyarpanahi in maziyarpanahi/openmed#756
- Add Kafka streaming de-identification connector by @maziyarpanahi in maziyarpanahi/openmed#757
- Add a GPTQ 4-bit quantization recipe with a shared calibration loader by @maziyarpanahi in maziyarpanahi/openmed#759
- Add an opt-in flash-attention / SDPA attention backend selector by @maziyarpanahi in maziyarpanahi/openmed#761
- Add calibration and reliability diagram data to the eval harness by @maziyarpanahi in maziyarpanahi/openmed#762
- Add runnable doctest examples to core public functions by @maziyarpanahi in maziyarpanahi/openmed#763
- Add an over-redaction and clinical-utility-loss eval report by @maziyarpanahi in maziyarpanahi/openmed#765
- Add a locale-aware date and number format normalization helper by @maziyarpanahi in maziyarpanahi/openmed#766
- Add status vocabulary normalization helpers by @maziyarpanahi in maziyarpanahi/openmed#767
- Add an Australia Privacy Act policy profile as a data-driven config by @maziyarpanahi in maziyarpanahi/openmed#769
- Add a GDPR Article 9 special-category-health policy profile by @maziyarpanahi in maziyarpanahi/openmed#770
- Add policy-profile config diffing by @maziyarpanahi in maziyarpanahi/openmed#771
- Tighten openmed doctor diagnostics reporting by @maziyarpanahi in maziyarpanahi/openmed#772
- Add medication-sig frequency and duration normalization helper by @maziyarpanahi in maziyarpanahi/openmed#773
- Add a release-gate dry-run preview that scores gates without writing a signed report by @maziyarpanahi in maziyarpanahi/openmed#775
- Add an openmed fhir CLI subcommand over the FHIR Bundle assembler by @maziyarpanahi in maziyarpanahi/openmed#777
- Add format-preserving redaction action for structured identifiers by @maziyarpanahi in maziyarpanahi/openmed#778
- Add a minimum-necessary redaction-strength selector by @maziyarpanahi in maziyarpanahi/openmed#779
- Raise a clear error when a required optional extra is missing in the pipeline by @maziyarpanahi in maziyarpanahi/openmed#781
- Reduce safety-sweep over-redaction from bare numeric identifier patterns by @maziyarpanahi in maziyarpanahi/openmed#783
- Add FHIR Provenance and AuditEvent emission from signed audit reports by @maziyarpanahi in maziyarpanahi/openmed#784
- Wire the clinical section detector into the pipeline section hook by @maziyarpanahi in maziyarpanahi/openmed#785
- Add risk dashboard renderer by @maziyarpanahi in maziyarpanahi/openmed#786
- Add an optional Prometheus-style metrics endpoint exposing counts and latency only by @maziyarpanahi in maziyarpanahi/openmed#788
- Generate a typed Python REST client from the committed OpenAPI spec by @maziyarpanahi in maziyarpanahi/openmed#789
- fix(core,eval,ner,risk): guard json.loads against JSONDecodeError by @AlexFucuson9 in maziyarpanahi/openmed#958
- Add a policy-profile validator and linter with a CLI command by @maziyarpanahi in maziyarpanahi/openmed#728
- Add a linkage attack mode against an external quasi-identifier table by @maziyarpanahi in maziyarpanahi/openmed#732
- Document the clinical context and extraction-depth layer in the docs site by @maziyarpanahi in maziyarpanahi/openmed#774
- Add model card preview command by @maziyarpanahi in maziyarpanahi/openmed#776
- Add custom deny and allow recognizer by @maziyarpanahi in maziyarpanahi/openmed#696
- Add Transformers.js export target for browser token classification by @maziyarpanahi in maziyarpanahi/openmed#790
- Add PDF coordinate projection for multimodal redaction by @maziyarpanahi in maziyarpanahi/openmed#726
- Add a Unicode script-detection and mixed-script segmentation helper for i18n PII by @maziyarpanahi in maziyarpanahi/openmed#609
- Add locale national ID provider registry by @maziyarpanahi in maziyarpanahi/openmed#610
- Add typed AnalyzeResult object returned by analyze_text by @maziyarpanahi in maziyarpanahi/openmed#611
- Build the DAPT corpus assembler with versioned passage manifest by @maziyarpanahi in maziyarpanahi/openmed#612
- Add the active-learning queue runtime for gate failures and low-agreement spans by @maziyarpanahi in maziyarpanahi/openmed#613
- Add the locale PHI synthetic data generator for per-language training by @maziyarpanahi in maziyarpanahi/openmed#614
- Add the i2b2 2006/2014 de-identification eval-only loader with PHI category map by @maziyarpanahi in maziyarpanahi/openmed#615
- Add a pipeline explain() trace view that justifies each span's final action by @maziyarpanahi in maziyarpanahi/openmed#727
- Add streaming incremental de-identification over chunked text by @maziyarpanahi in maziyarpanahi/openmed#731
- Add per-document risk budgeting with fail-closed enforcement by @maziyarpanahi in maziyarpanahi/openmed#733
- Add a policy-profile compliance eval for the six bundled de-identification profiles by @maziyarpanahi in maziyarpanahi/openmed#734
- Add an openmed deid CLI subcommand wrapping the de-identification pipeline by @maziyarpanahi in maziyarpanahi/openmed#741
- Add a leakage heatmap by label and language by @maziyarpanahi in maziyarpanahi/openmed#680
- Add Swift deidentify policy profiles by @maziyarpanahi in maziyarpanahi/openmed#685
- Add a per-model scorecard generator for the eval harness by @maziyarpanahi in maziyarpanahi/openmed#681
- Add a confidence-threshold sweep report with precision-recall curve by @maziyarpanahi in maziyarpanahi/openmed#682
- Add a problem-list deduplication and clinical-status reconciliation helper by @maziyarpanahi in maziyarpanahi/openmed#684
- Add Philter, pyDeid, and GLiNER-BioMed comparator adapters by @maziyarpanahi in maziyarpanahi/openmed#372
- Add Markdown and AsciiDoc text extraction with char-offset map by @maziyarpanahi in maziyarpanahi/openmed#745
- Add a Thai (th) PII language pack by @maziyarpanahi in maziyarpanahi/openmed#746
- Add Hebrew RTL PII language pack by @maziyarpanahi in maziyarpanahi/openmed#748
- Add service request coalescing by @maziyarpanahi in maziyarpanahi/openmed#750
- Add JSONL chat-log de-identification with role and turn structure preservation by @maziyarpanahi in maziyarpanahi/openmed#758
- Add a bitsandbytes 4-bit load-time quantization option for the model loader by @maziyarpanahi in maziyarpanahi/openmed#760
- Add cross-release benchmark history diffing by @maziyarpanahi in maziyarpanahi/openmed#764
- Add a UK ICO policy profile as a data-driven config by @maziyarpanahi in maziyarpanahi/openmed#768
- Prevent ConText scope leakage across sentence boundaries by @maziyarpanahi in maziyarpanahi/openmed#782
- Add openmed audit and risk CLI subcommands over the audit and risk APIs by @maziyarpanahi in maziyarpanahi/openmed#787
- Add configurable CORS and trusted-host middleware by @maziyarpanahi in maziyarpanahi/openmed#686
- Add code-system version pinning and provenance stamping for exported codes by @maziyarpanahi in maziyarpanahi/openmed#689
- Add a CodeableConcept text-fallback consistency check by @maziyarpanahi in maziyarpanahi/openmed#690
- Add a clinical document summary card with no PHI by @maziyarpanahi in maziyarpanahi/openmed#691
- Add patient-keyed stable cross-document date shifting by @maziyarpanahi in maziyarpanahi/openmed#704
- Add manifest registry diff between releases by @maziyarpanahi in maziyarpanahi/openmed#780
- feat: add docTR OCR engine adapter with absolute coordinate conversion by @VishnuPrasath-S-20 in maziyarpanahi/openmed#558
- docs: add breach notification runbook and report template by @prakashiitp in maziyarpanahi/openmed#1021
- Generalize the span decoder into a span-relation graph decoder by @maziyarpanahi in maziyarpanahi/openmed#1020
- fix: add explicit UTF-8 encoding to subprocess and file I/O calls by @AlexFucuson9 in maziyarpanahi/openmed#1088
- fix: add timeout to subprocess.run calls to prevent indefinite hangs by @AlexFucuson9 in maziyarpanahi/openmed#1090
- Reproducible lock by @KaustAbhinand in maziyarpanahi/openmed#1083
- fix: use lazy logging with %s formatting (20 instances) by @AlexFucuson9 in maziyarpanahi/openmed#1092
- @Sidharth1743 made their first contribution in maziyarpanahi/openmed#566
- @VishnuPrasath-S-20 made their first contribution in maziyarpanahi/openmed#568
- @gitcommit90 made their first contribution in maziyarpanahi/openmed#557
- @AbrarH4 made their first contribution in maziyarpanahi/openmed#561
- @elysianx138 made their first contribution in maziyarpanahi/openmed#564
- @otmanm made their first contribution in maziyarpanahi/openmed#604
- @AlexFucuson9 made their first contribution in maziyarpanahi/openmed#646
- @annaladasur made their first contribution in maziyarpanahi/openmed#648
- @blut-agent made their first contribution in maziyarpanahi/openmed#647
- @mvanhorn made their first contribution in maziyarpanahi/openmed#645
- @sharrmeen made their first contribution in maziyarpanahi/openmed#642
- @abdouloued made their first contribution in maziyarpanahi/openmed#409
- @Ispagiytiy made their first contribution in maziyarpanahi/openmed#560
- @prakashiitp made their first contribution in maziyarpanahi/openmed#553
- @Zeesky-code made their first contribution in maziyarpanahi/openmed#410
- @nyxst4ck made their first contribution in maziyarpanahi/openmed#185
- @coolstick784 made their first contribution in maziyarpanahi/openmed#708
- @SACHokstack made their first contribution in maziyarpanahi/openmed#725
- @KaustAbhinand made their first contribution in maziyarpanahi/openmed#1083
Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.6.0...v1.7.0