Local-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 1,000+ medical models, 12 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0
This report presents the forensic synthetic code analysis of maziyarpanahi/openmed, a Python project with 4,553 GitHub stars. SynthScan v2.0 examined 338,767 lines of code across 1224 source files, recording 7760 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 25.7 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 7760 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/core/repro_hash.py | 38 | def compute_reproducibility_hash( | CODE |
| LOW | openmed/core/repro_hash.py | 88 | def compute_environment_lock_digest(lock_path: str | Path = "uv.lock") -> str: | CODE |
| LOW | openmed/core/repro_hash.py | 94 | def compute_training_reproducibility_hash( | CODE |
| LOW | openmed/core/repro_hash.py | 124 | def build_training_provenance( | CODE |
| LOW | openmed/core/repro_hash.py | 172 | def write_training_provenance( | CODE |
| LOW | openmed/core/repro_hash.py | 280 | def _normalise_training_provenance(provenance: Mapping[str, Any]) -> dict[str, Any]: | CODE |
| LOW | openmed/core/repro_hash.py | 353 | def _verify_manifest_row_hash(row: Mapping[str, Any], recorded_hash: str) -> None: | CODE |
| LOW | openmed/core/quality_gates.py | 328 | def validate_entity_spans_strict( | CODE |
| LOW | openmed/core/quality_gates.py | 389 | def resolve_overlapping_entities( | CODE |
| LOW | openmed/core/quality_gates.py | 453 | def detect_overlapping_entities( | CODE |
| LOW | openmed/core/audit.py | 607 | def export_review_bundle_json(self) -> str: | CODE |
| LOW | openmed/core/models.py | 536 | def _resolve_attn_implementation( | CODE |
| LOW | openmed/core/models.py | 549 | def _apply_attention_pipeline_kwargs(self, pipeline_kwargs: Dict[str, Any]) -> None: | CODE |
| LOW | openmed/core/models.py | 624 | def _build_load_quantization_config( | CODE |
| LOW | openmed/core/models.py | 656 | def _build_pipeline_cache_key( | CODE |
| LOW | openmed/core/thresholds.py | 151 | def validate_threshold_matrix(matrix: Mapping[str, Any]) -> None: | CODE |
| LOW | openmed/core/thresholds.py | 244 | def membership_defense_for_profile( | CODE |
| LOW | openmed/core/thresholds.py | 274 | def apply_membership_defense_to_score( | CODE |
| LOW | openmed/core/thresholds.py | 457 | def _validate_membership_defense(entry: Any, path: str) -> None: | CODE |
| LOW | openmed/core/locale_formats.py | 536 | def _parsed_date_from_candidate( | CODE |
| LOW | openmed/core/locale_formats.py | 549 | def _normalize_number_with_locale( | CODE |
| LOW | openmed/core/locale_formats.py | 579 | def _normalize_number_without_locale(value: str, sign: str) -> NormalizedNumber: | CODE |
| LOW | openmed/core/locale_formats.py | 635 | def _normalize_space_grouped_number(value: str, sign: str) -> NormalizedNumber: | CODE |
| LOW | openmed/core/locale_formats.py | 650 | def _clean_valid_space_grouping(value: str) -> str | None: | CODE |
| LOW | openmed/core/locale_formats.py | 684 | def _invalid_or_ambiguous_number(part: str) -> NormalizedNumber: | CODE |
| LOW | openmed/core/hf_hub.py | 264 | def _import_snapshot_download() -> tuple[Any, type[Exception]]: | CODE |
| LOW | openmed/core/arbitration.py | 395 | def _collapse_exact_duplicates( | CODE |
| LOW | openmed/core/offline.py | 65 | def network_blocked_if_offline( | CODE |
| LOW | openmed/core/pii_entity_merger.py | 712 | def merge_entities_with_semantic_units( | CODE |
| LOW | openmed/core/pii_entity_merger.py | 892 | def _coalesce_overlapping_merged_entities( | CODE |
| LOW | openmed/core/custom_recognizer.py | 276 | def apply_to_prediction_result( | CODE |
| LOW | openmed/core/script_detect.py | 313 | def candidate_languages_for_script(script: str) -> tuple[str, ...]: | CODE |
| LOW | openmed/core/script_detect.py | 319 | def normalize_for_pii_detection(text: str) -> DetectionNormalization: | CODE |
| LOW | openmed/core/clinical_protect.py | 89 | def _load_bundled_terms_cached() -> tuple[str, ...]: | CODE |
| LOW | openmed/core/clinical_protect.py | 156 | def protection_options_from_config(config: Any) -> dict[str, Any]: | CODE |
| LOW | openmed/core/clinical_protect.py | 291 | def _looks_like_direct_identifier(surface: str) -> bool: | CODE |
| LOW | openmed/core/backends.py | 200 | def select_privacy_filter_backend( | CODE |
| LOW | openmed/core/backends.py | 230 | def resolve_privacy_filter_model( | CODE |
| LOW | openmed/core/backends.py | 260 | def create_privacy_filter_pipeline(model_name: str, config: Any = None) -> Callable: | CODE |
| LOW | openmed/core/policy_lint.py | 231 | def _loads_tracking_duplicates(raw_json: str) -> Mapping[str, Any]: | CODE |
| LOW | openmed/core/policy_lint.py | 314 | def _policy_label_action_errors( | CODE |
| LOW | openmed/core/policy_lint.py | 334 | def _threshold_profile_errors( | CODE |
| LOW | openmed/core/policy_lint.py | 416 | def _unreachable_policy_label_action_warnings( | CODE |
| LOW⚡ | openmed/core/pipeline.py | 76 | def original_index_to_normalized(self, index: int) -> int | None: | CODE |
| LOW⚡ | openmed/core/pipeline.py | 79 | def normalized_index_to_original(self, index: int) -> int: | CODE |
| LOW⚡ | openmed/core/pipeline.py | 82 | def original_span_to_normalized(self, start: int, end: int) -> tuple[int, int]: | CODE |
| LOW | openmed/core/pipeline.py | 98 | def normalized_span_to_original_offsets( | CODE |
| LOW | openmed/core/pipeline.py | 949 | def _apply_calibration_thresholds( | CODE |
| LOW | openmed/core/pipeline.py | 1227 | def _registered_detector_spans( | CODE |
| LOW | openmed/core/pipeline.py | 1316 | def _suppress_custom_allowed_spans( | CODE |
| LOW | openmed/core/pipeline.py | 1392 | def _iter_normalization_segments(text: str): | CODE |
| LOW | openmed/core/pipeline.py | 1446 | def _section_detection_unavailable_metadata(exc: ImportError) -> dict[str, Any]: | CODE |
| LOW | openmed/core/pipeline.py | 1477 | def _remap_section_metadata_to_normalized( | CODE |
| LOW | openmed/core/pipeline.py | 1495 | def _remap_section_to_normalized(section: Any, offset_map: OffsetMap) -> Any: | CODE |
| LOW | openmed/core/pipeline.py | 1747 | def _arbitration_trace_metadata( | CODE |
| LOW | openmed/core/pipeline.py | 1870 | def _arbitration_threshold_trace( | CODE |
| LOW | openmed/core/pipeline.py | 1932 | def _arbitration_tie_break_rule( | CODE |
| LOW | openmed/core/pipeline.py | 1993 | def _prediction_result_from_spans( | CODE |
| LOW | openmed/core/pipeline.py | 2051 | def _remap_pii_result_to_original( | CODE |
| LOW | openmed/core/pipeline.py | 2071 | def _remap_entity_to_original( | CODE |
| 4044 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/__init__.py | 3 | CODE | |
| LOW | openmed/__init__.py | 10 | CODE | |
| LOW | openmed/__init__.py | 11 | CODE | |
| LOW | openmed/__init__.py | 12 | CODE | |
| LOW | openmed/__init__.py | 12 | CODE | |
| LOW | openmed/__init__.py | 12 | CODE | |
| LOW | openmed/__init__.py | 12 | CODE | |
| LOW | openmed/__init__.py | 12 | CODE | |
| LOW | openmed/__init__.py | 19 | CODE | |
| LOW | openmed/__init__.py | 19 | CODE | |
| LOW | openmed/__init__.py | 19 | CODE | |
| LOW | openmed/__init__.py | 19 | CODE | |
| LOW | openmed/__init__.py | 20 | CODE | |
| LOW | openmed/__init__.py | 21 | CODE | |
| LOW | openmed/__init__.py | 21 | CODE | |
| LOW | openmed/__init__.py | 22 | CODE | |
| LOW | openmed/__init__.py | 22 | CODE | |
| LOW | openmed/__init__.py | 22 | CODE | |
| LOW | openmed/__init__.py | 22 | CODE | |
| LOW | openmed/__init__.py | 22 | CODE | |
| LOW | openmed/__init__.py | 29 | CODE | |
| LOW | openmed/__init__.py | 29 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 30 | CODE | |
| LOW | openmed/__init__.py | 39 | CODE | |
| LOW | openmed/__init__.py | 39 | CODE | |
| LOW | openmed/__init__.py | 39 | CODE | |
| LOW | openmed/__init__.py | 41 | CODE | |
| LOW | openmed/__init__.py | 41 | CODE | |
| LOW | openmed/__init__.py | 41 | CODE | |
| LOW | openmed/__init__.py | 41 | CODE | |
| LOW | openmed/__init__.py | 41 | CODE | |
| LOW | openmed/__init__.py | 48 | CODE | |
| LOW | openmed/__init__.py | 48 | CODE | |
| LOW | openmed/__init__.py | 48 | CODE | |
| LOW | openmed/__init__.py | 48 | CODE | |
| LOW | openmed/__init__.py | 48 | CODE | |
| LOW | openmed/__init__.py | 55 | CODE | |
| LOW | openmed/__init__.py | 55 | CODE | |
| LOW | openmed/__init__.py | 55 | CODE | |
| LOW | openmed/__init__.py | 55 | CODE | |
| LOW | openmed/__init__.py | 61 | CODE | |
| LOW | openmed/__init__.py | 61 | CODE | |
| LOW | openmed/__init__.py | 67 | CODE | |
| LOW | openmed/__init__.py | 67 | CODE | |
| LOW | openmed/__init__.py | 67 | CODE | |
| LOW | openmed/__init__.py | 67 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| LOW | openmed/__init__.py | 73 | CODE | |
| 2060 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | openmed/core/labels.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/labels.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/labels.py | 266 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/labels.py | 268 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/labels.py | 624 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/labels.py | 626 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/config.py | 416 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/config.py | 418 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_entity_merger.py | 63 | # ============================================================================ | COMMENT |
| MEDIUM | openmed/core/pii_entity_merger.py | 65 | # ============================================================================ | COMMENT |
| MEDIUM | openmed/core/pii_entity_merger.py | 515 | # ============================================================================ | COMMENT |
| MEDIUM | openmed/core/pii_entity_merger.py | 517 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | openmed/core/pii_i18n.py | 3856 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openmed/core/pii_i18n.py | 3858 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openmed/core/pii_i18n.py | 4353 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openmed/core/pii_i18n.py | 4355 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 36 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 144 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 146 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 1137 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 1139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 1397 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 1399 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 1546 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 1548 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 2881 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 2883 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 3084 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 3086 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 3109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/pii_i18n.py | 3111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/decoding/viterbi.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/decoding/viterbi.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/decoding/viterbi.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/decoding/viterbi.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/decoding/viterbi.py | 233 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/decoding/viterbi.py | 235 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 155 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 157 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 244 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 246 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 322 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 324 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 416 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 418 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 432 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/registry.py | 434 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/format_preserve.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openmed/core/anonymizer/format_preserve.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| 336 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CHANGELOG.md | 565 | - **`method="replace"` outputs no longer come from the prior hardcoded list** (`["Jane Smith", "John Doe", "Alex Johnson | CODE |
| LOW | CHANGELOG.md | 814 | - Expanded locale fake-data dictionaries with `FIRST_NAME`, `LAST_NAME`, and `ZIPCODE` values across supported languag | CODE |
| LOW | README.md | 445 | [('NAME', 'John Doe'), ('DATE', '01/15/1970'), ('SSN', '123-45-6789')] | CODE |
| LOW⚡ | openmed/core/pii_i18n.py | 3862 | "NAME": ["Jane Smith", "John Doe", "Alex Johnson", "Sam Taylor"], | CODE |
| LOW⚡ | openmed/core/pii_i18n.py | 3865 | "EMAIL": ["patient@example.com", "contact@example.org"], | CODE |
| LOW⚡ | openmed/core/pii_i18n.py | 3866 | "PHONE": ["555-0123", "555-0456", "555-0789"], | CODE |
| LOW⚡ | openmed/core/pii_i18n.py | 3868 | "STREET_ADDRESS": ["123 Main St", "456 Oak Ave"], | CODE |
| LOW | openmed/core/pii_i18n.py | 3990 | "EMAIL": ["patient@example.in", "sampark@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4027 | "EMAIL": ["patient@example.in", "sampark@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4064 | "EMAIL": ["patient@example.eg", "contact@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4101 | "EMAIL": ["patient@example.co.il", "contact@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4138 | "EMAIL": ["patient@example.jp", "renraku@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4215 | "EMAIL": ["pasyente@example.ph", "kontak@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4230 | "EMAIL": ["patient@example.dk", "kontakt@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4250 | "EMAIL": ["patient@example.th", "contact@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4268 | "EMAIL": ["pacients@example.lv", "kontakts@example.org"], | CODE |
| LOW | openmed/core/pii_i18n.py | 4288 | "EMAIL": ["pacient@example.sk", "kontakt@example.org"], | CODE |
| LOW | openmed/core/pii.py | 2221 | # Canonical labels that don't have a fake-data key fall through to the | COMMENT |
| LOW⚡ | openmed/core/pii.py | 2275 | fake_data = LANGUAGE_FAKE_DATA.get(lang, LANGUAGE_FAKE_DATA["en"]) | CODE |
| LOW⚡ | openmed/core/pii.py | 2278 | if key in fake_data: | CODE |
| LOW⚡ | openmed/core/pii.py | 2279 | return random.choice(fake_data[key]) | CODE |
| LOW | openmed/core/pii.py | 18 | ... {"[NAME]": "Casey Example", "[PHONE]": "555-0100"}, | STRING |
| LOW⚡ | openmed/core/anonymizer/format_preserve.py | 106 | def preserve_email_pattern(original: str, fake_email: str) -> str: | CODE |
| LOW⚡ | openmed/core/anonymizer/format_preserve.py | 107 | """Use ``fake_email``'s local part with ``original``'s domain. | STRING |
| LOW⚡ | openmed/core/anonymizer/format_preserve.py | 111 | the local part. Falls back to ``fake_email`` verbatim if either side | STRING |
| LOW⚡ | openmed/core/anonymizer/format_preserve.py | 114 | if "@" not in original or "@" not in fake_email: | CODE |
| LOW⚡ | openmed/core/anonymizer/format_preserve.py | 115 | return fake_email | CODE |
| LOW⚡ | openmed/core/anonymizer/format_preserve.py | 116 | fake_local = fake_email.split("@", 1)[0] | CODE |
| LOW | openmed/core/anonymizer/engine.py | 64 | consistency (so "John Doe" appearing twice gets one surrogate). | STRING |
| LOW | openmed/processing/display.py | 361 | >>> "PERSON" in html and "John Doe" in html | STRING |
| LOW | openmed/mlx/inference.py | 190 | "word": "John Doe", "start": 8, "end": 16}, ...] | STRING |
| LOW | tests/unit/test_pii_multilingual_regression.py | 86 | _ent("John Doe", "first_name", 8, 16, 0.95), | CODE |
| LOW⚡ | tests/unit/test_quality_gates.py | 97 | # Entity claims text is "Jane Doe" but span points to "John Doe" | COMMENT |
| LOW⚡ | tests/unit/test_quality_gates.py | 97 | # Entity claims text is "Jane Doe" but span points to "John Doe" | COMMENT |
| LOW⚡ | tests/unit/test_quality_gates.py | 50 | entities = [_ent("John Doe", start=8, end=16)] | CODE |
| LOW⚡ | tests/unit/test_quality_gates.py | 100 | text="Jane Doe", | CODE |
| LOW⚡ | tests/unit/test_quality_gates.py | 278 | _ent("John Doe", label="OTHER", start=8, end=16, confidence=0.60), | CODE |
| LOW⚡ | tests/unit/test_quality_gates.py | 279 | _ent("John Doe", label="OTHER", start=8, end=16, confidence=0.95), | CODE |
| LOW | tests/unit/test_quality_gates.py | 134 | _ent("John Doe", start=0, end=8), | CODE |
| LOW | tests/unit/test_quality_gates.py | 198 | _ent("John Doe", start=0, end=8), | CODE |
| LOW | tests/unit/test_quality_gates.py | 318 | _ent("John Doe", label="PERSON", start=8, end=16), | CODE |
| LOW | tests/unit/test_quality_gates.py | 334 | _ent("John Doe", label="PERSON", start=8, end=16), | CODE |
| LOW⚡ | tests/unit/test_display.py | 391 | text="John Doe", label="PERSON", confidence=0.9, start=8, end=16 | CODE |
| LOW⚡ | tests/unit/test_display.py | 479 | assert "John Doe" in _visible_text(html) | CODE |
| LOW⚡ | tests/unit/test_display.py | 492 | assert "John Doe" in _visible_text(html) | CODE |
| LOW⚡ | tests/unit/test_display.py | 513 | "John Doe", | CODE |
| LOW | tests/unit/test_display.py | 124 | assert "John Doe" in marks[0]["_text"] | CODE |
| LOW | tests/unit/test_display.py | 463 | text="John Doe", | CODE |
| LOW | tests/unit/test_display.py | 553 | text="John Doe", | CODE |
| LOW⚡ | tests/unit/test_examples_smoke.py | 114 | SimpleNamespace(label="NAME", text="John Doe", start=0, end=8, confidence=0.97), | CODE |
| LOW⚡ | tests/unit/test_examples_smoke.py | 123 | ["NAME", "John Doe", "0", "8", "0.97"], | CODE |
| LOW⚡ | tests/unit/test_examples_smoke.py | 137 | label="NAME", text="John Doe", start=0, end=8, confidence=0.9 | CODE |
| LOW⚡ | tests/unit/test_examples_smoke.py | 148 | assert view.entity_rows == [["NAME", "John Doe", "0", "8", "0.90"]] | CODE |
| LOW⚡ | tests/unit/test_pii.py | 36 | text="John Doe", label="NAME", start=8, end=16, confidence=0.95 | CODE |
| LOW⚡ | tests/unit/test_pii.py | 39 | text="555-1234", label="PHONE", start=20, end=28, confidence=0.90 | CODE |
| LOW⚡ | tests/unit/test_pii.py | 69 | text="John Doe", | CODE |
| LOW⚡ | tests/unit/test_pii.py | 76 | assert entity.text == "John Doe" | CODE |
| LOW⚡ | tests/unit/test_pii.py | 97 | text="555-1234", | CODE |
| LOW⚡ | tests/unit/test_pii.py | 103 | original_text="555-1234", | CODE |
| LOW⚡ | tests/unit/test_pii.py | 107 | assert entity.original_text == "555-1234" | CODE |
| 371 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/__init__.py | 144 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/__init__.py | 643 | __all__ = [ | CODE |
| LOW | openmed/core/safety_sweep.py | 225 | __all__ = [ | CODE |
| LOW | openmed/core/repro_hash.py | 411 | __all__ = [ | CODE |
| LOW | openmed/core/labels.py | 1014 | __all__ = [ | CODE |
| LOW | openmed/core/quality_gates.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/core/quality_gates.py | 216 | def _set_span_valid(entity: Any, valid: bool) -> None: | CODE |
| LOW | openmed/core/config.py | 304 | def set_config(config: OpenMedConfig) -> None: | CODE |
| LOW | openmed/core/audit.py | 630 | __all__ = [ | CODE |
| LOW | openmed/core/models.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/core/surrogate_vault.py | 277 | def set_epoch_manager(self, epoch_manager: _EpochManager) -> None: | CODE |
| LOW | openmed/core/surrogate_vault.py | 1124 | __all__ = [ | CODE |
| LOW | openmed/core/baseline.py | 238 | __all__ = [ | CODE |
| LOW | openmed/core/thresholds.py | 498 | __all__ = [ | CODE |
| LOW | openmed/core/locale_formats.py | 715 | __all__ = [ | CODE |
| LOW | openmed/core/date_shift.py | 51 | __all__ = [ | CODE |
| LOW | openmed/core/hf_hub.py | 32 | __all__ = [ | CODE |
| LOW | openmed/core/arbitration.py | 491 | __all__ = [ | CODE |
| LOW | openmed/core/policy.py | 911 | __all__ = [ | CODE |
| LOW | openmed/core/__init__.py | 58 | __all__ = [ | CODE |
| LOW | openmed/core/custom_recognizer.py | 545 | __all__ = [ | CODE |
| LOW | openmed/core/script_detect.py | 398 | __all__ = [ | CODE |
| LOW | openmed/core/clinical_protect.py | 311 | __all__ = [ | CODE |
| LOW | openmed/core/backends.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/core/policy_lint.py | 463 | __all__ = [ | CODE |
| LOW | openmed/core/pipeline.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/core/pipeline.py | 2294 | __all__ = [ | CODE |
| LOW | openmed/core/hf_publish.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/core/detector_plugins.py | 68 | logger = logging.getLogger(__name__) | CODE |
| LOW | openmed/core/detector_plugins.py | 387 | __all__ = [ | CODE |
| LOW | openmed/core/name_order.py | 33 | __all__ = [ | CODE |
| LOW | openmed/core/redaction_strength.py | 249 | __all__ = [ | CODE |
| LOW | openmed/core/streaming.py | 328 | def _update_hashes(self, original_text: str, redacted_text: str) -> None: | CODE |
| LOW | openmed/core/streaming.py | 500 | __all__ = [ | CODE |
| LOW | openmed/core/policy_diff.py | 460 | __all__ = [ | CODE |
| LOW | openmed/core/explain.py | 572 | __all__ = [ | CODE |
| LOW | openmed/core/rtl_render.py | 396 | __all__ = [ | CODE |
| LOW | openmed/core/cascade.py | 372 | __all__ = [ | CODE |
| LOW | openmed/core/decoding/graph.py | 767 | __all__ = [ | CODE |
| LOW | openmed/core/decoding/__init__.py | 41 | __all__ = [ | CODE |
| LOW | openmed/core/decoding/spans.py | 327 | __all__ = [ | CODE |
| LOW | openmed/core/schemas/__init__.py | 20 | __all__ = [ | CODE |
| LOW | openmed/core/schemas/span.py | 326 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/registry.py | 499 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/format_preserve.py | 170 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/__init__.py | 58 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/engine.py | 336 | __all__ = ["Anonymizer", "AnonymizerConfig"] | CODE |
| LOW | openmed/core/anonymizer/locales.py | 193 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/providers/clinical_ids.py | 1628 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/providers/__init__.py | 44 | __all__ = [ | CODE |
| LOW | openmed/core/anonymizer/providers/registry_ids.py | 441 | __all__ = [ | CODE |
| LOW | openmed/ner/labels.py | 209 | __all__ = [ | CODE |
| LOW | openmed/ner/adapter.py | 220 | __all__ = [ | CODE |
| LOW | openmed/ner/__init__.py | 34 | __all__ = [ | CODE |
| LOW | openmed/ner/infer.py | 309 | __all__ = [ | CODE |
| LOW | openmed/ner/indexing.py | 394 | __all__ = [ | CODE |
| LOW | openmed/ner/families/__init__.py | 14 | __all__ = [ | CODE |
| LOW | openmed/ner/families/base.py | 23 | __all__ = ["ModelFamily", "SupportsPrediction"] | CODE |
| LOW | openmed/ner/families/gliner2.py | 190 | __all__ = [ | CODE |
| LOW | openmed/ner/families/gliner.py | 132 | __all__ = [ | CODE |
| 228 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openmed/core/config.py | 210 | Create config from a named profile. Args: profile_name: Name of the profile (dev, prod, test, fast, | STRING |
| HIGH | openmed/core/config.py | 440 | Get the settings for a specific profile. Args: profile_name: Name of the profile. Returns: Dic | STRING |
| HIGH | openmed/core/config.py | 487 | Delete a custom profile. Args: profile_name: Name of the profile to delete. Returns: True if d | STRING |
| HIGH | openmed/core/models.py | 108 | Load a TokenClassification model and tokenizer. Args: model_name: Name of the model to load. Can be | STRING |
| HIGH | openmed/core/locale_formats.py | 441 | Return date order and number separators for an OpenMed language code. Args: lang: OpenMed ISO 639-1 languag | STRING |
| HIGH | openmed/core/hf_hub.py | 66 | Resolve a registry alias or bare name to a fully-qualified Hub repo id. A value that already looks like a Hub id (c | STRING |
| HIGH | openmed/core/hf_hub.py | 107 | Pre-download an OpenMed model snapshot and return its local path. The friendly *name_or_alias* is resolved to a Hub | STRING |
| HIGH | openmed/core/hf_hub.py | 173 | Return the OpenMed model repos present in the local Hugging Face cache. The scan is read-only and never touches the | STRING |
| HIGH | openmed/core/hf_hub.py | 240 | Delete a single OpenMed repo from the local Hugging Face cache. Args: name: Registry key, repo id, or bare | STRING |
| HIGH | openmed/core/pii_i18n.py | 4383 | Return combined PII patterns for the given language. English patterns (email, URL, IP, etc.) are universal and alwa | STRING |
| HIGH | openmed/core/rtl_render.py | 252 | Render de-identified ``text`` with bidi-safe masks. For a right-to-left or mixed-script document, each replacement | STRING |
| HIGH | openmed/core/rtl_render.py | 338 | Wrap a single mask/surrogate token in ``FSI ... PDI`` isolates. A convenience for callers that build redacted outpu | STRING |
| HIGH | openmed/core/rtl_render.py | 369 | Remove bidi isolate/embedding/override controls and directional marks. For source text without pre-existing bidi co | STRING |
| HIGH | openmed/ner/indexing.py | 99 | Discover models located under ``models_dir`` and return a structured index. Args: models_dir: Root director | STRING |
| HIGH | openmed/interop/fhir_operations.py | 129 | Return a de-identified copy of a single FHIR resource. Walks the resource's string-typed elements and its ``text`` | STRING |
| HIGH | openmed/interop/fhir_operations.py | 167 | Return a de-identified copy of a FHIR Bundle. Applies :func:`de_identify_resource` to every ``entry.resource`` whil | STRING |
| HIGH | openmed/interop/fhir_operations.py | 201 | Run ``$de-identify`` over a FHIR ``Parameters`` envelope. Accepts a ``Parameters`` resource carrying a ``resource`` | STRING |
| HIGH | openmed/interop/cdm_etl.py | 377 | Transform clinical note entities into deterministic CDM-style tables. Args: notes: Iterable of :class:`Clin | STRING |
| HIGH | openmed/interop/fhir_bulk.py | 346 | De-identify every ``*.ndjson`` file in a FHIR bulk export directory. The output directory mirrors the input directo | STRING |
| HIGH | openmed/interop/cda.py | 174 | Redact PHI from a CDA/C-CDA XML document. Args: document_or_path: XML string/bytes or a filesystem path. | STRING |
| HIGH | openmed/interop/omop/cdm_loader.py | 545 | Build OMOP CDM tables from grounded clinical note records. Args: notes: Iterable of mappings or objects wit | STRING |
| HIGH | openmed/utils/validation.py | 14 | Validate and clean input text. Args: text: Input text to validate. min_length: Minimum allowed text | STRING |
| HIGH | openmed/utils/validation.py | 61 | Validate model name format. Args: model_name: Model name to validate. Returns: Validated model | STRING |
| HIGH | openmed/utils/validation.py | 109 | Validate confidence threshold value. Args: threshold: Confidence threshold to validate. Returns: | STRING |
| HIGH | openmed/utils/validation.py | 130 | Validate output format name. Args: format_name: Output format to validate. Returns: Validated | STRING |
| HIGH | openmed/utils/validation.py | 155 | Validate batch size for processing. Args: batch_size: Batch size to validate. max_batch_size: Maxim | STRING |
| HIGH | openmed/multimodal/documents_markdown.py | 48 | Extract normalized text and source offsets from Markdown/GFM content. Args: source: A filesystem path, raw | STRING |
| HIGH | openmed/multimodal/epub.py | 93 | Extract EPUB spine text and source-offset metadata. Args: path: EPUB file path. Returns: An :c | STRING |
| HIGH | openmed/clinical/exporters/flat_table.py | 137 | Return a pandas DataFrame using the fixed flat-table schema. pandas is imported lazily so importing this module has | STRING |
| HIGH | openmed/clinical/exporters/code_provenance.py | 33 | Return a copy of ``coding`` stamped with code-system version provenance. ``version_pins`` may be keyed by a short v | STRING |
| HIGH | openmed/clinical/exporters/codeable_concept_simple.py | 54 | Return the canonical HL7 FHIR R4 system URI for *vocabulary_id*. Accepts either a short vocabulary id (case-insensi | STRING |
| HIGH | openmed/clinical/exporters/codeable_concept_simple.py | 93 | Build one FHIR R4 Coding dict. Args: system: A short vocabulary id or an already-canonical syst | STRING |
| HIGH | openmed/clinical/exporters/codeable_concept_simple.py | 124 | Build an R4-shaped CodeableConcept from one or more Codings. Codings are ordered deterministically by *system_prior | STRING |
| HIGH | openmed/clinical/exporters/fhir/operation_outcome.py | 113 | Build an R4 ``OperationOutcome`` from an iterable of issues. Args: issues: An iterable of issue-like items, | STRING |
| HIGH | openmed/clinical/exporters/fhir/provenance.py | 34 | Translate an OpenMed audit report into an R4 ``Provenance`` resource. Args: audit_report: Signed OpenMed au | STRING |
| HIGH | openmed/eval/frontier.py | 453 | Assemble one :class:`FrontierPoint` from already-measured reports. Throughput is read from a :class:`~openmed.eval. | STRING |
| HIGH | openmed/eval/flaky.py | 287 | Detect flaky benchmark metrics by repeating the same scoring callable. Args: run_callable: Zero-argument ca | STRING |
| HIGH | openmed/eval/suites/multimodal_dicom.py | 216 | Generate a deterministic synthetic burned-in-PHI DICOM corpus. Each case writes a single-frame phantom DICOM with s | STRING |
| HIGH | openmed/eval/suites/multimodal_dicom.py | 265 | Score the DICOM redaction path over the synthetic corpus. Generates (or reuses) the synthetic corpus, runs the real | STRING |
| HIGH | openmed/eval/datasets/i2b2.py | 183 | Load i2b2 de-identification XML files from a credentialed directory. Args: path: Approved local directory c | STRING |
| HIGH | openmed/risk/kanon.py | 73 | Measure k-anonymity, l-diversity and t-closeness for ``records``. Args: records: Tabular records in any sha | STRING |
| HIGH | examples/gradio_deid_app.py | 78 | De-identify *text* with *method* and adapt the result for the UI. This wraps the public :func:`openmed.deidentify` | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/__init__.py | 324 | except Exception: | CODE |
| LOW | openmed/__init__.py | 329 | except Exception: | CODE |
| LOW | openmed/__init__.py | 602 | except Exception as exc: # pragma: no cover | CODE |
| LOW | openmed/core/safety_sweep.py | 66 | except Exception: | CODE |
| LOW | openmed/core/models.py | 215 | except Exception as e: | CODE |
| LOW | openmed/core/models.py | 248 | except Exception: | CODE |
| LOW | openmed/core/models.py | 352 | except Exception as e: | CODE |
| LOW | openmed/core/models.py | 468 | except Exception as exc: | CODE |
| LOW | openmed/core/models.py | 491 | except Exception as exc: | CODE |
| LOW⚡ | openmed/core/models.py | 697 | except Exception: | CODE |
| LOW⚡ | openmed/core/models.py | 705 | except Exception: | CODE |
| LOW⚡ | openmed/core/models.py | 715 | except Exception: | CODE |
| LOW | openmed/core/surrogate_vault.py | 823 | except Exception: | CODE |
| LOW | openmed/core/arbitration.py | 337 | except Exception: | CODE |
| LOW | openmed/core/pipeline.py | 1241 | except Exception as exc: | CODE |
| LOW | openmed/core/pipeline.py | 1904 | except Exception: | CODE |
| LOW | openmed/core/hf_publish.py | 709 | except Exception as exc: | CODE |
| MEDIUM | openmed/core/hf_publish.py | 694 | def _load_hf_api() -> Any: | CODE |
| LOW | openmed/core/detector_plugins.py | 269 | except Exception as exc: # pragma: no cover - importlib defensive guard | CODE |
| LOW | openmed/core/detector_plugins.py | 282 | except Exception as exc: | CODE |
| LOW | openmed/core/doctor.py | 97 | except Exception: | CODE |
| LOW | openmed/core/cascade.py | 348 | except Exception: | CODE |
| LOW | openmed/core/anonymizer/engine.py | 211 | except Exception as exc: # noqa: BLE001 — never let a single label kill the doc | CODE |
| LOW | openmed/ner/families/gliner2.py | 152 | except Exception: # pragma: no cover - defensive path | CODE |
| LOW | openmed/ner/families/gliner.py | 107 | except Exception: # pragma: no cover - defensive path | CODE |
| LOW | openmed/onnx/convert.py | 678 | except Exception as exc: | CODE |
| LOW | openmed/onnx/convert.py | 861 | except Exception as exc: # pragma: no cover - depends on runtime kernels. | CODE |
| LOW | openmed/onnx/convert.py | 1013 | except Exception as exc: # pragma: no cover - depends on optional ORT tools. | CODE |
| LOW | openmed/onnx/convert.py | 1203 | except Exception as exc: # pragma: no cover - depends on runtime profiling. | CODE |
| LOW | openmed/onnx/convert.py | 1345 | except Exception: | CODE |
| LOW | openmed/onnx/ort_mobile.py | 113 | except Exception as exc: | CODE |
| LOW | openmed/onnx/openvino_export.py | 546 | except Exception: | CODE |
| MEDIUM | openmed/onnx/openvino_export.py | 481 | def _openvino_conversion_api() -> tuple[Any, Any]: | CODE |
| LOW | openmed/processing/object_storage.py | 297 | except Exception as exc: | CODE |
| LOW | openmed/processing/object_storage.py | 377 | except Exception as exc: | CODE |
| LOW | openmed/processing/object_storage.py | 386 | except Exception as exc: | CODE |
| MEDIUM | openmed/processing/object_storage.py | 203 | def _import_fsspec() -> Any: | CODE |
| LOW | openmed/processing/batch.py | 589 | except Exception as e: | CODE |
| LOW | openmed/processing/batch.py | 598 | except Exception as e: | CODE |
| LOW | openmed/processing/batch.py | 705 | except Exception as e: | CODE |
| LOW | openmed/processing/batch.py | 761 | except Exception as e: | CODE |
| LOW | openmed/processing/display.py | 52 | except Exception: | CODE |
| LOW | openmed/processing/display.py | 75 | except Exception: | CODE |
| LOW | openmed/processing/display.py | 86 | except Exception: | CODE |
| LOW⚡ | openmed/processing/display.py | 444 | except Exception: | CODE |
| LOW⚡ | openmed/processing/display.py | 450 | except Exception: | CODE |
| LOW⚡ | openmed/processing/display.py | 455 | except Exception: | CODE |
| LOW | openmed/processing/kafka_connector.py | 657 | except Exception as exc: # pragma: no cover - defensive logging branch | CODE |
| LOW | openmed/processing/pulsar_connector.py | 127 | except Exception as exc: # pragma: no cover - exercised by real client users | CODE |
| LOW | openmed/processing/outputs.py | 196 | except Exception: | CODE |
| LOW | openmed/interop/fhir_operations.py | 412 | except Exception: | CODE |
| LOW | openmed/interop/polars_accessor.py | 282 | except Exception: | CODE |
| MEDIUM | openmed/interop/polars_accessor.py | 279 | def _namespace_registered() -> bool: | CODE |
| LOW | openmed/interop/duckdb_udf.py | 249 | except Exception: | STRING |
| LOW | openmed/interop/omop/cdm_loader.py | 1243 | except Exception: | CODE |
| LOW | openmed/torch/attention.py | 115 | except Exception: | CODE |
| MEDIUM | openmed/torch/attention.py | 91 | def _flash_attention_2_is_available() -> bool: | CODE |
| LOW | openmed/torch/device.py | 95 | except Exception: | CODE |
| LOW | openmed/torch/device.py | 107 | except Exception: | CODE |
| LOW | openmed/torch/device.py | 118 | except Exception: | CODE |
| 97 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/__init__.py | 181 | CODE | |
| LOW | openmed/__init__.py | 467 | CODE | |
| LOW | openmed/core/result_cache.py | 60 | CODE | |
| LOW | openmed/core/config.py | 209 | CODE | |
| LOW | openmed/core/policy.py | 541 | CODE | |
| LOW | openmed/core/pii_entity_merger.py | 568 | CODE | |
| LOW | openmed/core/pii_entity_merger.py | 651 | CODE | |
| LOW | openmed/core/pii_entity_merger.py | 712 | CODE | |
| LOW | openmed/core/custom_recognizer.py | 394 | CODE | |
| LOW | openmed/core/policy_lint.py | 248 | CODE | |
| LOW | openmed/core/hf_publish.py | 167 | CODE | |
| LOW | openmed/core/pii_i18n.py | 789 | CODE | |
| LOW | openmed/core/pii_i18n.py | 985 | CODE | |
| LOW | openmed/core/manifest_schema.py | 155 | CODE | |
| LOW | openmed/core/manifest_schema.py | 497 | CODE | |
| LOW | openmed/core/pii.py | 458 | CODE | |
| LOW | openmed/core/pii.py | 2032 | CODE | |
| LOW | openmed/core/pii.py | 2554 | CODE | |
| LOW | openmed/core/decoding/viterbi.py | 265 | CODE | |
| LOW | openmed/core/decoding/viterbi.py | 364 | CODE | |
| LOW | openmed/ner/indexing.py | 297 | CODE | |
| LOW | openmed/onnx/convert.py | 1090 | CODE | |
| LOW | openmed/processing/tokenization.py | 308 | CODE | |
| LOW | openmed/processing/kafka_connector.py | 92 | CODE | |
| LOW | openmed/processing/outputs.py | 563 | CODE | |
| LOW | openmed/processing/outputs.py | 125 | CODE | |
| LOW | openmed/processing/outputs.py | 526 | CODE | |
| LOW | openmed/training/active_learning.py | 492 | CODE | |
| LOW | openmed/training/distill.py | 462 | CODE | |
| LOW | openmed/training/distill.py | 864 | CODE | |
| LOW | openmed/interop/fhir_operations.py | 351 | CODE | |
| LOW | openmed/interop/cdm_etl.py | 371 | CODE | |
| LOW | openmed/interop/cdm_etl.py | 323 | CODE | |
| LOW | openmed/interop/philter.py | 175 | CODE | |
| LOW | openmed/interop/pydeid.py | 158 | CODE | |
| LOW | openmed/interop/cda.py | 315 | CODE | |
| LOW | openmed/interop/cda.py | 351 | CODE | |
| LOW | openmed/interop/athena.py | 56 | CODE | |
| LOW | openmed/interop/athena.py | 180 | CODE | |
| LOW | openmed/interop/omop/cdm_loader.py | 771 | CODE | |
| LOW | openmed/mcp/tool_registry.py | 278 | CODE | |
| LOW | openmed/mcp/tool_registry.py | 408 | CODE | |
| LOW | openmed/mcp/workflow.py | 142 | CODE | |
| LOW | openmed/cli/active_learning.py | 88 | CODE | |
| LOW | openmed/cli/main.py | 1339 | CODE | |
| LOW | openmed/cli/main.py | 2017 | CODE | |
| LOW | openmed/cli/main.py | 2070 | CODE | |
| LOW | openmed/coreml/convert.py | 914 | CODE | |
| LOW | openmed/integrations/columnar_redactor.py | 868 | CODE | |
| LOW | openmed/multimodal/documents_markdown.py | 447 | CODE | |
| LOW | openmed/multimodal/documents_markdown.py | 939 | CODE | |
| LOW | openmed/multimodal/documents_docx.py | 294 | CODE | |
| LOW | openmed/multimodal/documents_docx.py | 325 | CODE | |
| LOW | openmed/multimodal/documents_pdf.py | 63 | CODE | |
| LOW | openmed/multimodal/ocr.py | 412 | CODE | |
| LOW | openmed/multimodal/dicom.py | 1033 | CODE | |
| LOW | openmed/multimodal/dicom.py | 1115 | CODE | |
| LOW | openmed/clinical/summary_card.py | 233 | CODE | |
| LOW | openmed/clinical/grounding/vocab.py | 622 | CODE | |
| LOW | openmed/clinical/grounding/vocab.py | 662 | CODE | |
| 57 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/__init__.py | 181 | CODE | |
| LOW | openmed/core/arbitration.py | 222 | CODE | |
| LOW | openmed/core/pipeline.py | 233 | CODE | |
| LOW | openmed/core/pipeline.py | 309 | CODE | |
| LOW | openmed/core/model_search.py | 53 | CODE | |
| LOW | openmed/core/hf_publish.py | 226 | CODE | |
| LOW | openmed/core/streaming.py | 54 | CODE | |
| LOW | openmed/core/pii.py | 739 | CODE | |
| LOW | openmed/core/pii.py | 852 | CODE | |
| LOW | openmed/core/pii.py | 1464 | CODE | |
| LOW | openmed/core/pii.py | 1721 | CODE | |
| LOW | openmed/core/pii.py | 1815 | CODE | |
| LOW | openmed/core/cascade.py | 54 | CODE | |
| LOW | openmed/ner/infer.py | 118 | CODE | |
| LOW | openmed/onnx/convert.py | 338 | CODE | |
| LOW | openmed/onnx/convert.py | 799 | CODE | |
| LOW | openmed/processing/object_storage.py | 92 | CODE | |
| LOW | openmed/processing/batch.py | 856 | CODE | |
| LOW | openmed/processing/batch.py | 236 | CODE | |
| LOW | openmed/processing/kafka_connector.py | 92 | CODE | |
| LOW | openmed/training/distill.py | 356 | CODE | |
| LOW | openmed/training/distill.py | 609 | CODE | |
| LOW | openmed/training/synthetic/translation_augment.py | 190 | CODE | |
| LOW | openmed/torch/quantize_gptq.py | 33 | CODE | |
| LOW | openmed/torch/quantize_awq.py | 36 | CODE | |
| LOW | openmed/mcp/server.py | 109 | CODE | |
| LOW | openmed/mcp/server.py | 213 | CODE | |
| LOW | openmed/cli/typer_app.py | 96 | CODE | |
| LOW | openmed/coreml/convert.py | 164 | CODE | |
| LOW | openmed/coreml/convert.py | 735 | CODE | |
| LOW | openmed/integrations/spark_streaming.py | 140 | CODE | |
| LOW | openmed/integrations/lakehouse_redact.py | 324 | CODE | |
| LOW | openmed/integrations/columnar_redactor.py | 231 | CODE | |
| LOW | openmed/multimodal/tabular_csv.py | 302 | CODE | |
| LOW | openmed/multimodal/chatlog_jsonl.py | 206 | CODE | |
| LOW | openmed/multimodal/chatlog_jsonl.py | 280 | CODE | |
| LOW | openmed/multimodal/dicom.py | 393 | CODE | |
| LOW | openmed/multimodal/image.py | 202 | CODE | |
| LOW | openmed/eval/release_gates.py | 442 | CODE | |
| LOW | openmed/eval/fairness.py | 482 | CODE | |
| LOW | openmed/eval/metrics.py | 1141 | CODE | |
| LOW | openmed/eval/metrics.py | 1527 | CODE | |
| LOW | openmed/eval/harness.py | 810 | CODE | |
| LOW | openmed/eval/harness.py | 1081 | CODE | |
| LOW | openmed/eval/harness.py | 1282 | CODE | |
| LOW | openmed/eval/harness.py | 1323 | CODE | |
| LOW | openmed/eval/harness.py | 1355 | CODE | |
| LOW | openmed/eval/robustness.py | 395 | CODE | |
| LOW | openmed/eval/robustness.py | 524 | CODE | |
| LOW | openmed/eval/quant_delta.py | 324 | CODE | |
| LOW | openmed/eval/calibrate.py | 634 | CODE | |
| LOW | openmed/eval/calibrate.py | 715 | CODE | |
| LOW | openmed/eval/calibrate.py | 941 | CODE | |
| LOW | openmed/eval/suites/multimodal_dicom.py | 252 | CODE | |
| LOW | openmed/eval/datasets/biomedical_ner.py | 367 | CODE | |
| LOW | openmed/eval/attacks/reid.py | 64 | CODE | |
| LOW | openmed/service/client.py | 233 | CODE | |
| LOW | openmed/service/client.py | 293 | CODE | |
| LOW | openmed/service/client.py | 330 | CODE | |
| LOW | openmed/service/client.py | 371 | CODE | |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | docs/website/assets/script.js | 292 | print(entity.label, entity.text, entity.confidence) | CODE |
| HIGH⚡ | docs/website/assets/script.js | 295 | print(deid.deidentified_text)`, | CODE |
| HIGH⚡ | docs/website/assets/script.js | 305 | print(entity.label, entity.text, entity.confidence) | CODE |
| HIGH⚡ | docs/website/assets/script.js | 308 | print(deid.deidentified_text)`, | CODE |
| HIGH⚡ | docs/website/assets/script.js | 318 | print(f"{e['entity_group']:16} {e['word']:32} score={e['score']:.2f}")`, | CODE |
| HIGH | docs/website/assets/script.js | 333 | print(entity.label, entity.text, entity.confidence) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openmed/eval/utility.py | 0 | return a json-serializable report dictionary with stable keys. | STRING |
| HIGH | openmed/eval/error_analysis.py | 0 | return a json-serializable report dictionary with stable keys. | STRING |
| HIGH | openmed/eval/report.py | 0 | return a json-serializable report dictionary with stable keys. | STRING |
| HIGH | openmed/eval/datasets/cmeee.py | 0 | load deft records from an explicit local path. openmed does not bundle deft corpus text. pass a local path to data you a | STRING |
| HIGH | openmed/eval/datasets/pharmaconer.py | 0 | load deft records from an explicit local path. openmed does not bundle deft corpus text. pass a local path to data you a | STRING |
| HIGH | openmed/eval/datasets/cantemist.py | 0 | load deft records from an explicit local path. openmed does not bundle deft corpus text. pass a local path to data you a | STRING |
| HIGH | openmed/eval/datasets/deft.py | 0 | load deft records from an explicit local path. openmed does not bundle deft corpus text. pass a local path to data you a | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | openmed/core/pii_entity_merger.py | 546 | # Extract context window | COMMENT |
| MEDIUM⚡ | openmed/cli/typer_app.py | 228 | # zero-shot (GLiNER/GLiNER2) | COMMENT |
| MEDIUM | tests/run-tests.sh | 13 | # Core test suite without slow markers (collect coverage for zero-shot modules) | COMMENT |
| MEDIUM | tests/unit/ner/__init__.py | 1 | # Unit tests for the zero-shot NER toolkit. | COMMENT |
| MEDIUM⚡ | tests/unit/cli/test_false_negative_explorer_cli.py | 165 | # Span text and a surrounding-context window are surfaced from the fixture. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | openmed/eval/suites/multimodal_dicom.py | 72 | #: Device tier reported for pixel-space (image) PHI in the harness slices. | COMMENT |
| LOW⚡ | tests/unit/core/test_anonymizer.py | 201 | # If the original isn't an email, just return the fake. | COMMENT |
| MEDIUM⚡ | tests/unit/eval/test_multimodal_dicom_suite.py | 270 | # Report renders to the harness's Markdown/JSON surfaces. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/core/models.py | 506 | # Check if it's a registry key | COMMENT |
| LOW | openmed/core/models.py | 511 | # Check if it needs org prefix | COMMENT |
| LOW | openmed/processing/advanced_ner.py | 619 | # Check if same entity type and close proximity | COMMENT |
| LOW⚡ | openmed/processing/advanced_ner.py | 669 | # Check if we have token-level data (no aggregation_strategy used) | COMMENT |
| LOW | openmed/processing/outputs.py | 341 | # Check if entities are adjacent and same label | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | openmed/processing/advanced_ner.py | 667 | # Step 1: Smart grouping if requested and we have token-level output | COMMENT |
| LOW⚡ | openmed/processing/advanced_ner.py | 689 | # Step 2: Advanced filtering | COMMENT |
| LOW⚡ | openmed/processing/advanced_ner.py | 692 | # Step 3: Merge adjacent entities if enabled | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | openmed/processing/advanced_ner.py | 667 | # Step 1: Smart grouping if requested and we have token-level output | COMMENT |
| LOW⚡ | openmed/processing/advanced_ner.py | 689 | # Step 2: Advanced filtering | COMMENT |
| LOW⚡ | openmed/processing/advanced_ner.py | 692 | # Step 3: Merge adjacent entities if enabled | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unit/test_profiles.py | 148 | # Create a custom profile | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openmed/core/name_order.py | 41 | COMMENT | |
| LOW | openmed/core/data/clinical_protect_terms.txt | 1 | # OpenMed clinical protection terms v1 | COMMENT |
| LOW | docs/security/pip-audit-ignore.toml | 1 | # Time-boxed pip-audit ignores. | COMMENT |
| LOW | swift/OpenMedKit/Sources/OpenMedKit/OpenMedKit.swift | 1 | import CryptoKit | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openmed/eval/quant_delta.py | 412 | """Return KL(reference || candidate) over fixed-seed token frequencies.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_profiling.py | 264 | def my_function(): | CODE |
| LOW | tests/unit/service/test_rest_client.py | 41 | def handle_request(self, request: httpx.Request) -> httpx.Response: | CODE |