# modelgate-standard/modelgate architecture

> Architecture diagram of the GitHub repository modelgate-standard/modelgate, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/modelgate-standard/modelgate
- Repository: https://github.com/modelgate-standard/modelgate

## Overview

ModelGate is a local computer-vision dataset auditor and MGS reference implementation. A user passes a ZIP or class-folder dataset to the Python API or CLI; readers normalize it into a format-independent Manifest, normative checkers evaluate structure, integrity, duplicates and balance, and an informative resolution analysis is added to a reproducible Report. The README also documents JSON CLI output and standalone structure reading. Source excerpts show the core orchestration and reader paths; relationships not evidenced there are omitted.

Main entry points: [`packages/modelgate-core/src/modelgate/__init__.py`](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/__init__.py) (Python API), [`packages/modelgate-core/src/modelgate/manifest.py`](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/manifest.py) (Normalized Manifest), [`packages/modelgate-core/src/modelgate/_checkers/__init__.py`](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/__init__.py) (Normative checker registry), [`packages/modelgate-core/src/modelgate/report.py`](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/report.py) (Audit report)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry points"]
  node_python_api["Python API<br/>[__init__.py]"]
  node_cli["Command-line interface<br/>[cli.py]"]
end

subgraph group_ingestion["Dataset ingestion"]
  node_reader_dispatch["Reader dispatch<br/>[__init__.py]"]
  node_zip_reader["ZIP reader<br/>[zip_reader.py]"]
  node_folder_reader["ImageFolder reader"]
  node_structure_detection["Structure detection<br/>[_structure.py]"]
  node_manifest["Normalized Manifest<br/>[manifest.py]"]
end

subgraph group_evaluation["MGS evaluation"]
  node_checkers["Normative checker registry<br/>[__init__.py]"]
  node_structure_check["Structure check<br/>[structure.py]"]
  node_integrity_check["Integrity check<br/>[integrity.py]"]
  node_duplicate_check["Duplicate check<br/>[duplicate.py]"]
  node_balance_check["Balance check<br/>[balance.py]"]
  node_resolution["Resolution analysis<br/>[resolution.py]"]
  node_rounding["Spec rounding<br/>[_rounding.py]"]
end

subgraph group_results["Results"]
  node_report["Audit report<br/>[report.py]"]
end

node_user(("Dataset user"))
node_dataset["Dataset"]

node_user -->|"calls audit"| node_python_api
node_user -->|"runs check"| node_cli
node_dataset -->|"supplies path"| node_python_api
node_dataset -->|"supplies path"| node_cli
node_cli -->|"invokes API"| node_python_api
node_python_api -->|"reads dataset"| node_reader_dispatch
node_reader_dispatch -->|"selects reader"| node_zip_reader
node_reader_dispatch -->|"selects reader"| node_folder_reader
node_zip_reader -->|"classifies paths"| node_structure_detection
node_folder_reader -->|"classifies paths"| node_structure_detection
node_zip_reader -->|"builds manifest"| node_manifest
node_folder_reader -->|"builds manifest"| node_manifest
node_python_api -->|"gets checkers"| node_checkers
node_python_api -->|"passes manifest"| node_manifest
node_python_api -->|"computes resolution"| node_resolution
node_python_api -->|"constructs report"| node_report
node_checkers -->|"registers checker"| node_structure_check
node_checkers -->|"registers checker"| node_integrity_check
node_checkers -->|"registers checker"| node_duplicate_check
node_checkers -->|"registers checker"| node_balance_check
node_structure_check -->|"reads manifest"| node_manifest
node_integrity_check -->|"reads manifest"| node_manifest
node_duplicate_check -->|"reads manifest"| node_manifest
node_balance_check -->|"reads manifest"| node_manifest
node_resolution -->|"reads manifest"| node_manifest
node_integrity_check -->|"returns result"| node_report
node_duplicate_check -->|"returns result"| node_report
node_balance_check -->|"returns result"| node_report
node_structure_check -->|"returns result"| node_report
node_balance_check -->|"rounds metrics"| node_rounding
node_duplicate_check -->|"rounds metrics"| node_rounding
node_integrity_check -->|"rounds metrics"| node_rounding
node_resolution -->|"rounds metrics"| node_rounding
node_python_api -->|"returns report"| node_user

