The 17 Components
Dependency Rules
- Acyclic: The component graph must remain a directed acyclic graph (DAG) at all times. No component may directly or indirectly call itself.
- Interface-based: All dependencies are through defined interfaces, not concrete implementations. This enables substitution and testing.
- Eventual consistency: Components that write to shared stores (ModelRegistry, ArtifactStore) do not require synchronous confirmation from readers.
- Failure isolation: A failure in one component must not cascade to unrelated components. The ExperimentTracker logs all failures independently.
Dependency Graph
Dependency Matrix
The following table shows direct dependencies. A checkmark indicates that the row component directly calls or reads from the column component.Leaf Nodes
The following components have no downstream dependents within the EMEP platform. They are terminal nodes in the dependency graph.- TensorEngine: Leaf computation node. All merge strategies depend on it, but it has no internal EMEP dependents.
- ArtifactStore: Leaf storage node. Many components write to it; none read from it for further platform computation.
- DatasetRegistry: Leaf catalog node. BenchmarkEngine reads from it; no component depends on DatasetRegistry outputs for further processing.
The interfaces between these 17 components are defined in API Specification and Configuration Specification. Any change to an interface requires an ADR and updates to all dependent components.
Related Pages
- System Dependency Map for the end-to-end pipeline view
- Data Flow Map for weight, vector, and artifact movement
- API Specification for component interface definitions
- Architecture Diagrams for visual architecture overviews