# tando26/ai-ids architecture

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

- Interactive diagram: https://gitdiagram.com/tando26/ai-ids
- Repository: https://github.com/tando26/ai-ids

## Overview

AI-IDS is a configurable binary network-intrusion detection experiment pipeline for CIC-IDS2017. Its principal workflow prepares traffic-flow data, trains models across imbalance and split strategies, then evaluates the saved models and produces comparison reports and plots. Training source confirms the feature-selection, preprocessing, resampling, model-building, and artifact-saving stages; README documents the broader preparation and evaluation workflow. Evaluation internals and several model implementations were not sampled, so their detailed call wiring is not inferred.

Main entry points: [`src/training/train.py`](https://github.com/tando26/ai-ids/blob/main/src/training/train.py) (Training orchestrator), [`src/evaluation/evaluate.py`](https://github.com/tando26/ai-ids/blob/main/src/evaluation/evaluate.py) (Evaluation orchestration), [`scripts/prepare_data.py`](https://github.com/tando26/ai-ids/blob/main/scripts/prepare_data.py) (Prepare data CLI), [`configs/config.yaml`](https://github.com/tando26/ai-ids/blob/main/configs/config.yaml) (Experiment config)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_prepare_cli["Prepare data CLI<br/>[prepare_data.py]"]
  node_loader["Parquet loader<br/>[load_data.py]"]
  node_cleaner["Data cleaning<br/>[clean_data.py]"]
  node_splitter["Data splitting<br/>[split_data.py]"]
  node_splits["Saved splits"]
end

subgraph group_train["Model training"]
  node_train_cli["Train experiments CLI<br/>[train_all.py]"]
  node_trainer["Training orchestrator<br/>[train.py]"]
  node_selector["Feature selection"]
  node_preprocessor["Feature preprocessing"]
  node_resampling["Imbalance strategies"]
  node_registry["Model registry<br/>[registry.py]"]
  node_model_families["Model implementations"]
  node_trained["Saved models and preprocessors"]
end

subgraph group_eval["Evaluation and reports"]
  node_evaluate_cli["Evaluate CLI<br/>[evaluate_all.py]"]
  node_evaluation["Evaluation orchestration<br/>[evaluate.py]"]
  node_metrics["Classification metrics<br/>[metrics.py]"]
  node_plots["Evaluation plots<br/>[plots.py]"]
  node_results["Metrics and plot reports"]
end

subgraph group_config["Experiment setup"]
  node_configfile["Experiment config<br/>[config.yaml]"]
end

node_user(("Engineer"))
node_raw["CIC-IDS2017 files"]

node_user -->|"runs preparation"| node_prepare_cli
node_raw -->|"reads parquet"| node_loader
node_prepare_cli -->|"loads data"| node_loader
node_prepare_cli -->|"cleans data"| node_cleaner
node_prepare_cli -->|"creates splits"| node_splitter
node_loader -->|"provides rows"| node_cleaner
node_cleaner -->|"provides cleaned rows"| node_splitter
node_splitter -->|"writes splits"| node_splits
node_configfile -->|"configures"| node_prepare_cli
node_user -->|"runs training"| node_train_cli
node_train_cli -->|"runs experiments"| node_trainer
node_configfile -->|"configures"| node_train_cli
node_trainer -->|"loads splits"| node_splits
node_trainer -->|"selects features"| node_selector
node_trainer -->|"builds transforms"| node_preprocessor
node_trainer -->|"resamples training data"| node_resampling
node_trainer -->|"requests model"| node_registry
node_registry -->|"builds model"| node_model_families
node_trainer -->|"saves artifacts"| node_trained
node_user -->|"runs evaluation"| node_evaluate_cli
node_evaluate_cli -->|"evaluates experiments"| node_evaluation
node_configfile -->|"configures"| node_evaluate_cli
node_evaluation -->|"loads models"| node_trained
node_evaluation -->|"loads test data"| node_splits
node_evaluation -->|"calculates metrics"| node_metrics
node_evaluation -->|"generates plots"| node_plots
node_evaluation -->|"writes reports"| node_results

click node_prepare_cli "https://github.com/tando26/ai-ids/blob/main/scripts/prepare_data.py"
click node_loader "https://github.com/tando26/ai-ids/blob/main/src/data/load_data.py"
click node_cleaner "https://github.com/tando26/ai-ids/blob/main/src/data/clean_data.py"
click node_splitter "https://github.com/tando26/ai-ids/blob/main/src/data/split_data.py"
click node_configfile "https://github.com/tando26/ai-ids/blob/main/configs/config.yaml"
click node_train_cli "https://github.com/tando26/ai-ids/blob/main/scripts/train_all.py"
click node_trainer "https://github.com/tando26/ai-ids/blob/main/src/training/train.py"
click node_selector "https://github.com/tando26/ai-ids/blob/main/src/preprocessing/feature_selection.py"
click node_preprocessor "https://github.com/tando26/ai-ids/blob/main/src/preprocessing/build_preprocessor.py"
click node_resampling "https://github.com/tando26/ai-ids/tree/main/src/imbalance"
click node_registry "https://github.com/tando26/ai-ids/blob/main/src/models/registry.py"
click node_model_families "https://github.com/tando26/ai-ids/tree/main/src/models"
click node_evaluate_cli "https://github.com/tando26/ai-ids/blob/main/scripts/evaluate_all.py"
click node_evaluation "https://github.com/tando26/ai-ids/blob/main/src/evaluation/evaluate.py"
click node_metrics "https://github.com/tando26/ai-ids/blob/main/src/evaluation/metrics.py"
click node_plots "https://github.com/tando26/ai-ids/blob/main/src/evaluation/plots.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_prepare_cli,node_loader,node_cleaner,node_splitter,node_splits toneBlue
class node_train_cli,node_trainer,node_selector,node_preprocessor,node_resampling,node_registry,node_model_families,node_trained toneAmber
class node_evaluate_cli,node_evaluation,node_metrics,node_plots,node_results toneMint
class node_configfile toneRose
class node_user,node_raw toneIndigo
```

## Components

### Data preparation

- [Prepare data CLI](https://github.com/tando26/ai-ids/blob/main/scripts/prepare_data.py): `scripts/prepare_data.py`
- [Parquet loader](https://github.com/tando26/ai-ids/blob/main/src/data/load_data.py): `src/data/load_data.py`
- [Data cleaning](https://github.com/tando26/ai-ids/blob/main/src/data/clean_data.py): `src/data/clean_data.py`
- [Data splitting](https://github.com/tando26/ai-ids/blob/main/src/data/split_data.py): `src/data/split_data.py`
- **Saved splits**

### Model training

- [Train experiments CLI](https://github.com/tando26/ai-ids/blob/main/scripts/train_all.py): `scripts/train_all.py`
- [Training orchestrator](https://github.com/tando26/ai-ids/blob/main/src/training/train.py): `src/training/train.py`
- [Feature selection](https://github.com/tando26/ai-ids/blob/main/src/preprocessing/feature_selection.py): `src/preprocessing/feature_selection.py`
- [Feature preprocessing](https://github.com/tando26/ai-ids/blob/main/src/preprocessing/build_preprocessor.py): `src/preprocessing/build_preprocessor.py`
- [Imbalance strategies](https://github.com/tando26/ai-ids/tree/main/src/imbalance): `src/imbalance`
- [Model registry](https://github.com/tando26/ai-ids/blob/main/src/models/registry.py): `src/models/registry.py`
- [Model implementations](https://github.com/tando26/ai-ids/tree/main/src/models): `src/models`
- **Saved models and preprocessors**

### Evaluation and reports

- [Evaluate CLI](https://github.com/tando26/ai-ids/blob/main/scripts/evaluate_all.py): `scripts/evaluate_all.py`
- [Evaluation orchestration](https://github.com/tando26/ai-ids/blob/main/src/evaluation/evaluate.py): `src/evaluation/evaluate.py`
- [Classification metrics](https://github.com/tando26/ai-ids/blob/main/src/evaluation/metrics.py): `src/evaluation/metrics.py`
- [Evaluation plots](https://github.com/tando26/ai-ids/blob/main/src/evaluation/plots.py): `src/evaluation/plots.py`
- **Metrics and plot reports**

### Experiment setup

- [Experiment config](https://github.com/tando26/ai-ids/blob/main/configs/config.yaml): `configs/config.yaml`

### Other components

- **Engineer**
- **CIC-IDS2017 files**

## Connections

- Engineer → Prepare data CLI: runs preparation
- CIC-IDS2017 files → Parquet loader: reads parquet
- Prepare data CLI → Parquet loader: loads data
- Prepare data CLI → Data cleaning: cleans data
- Prepare data CLI → Data splitting: creates splits
- Parquet loader → Data cleaning: provides rows
- Data cleaning → Data splitting: provides cleaned rows
- Data splitting → Saved splits: writes splits
- Experiment config → Prepare data CLI: configures
- Engineer → Train experiments CLI: runs training
- Train experiments CLI → Training orchestrator: runs experiments
- Experiment config → Train experiments CLI: configures
- Training orchestrator → Saved splits: loads splits
- Training orchestrator → Feature selection: selects features
- Training orchestrator → Feature preprocessing: builds transforms
- Training orchestrator → Imbalance strategies: resamples training data
- Training orchestrator → Model registry: requests model
- Model registry → Model implementations: builds model
- Training orchestrator → Saved models and preprocessors: saves artifacts
- Engineer → Evaluate CLI: runs evaluation
- Evaluate CLI → Evaluation orchestration: evaluates experiments
- Experiment config → Evaluate CLI: configures
- Evaluation orchestration → Saved models and preprocessors: loads models
- Evaluation orchestration → Saved splits: loads test data
- Evaluation orchestration → Classification metrics: calculates metrics
- Evaluation orchestration → Evaluation plots: generates plots
- Evaluation orchestration → Metrics and plot reports: writes reports