click node_python_api "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/__init__.py"
click node_cli "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/cli.py"
click node_reader_dispatch "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/__init__.py"
click node_zip_reader "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/zip_reader.py"
click node_folder_reader "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/imagefolder_reader.py"
click node_structure_detection "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/_structure.py"
click node_manifest "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/manifest.py"
click node_checkers "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/__init__.py"
click node_structure_check "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/structure.py"
click node_integrity_check "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/integrity.py"
click node_duplicate_check "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/duplicate.py"
click node_balance_check "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/balance.py"
click node_resolution "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/resolution.py"
click node_rounding "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_rounding.py"
click node_report "https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/report.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_python_api,node_cli,node_user toneBlue
class node_reader_dispatch,node_zip_reader,node_folder_reader,node_structure_detection,node_manifest toneAmber
class node_checkers,node_structure_check,node_integrity_check,node_duplicate_check,node_balance_check,node_resolution,node_rounding toneMint
class node_report toneRose
class node_dataset toneIndigo
```

## Components

### Entry points

- [Python API](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/__init__.py): `packages/modelgate-core/src/modelgate/__init__.py`
- [Command-line interface](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/cli.py): `packages/modelgate-core/src/modelgate/cli.py`

### Dataset ingestion

- [Reader dispatch](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/__init__.py): `packages/modelgate-core/src/modelgate/_readers/__init__.py`
- [ZIP reader](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/zip_reader.py): `packages/modelgate-core/src/modelgate/_readers/zip_reader.py`
- [ImageFolder reader](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/imagefolder_reader.py): `packages/modelgate-core/src/modelgate/_readers/imagefolder_reader.py`
- [Structure detection](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_readers/_structure.py): `packages/modelgate-core/src/modelgate/_readers/_structure.py`
- [Normalized Manifest](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/manifest.py): `packages/modelgate-core/src/modelgate/manifest.py`

### MGS evaluation

- [Normative checker registry](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/__init__.py): `packages/modelgate-core/src/modelgate/_checkers/__init__.py`
- [Structure check](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/structure.py): `packages/modelgate-core/src/modelgate/_checkers/structure.py`
- [Integrity check](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/integrity.py): `packages/modelgate-core/src/modelgate/_checkers/integrity.py`
- [Duplicate check](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/duplicate.py): `packages/modelgate-core/src/modelgate/_checkers/duplicate.py`
- [Balance check](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/balance.py): `packages/modelgate-core/src/modelgate/_checkers/balance.py`
- [Resolution analysis](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_checkers/resolution.py): `packages/modelgate-core/src/modelgate/_checkers/resolution.py`
- [Spec rounding](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/_rounding.py): `packages/modelgate-core/src/modelgate/_rounding.py`

### Results

- [Audit report](https://github.com/modelgate-standard/modelgate/blob/main/packages/modelgate-core/src/modelgate/report.py): `packages/modelgate-core/src/modelgate/report.py`

### Other components

- **Dataset user**
- **Dataset**

## Connections

- Dataset user → Python API: calls audit (evidence: `README.md`)
- Dataset user → Command-line interface: runs check (evidence: `README.md`)
- Dataset → Python API: supplies path (evidence: `README.md`)
- Dataset → Command-line interface: supplies path (evidence: `README.md`)
- Command-line interface → Python API: invokes API (evidence: `packages/modelgate-core/src/modelgate/cli.py`)
- Python API → Reader dispatch: reads dataset (evidence: `packages/modelgate-core/src/modelgate/__init__.py`)
- Reader dispatch → ZIP reader: selects reader (evidence: `packages/modelgate-core/src/modelgate/_readers/__init__.py`)
- Reader dispatch → ImageFolder reader: selects reader (evidence: `packages/modelgate-core/src/modelgate/_readers/__init__.py`)
- ZIP reader → Structure detection: classifies paths (evidence: `packages/modelgate-core/src/modelgate/_readers/zip_reader.py`)
- ImageFolder reader → Structure detection: classifies paths (evidence: `packages/modelgate-core/src/modelgate/_readers/imagefolder_reader.py`)
- ZIP reader → Normalized Manifest: builds manifest (evidence: `packages/modelgate-core/src/modelgate/_readers/zip_reader.py`)
- ImageFolder reader → Normalized Manifest: builds manifest (evidence: `packages/modelgate-core/src/modelgate/_readers/imagefolder_reader.py`)
- Python API → Normative checker registry: gets checkers (evidence: `packages/modelgate-core/src/modelgate/__init__.py`)
- Python API → Normalized Manifest: passes manifest (evidence: `packages/modelgate-core/src/modelgate/__init__.py`)
- Python API → Resolution analysis: computes resolution (evidence: `packages/modelgate-core/src/modelgate/__init__.py`)
- Python API → Audit report: constructs report (evidence: `packages/modelgate-core/src/modelgate/__init__.py`)
- Normative checker registry → Structure check: registers checker (evidence: `packages/modelgate-core/src/modelgate/_checkers/__init__.py`)
- Normative checker registry → Integrity check: registers checker (evidence: `packages/modelgate-core/src/modelgate/_checkers/__init__.py`)
- Normative checker registry → Duplicate check: registers checker (evidence: `packages/modelgate-core/src/modelgate/_checkers/__init__.py`)
- Normative checker registry → Balance check: registers checker (evidence: `packages/modelgate-core/src/modelgate/_checkers/__init__.py`)
- Structure check → Normalized Manifest: reads manifest (evidence: `packages/modelgate-core/src/modelgate/_checkers/structure.py`)
- Integrity check → Normalized Manifest: reads manifest (evidence: `packages/modelgate-core/src/modelgate/_checkers/integrity.py`)
- Duplicate check → Normalized Manifest: reads manifest (evidence: `packages/modelgate-core/src/modelgate/_checkers/duplicate.py`)
- Balance check → Normalized Manifest: reads manifest (evidence: `packages/modelgate-core/src/modelgate/_checkers/balance.py`)
- Resolution analysis → Normalized Manifest: reads manifest (evidence: `packages/modelgate-core/src/modelgate/_checkers/resolution.py`)
- Integrity check → Audit report: returns result (evidence: `packages/modelgate-core/src/modelgate/_checkers/integrity.py`)
- Duplicate check → Audit report: returns result (evidence: `packages/modelgate-core/src/modelgate/_checkers/duplicate.py`)
- Balance check → Audit report: returns result (evidence: `packages/modelgate-core/src/modelgate/_checkers/balance.py`)
- Structure check → Audit report: returns result (evidence: `packages/modelgate-core/src/modelgate/_checkers/structure.py`)
- Balance check → Spec rounding: rounds metrics (evidence: `packages/modelgate-core/src/modelgate/_checkers/balance.py`)
- Duplicate check → Spec rounding: rounds metrics (evidence: `packages/modelgate-core/src/modelgate/_checkers/duplicate.py`)
- Integrity check → Spec rounding: rounds metrics (evidence: `packages/modelgate-core/src/modelgate/_checkers/integrity.py`)
- Resolution analysis → Spec rounding: rounds metrics (evidence: `packages/modelgate-core/src/modelgate/_checkers/resolution.py`)
- Python API → Dataset user: returns report (evidence: `README.md`)
