# fenilkaneria/personal-ml-studio architecture

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

- Interactive diagram: https://gitdiagram.com/fenilkaneria/personal-ml-studio
- Repository: https://github.com/fenilkaneria/personal-ml-studio

## Overview

Personal ML Studio is an interactive workspace for structured-data machine learning: users upload a dataset, inspect it, choose advisory-guided preparation and modeling actions, then train, compare, predict, explain, and export. The React step registry and API client carry user choices to FastAPI; server-side sessions retain stage outputs and invalidate downstream results when earlier choices change. The README documents major ML capabilities not shown in sampled implementations; their modules are included, but uncertain internal call wiring is omitted.

Main entry points: [`backend/main.py`](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/main.py) (FastAPI application), [`backend/api/predictions.py`](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/predictions.py) (Prediction routes), [`backend/api/advisors.py`](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/advisors.py) (Advisor routes), [`backend/api/pipeline.py`](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/pipeline.py) (Preparation routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Workspace"]
  node_app["Workflow screens<br/>[App.tsx]"]
  node_steps["Pipeline navigation<br/>[pipeline.ts]"]
  node_client["Typed API client<br/>[client.ts]"]
end

subgraph group_api["API and State"]
  node_apiapp["FastAPI application<br/>[main.py]"]
  node_sessions[("Session state<br/>[session.py]")]
  node_datasetsapi["Dataset routes<br/>[datasets.py]"]
  node_advisoryapi["Advisor routes<br/>[advisors.py]"]
  node_pipelineapi["Preparation routes<br/>[pipeline.py]"]
  node_trainingapi["Training routes<br/>[training.py]"]
  node_evaluationapi["Evaluation routes<br/>[evaluation.py]"]
  node_predictionapi["Prediction routes<br/>[predictions.py]"]
end

subgraph group_data["Dataset Preparation"]
  node_profiler["Dataset profiler"]
  node_advisors["Recommendation engines"]
  node_preprocess["Preprocessing pipeline"]
  node_features["Feature engineering"]
end

subgraph group_modeling["Modeling and Results"]
  node_trainer["Model training<br/>[model_trainer.py]"]
  node_custommodels["Custom SVM and kNN"]
  node_ensemble["Hybrid ensemble<br/>[hybrid_ensemble.py]"]
  node_metrics["Evaluation metrics<br/>[metrics.py]"]
  node_explainer["SHAP explanations<br/>[explainer.py]"]
  node_report["Pipeline report<br/>[report.py]"]
end

subgraph group_narration["Optional Narration"]
  node_llm["Narration modules"]
  node_llmclient["Provider client<br/>[client.py]"]
end

node_user(("ML practitioner"))
node_provider["LLM provider"]

node_user -->|"chooses steps"| node_app
node_app -->|"tracks progress"| node_steps
node_app -->|"requests results"| node_client
node_client -->|"sends requests"| node_apiapp
node_apiapp -->|"dispatches routes"| node_datasetsapi
node_apiapp -->|"dispatches routes"| node_advisoryapi
node_apiapp -->|"dispatches routes"| node_pipelineapi
node_apiapp -->|"dispatches routes"| node_trainingapi
node_apiapp -->|"dispatches routes"| node_evaluationapi
node_apiapp -->|"dispatches routes"| node_predictionapi
node_apiapp -->|"creates sessions"| node_sessions
node_datasetsapi -->|"stores dataset"| node_sessions
node_advisoryapi -->|"reads stage state"| node_sessions
node_pipelineapi -->|"reads and writes"| node_sessions
node_pipelineapi -->|"fits transforms"| node_preprocess
node_pipelineapi -->|"fits features"| node_features
node_datasetsapi -->|"profiles dataset"| node_profiler
node_advisoryapi -->|"requests advice"| node_advisors
node_trainingapi -->|"trains models"| node_trainer
node_trainer -.->|"trains alternatives"| node_custommodels
node_evaluationapi -->|"computes comparison"| node_metrics
node_predictionapi -->|"runs ensemble"| node_ensemble
node_predictionapi -->|"computes attribution"| node_explainer
node_predictionapi -->|"exports report"| node_report
node_advisoryapi -.->|"requests narration"| node_llm
node_evaluationapi -.->|"requests narration"| node_llm
node_predictionapi -.->|"requests narration"| node_llm
node_llm -.->|"requests completion"| node_llmclient
node_llmclient -.->|"sends prompt"| node_provider

click node_app "https://github.com/fenilkaneria/personal-ml-studio/blob/main/frontend/src/App.tsx"
click node_steps "https://github.com/fenilkaneria/personal-ml-studio/blob/main/frontend/src/store/pipeline.ts"
click node_client "https://github.com/fenilkaneria/personal-ml-studio/blob/main/frontend/src/api/client.ts"
click node_apiapp "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/main.py"
click node_sessions "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/core/session.py"
click node_datasetsapi "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/datasets.py"
click node_advisoryapi "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/advisors.py"
click node_pipelineapi "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/pipeline.py"
click node_trainingapi "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/training.py"
click node_evaluationapi "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/evaluation.py"
click node_predictionapi "https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/predictions.py"
click node_profiler "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/profiling/dataset_profiler.py"
click node_advisors "https://github.com/fenilkaneria/personal-ml-studio/tree/main/src/advisors"
click node_preprocess "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/preprocessing/preprocessing_pipeline.py"
click node_features "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/features/feature_engineering.py"
click node_trainer "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/models/model_trainer.py"
click node_custommodels "https://github.com/fenilkaneria/personal-ml-studio/tree/main/src/models"
click node_ensemble "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/ensemble/hybrid_ensemble.py"
click node_metrics "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/evaluation/metrics.py"
click node_explainer "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/explainability/explainer.py"
click node_report "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/reporting/report.py"
click node_llm "https://github.com/fenilkaneria/personal-ml-studio/tree/main/src/llm"
click node_llmclient "https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/llm/client.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_app,node_steps,node_client toneBlue
class node_apiapp,node_sessions,node_datasetsapi,node_advisoryapi,node_pipelineapi,node_trainingapi,node_evaluationapi,node_predictionapi toneAmber
class node_profiler,node_advisors,node_preprocess,node_features toneMint
class node_trainer,node_custommodels,node_ensemble,node_metrics,node_explainer,node_report toneRose
class node_llm,node_llmclient,node_user,node_provider toneIndigo
```

## Components

### Workspace

- [Workflow screens](https://github.com/fenilkaneria/personal-ml-studio/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Pipeline navigation](https://github.com/fenilkaneria/personal-ml-studio/blob/main/frontend/src/store/pipeline.ts): `frontend/src/store/pipeline.ts`
- [Typed API client](https://github.com/fenilkaneria/personal-ml-studio/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`

### API and State

- [FastAPI application](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/main.py): `backend/main.py`
- [Session state](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/core/session.py): `backend/core/session.py`
- [Dataset routes](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/datasets.py): `backend/api/datasets.py`
- [Advisor routes](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/advisors.py): `backend/api/advisors.py`
- [Preparation routes](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/pipeline.py): `backend/api/pipeline.py`
- [Training routes](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/training.py): `backend/api/training.py`
- [Evaluation routes](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/evaluation.py): `backend/api/evaluation.py`
- [Prediction routes](https://github.com/fenilkaneria/personal-ml-studio/blob/main/backend/api/predictions.py): `backend/api/predictions.py`

### Dataset Preparation

- [Dataset profiler](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/profiling/dataset_profiler.py): `src/profiling/dataset_profiler.py`
- [Recommendation engines](https://github.com/fenilkaneria/personal-ml-studio/tree/main/src/advisors): `src/advisors`
- [Preprocessing pipeline](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/preprocessing/preprocessing_pipeline.py): `src/preprocessing/preprocessing_pipeline.py`
- [Feature engineering](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/features/feature_engineering.py): `src/features/feature_engineering.py`

### Modeling and Results

- [Model training](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/models/model_trainer.py): `src/models/model_trainer.py`
- [Custom SVM and kNN](https://github.com/fenilkaneria/personal-ml-studio/tree/main/src/models): `src/models`
- [Hybrid ensemble](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/ensemble/hybrid_ensemble.py): `src/ensemble/hybrid_ensemble.py`
- [Evaluation metrics](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/evaluation/metrics.py): `src/evaluation/metrics.py`
- [SHAP explanations](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/explainability/explainer.py): `src/explainability/explainer.py`
- [Pipeline report](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/reporting/report.py): `src/reporting/report.py`

### Optional Narration

- [Narration modules](https://github.com/fenilkaneria/personal-ml-studio/tree/main/src/llm): `src/llm`
- [Provider client](https://github.com/fenilkaneria/personal-ml-studio/blob/main/src/llm/client.py): `src/llm/client.py`

### Other components

- **ML practitioner**
- **LLM provider**

## Connections

- ML practitioner → Workflow screens: chooses steps
- Workflow screens → Pipeline navigation: tracks progress
- Workflow screens → Typed API client: requests results
- Typed API client → FastAPI application: sends requests
- FastAPI application → Dataset routes: dispatches routes
- FastAPI application → Advisor routes: dispatches routes
- FastAPI application → Preparation routes: dispatches routes
- FastAPI application → Training routes: dispatches routes
- FastAPI application → Evaluation routes: dispatches routes
- FastAPI application → Prediction routes: dispatches routes
- FastAPI application → Session state: creates sessions
- Dataset routes → Session state: stores dataset
- Advisor routes → Session state: reads stage state
- Preparation routes → Session state: reads and writes
- Preparation routes → Preprocessing pipeline: fits transforms
- Preparation routes → Feature engineering: fits features
- Dataset routes → Dataset profiler: profiles dataset
- Advisor routes → Recommendation engines: requests advice
- Training routes → Model training: trains models
- Model training → Custom SVM and kNN: trains alternatives
- Evaluation routes → Evaluation metrics: computes comparison
- Prediction routes → Hybrid ensemble: runs ensemble
- Prediction routes → SHAP explanations: computes attribution
- Prediction routes → Pipeline report: exports report
- Advisor routes → Narration modules: requests narration
- Evaluation routes → Narration modules: requests narration
- Prediction routes → Narration modules: requests narration
- Narration modules → Provider client: requests completion
- Provider client → LLM provider: sends prompt
