# panendrajadav/testlabs architecture

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

- Interactive diagram: https://gitdiagram.com/panendrajadav/testlabs
- Repository: https://github.com/panendrajadav/testlabs

## Overview

TestLabs is an AutoML application: users upload datasets, launch training, follow progress, inspect model results and artifacts, and ask dataset questions. The backend pipeline explicitly runs EDA, preprocessing, feature engineering, then parallel model evaluation; the pipeline route handles job execution, progress, and result persistence. The frontend also provides experiment tracking and local artifact/chat storage, with Firestore helpers for artifact and experiment records. Route and agent capabilities beyond the sampled implementation are represented where the tree supports them; their internal wiring is not inferred.

Main entry points: [`backend/graph/pipeline.py`](https://github.com/panendrajadav/testlabs/blob/main/backend/graph/pipeline.py) (Workflow runner), [`frontend/src/services/api.ts`](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/services/api.ts) (API client), [`backend/api/router.py`](https://github.com/panendrajadav/testlabs/blob/main/backend/api/router.py) (API router), [`backend/api/routes/pipeline.py`](https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/pipeline.py) (Pipeline jobs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_web["App pages"]
  node_dataset_hook["Dataset state"]
  node_api_client["API client<br/>[api.ts]"]
  node_api_hooks["API hooks<br/>[useApi.ts]"]
  node_pipeline_view["Pipeline view"]
  node_local_records["Local records"]
end

subgraph group_api["Backend API"]
  node_api_app["FastAPI app<br/>[app.py]"]
  node_router["API router<br/>[router.py]"]
  node_upload["Dataset upload<br/>[upload.py]"]
  node_pipeline_route["Pipeline jobs<br/>[pipeline.py]"]
  node_chat_route["Dataset chat<br/>[chat.py]"]
  node_artifact_route["Artifact endpoints<br/>[artifacts.py]"]
end

subgraph group_automl["AutoML workflow"]
  node_graph["Workflow runner<br/>[pipeline.py]"]
  node_state["Workflow state<br/>[state.py]"]
  node_evaluation["Model evaluation"]
  node_model_selection["Model selection"]
  node_hyperparameter["Hyperparameter tuning"]
end

subgraph group_data["Dataset analysis"]
  node_eda["EDA<br/>[eda_agent.py]"]
  node_preprocess["Preprocessing"]
  node_features["Feature selection"]
end

subgraph group_records["Results and records"]
  node_artifacts_agent["Artifact creation<br/>[artifacts_agent.py]"]
  node_firestore["Firestore records"]
  node_dataset_store[("Dataset records")]
end

node_user(("User"))
node_firebase[("Firebase")]
node_browser(("Browser"))

node_user -->|"uses"| node_web
node_web -->|"tracks dataset"| node_dataset_hook
node_web -->|"starts actions"| node_api_hooks
node_api_hooks -->|"calls"| node_api_client
node_api_hooks -->|"updates status"| node_pipeline_view
node_api_client -->|"uploads dataset"| node_upload
node_api_client -->|"requests pipeline"| node_pipeline_route
node_api_client -->|"sends question"| node_chat_route
node_api_client -->|"requests artifacts"| node_artifact_route
node_api_app -->|"mounts"| node_router
node_router -->|"dispatches"| node_upload
node_router -->|"dispatches"| node_pipeline_route
node_router -->|"dispatches"| node_chat_route
node_router -->|"dispatches"| node_artifact_route
node_pipeline_route -->|"runs workflow"| node_graph
node_graph -->|"calls"| node_eda
node_graph -->|"calls"| node_preprocess
node_graph -->|"calls"| node_features
node_graph -->|"calls"| node_evaluation
node_pipeline_route -->|"creates artifacts"| node_artifacts_agent
node_graph -->|"passes state"| node_state
node_pipeline_route -->|"broadcasts progress"| node_pipeline_view
node_dataset_hook -->|"reads and writes"| node_dataset_store
node_local_records -->|"stores locally"| node_browser
node_firestore -.->|"reads and writes"| node_firebase

click node_web "https://github.com/panendrajadav/testlabs/tree/main/frontend/src/app"
click node_dataset_hook "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useStoredDataset.ts"
click node_api_client "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/services/api.ts"
click node_api_hooks "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useApi.ts"
click node_pipeline_view "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/components/visualization/Pipeline3DVisualizer.tsx"
click node_local_records "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useStoredDataset.ts"
click node_api_app "https://github.com/panendrajadav/testlabs/blob/main/backend/api/app.py"
click node_router "https://github.com/panendrajadav/testlabs/blob/main/backend/api/router.py"
click node_upload "https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/upload.py"
click node_pipeline_route "https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/pipeline.py"
click node_chat_route "https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/chat.py"
click node_artifact_route "https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/artifacts.py"
click node_graph "https://github.com/panendrajadav/testlabs/blob/main/backend/graph/pipeline.py"
click node_state "https://github.com/panendrajadav/testlabs/blob/main/backend/graph/state.py"
click node_eda "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/eda_agent.py"
click node_preprocess "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/preprocessing_agent.py"
click node_features "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/feature_engineering_agent.py"
click node_evaluation "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/evaluation_agent.py"
click node_model_selection "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/model_selection_agent.py"
click node_hyperparameter "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/hyperparameter_agent.py"
click node_artifacts_agent "https://github.com/panendrajadav/testlabs/blob/main/backend/agents/artifacts_agent.py"
click node_firestore "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/services/firestoreService.ts"
click node_dataset_store "https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useStoredDataset.ts"

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_web,node_dataset_hook,node_api_client,node_api_hooks,node_pipeline_view,node_local_records,node_user,node_browser toneBlue
class node_api_app,node_router,node_upload,node_pipeline_route,node_chat_route,node_artifact_route,node_firebase toneAmber
class node_graph,node_state,node_evaluation,node_model_selection,node_hyperparameter toneMint
class node_eda,node_preprocess,node_features toneRose
class node_artifacts_agent,node_firestore,node_dataset_store toneIndigo
```

## Components

### Web application

- [App pages](https://github.com/panendrajadav/testlabs/tree/main/frontend/src/app): `frontend/src/app`
- [Dataset state](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useStoredDataset.ts): `frontend/src/hooks/useStoredDataset.ts`
- [API client](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`
- [API hooks](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useApi.ts): `frontend/src/hooks/useApi.ts`
- [Pipeline view](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/components/visualization/Pipeline3DVisualizer.tsx): `frontend/src/components/visualization/Pipeline3DVisualizer.tsx`
- [Local records](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useStoredDataset.ts): `frontend/src/hooks/useStoredDataset.ts`

### Backend API

- [FastAPI app](https://github.com/panendrajadav/testlabs/blob/main/backend/api/app.py): `backend/api/app.py`
- [API router](https://github.com/panendrajadav/testlabs/blob/main/backend/api/router.py): `backend/api/router.py`
- [Dataset upload](https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/upload.py): `backend/api/routes/upload.py`
- [Pipeline jobs](https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/pipeline.py): `backend/api/routes/pipeline.py`
- [Dataset chat](https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/chat.py): `backend/api/routes/chat.py`
- [Artifact endpoints](https://github.com/panendrajadav/testlabs/blob/main/backend/api/routes/artifacts.py): `backend/api/routes/artifacts.py`

### AutoML workflow

- [Workflow runner](https://github.com/panendrajadav/testlabs/blob/main/backend/graph/pipeline.py): `backend/graph/pipeline.py`
- [Workflow state](https://github.com/panendrajadav/testlabs/blob/main/backend/graph/state.py): `backend/graph/state.py`
- [Model evaluation](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/evaluation_agent.py): `backend/agents/evaluation_agent.py`
- [Model selection](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/model_selection_agent.py): `backend/agents/model_selection_agent.py`
- [Hyperparameter tuning](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/hyperparameter_agent.py): `backend/agents/hyperparameter_agent.py`

### Dataset analysis

- [EDA](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/eda_agent.py): `backend/agents/eda_agent.py`
- [Preprocessing](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/preprocessing_agent.py): `backend/agents/preprocessing_agent.py`
- [Feature selection](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/feature_engineering_agent.py): `backend/agents/feature_engineering_agent.py`

### Results and records

- [Artifact creation](https://github.com/panendrajadav/testlabs/blob/main/backend/agents/artifacts_agent.py): `backend/agents/artifacts_agent.py`
- [Firestore records](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/services/firestoreService.ts): `frontend/src/services/firestoreService.ts`
- [Dataset records](https://github.com/panendrajadav/testlabs/blob/main/frontend/src/hooks/useStoredDataset.ts): `frontend/src/hooks/useStoredDataset.ts`

### Other components

- **User**
- **Firebase**
- **Browser**

## Connections

- User → App pages: uses
- App pages → Dataset state: tracks dataset
- App pages → API hooks: starts actions
- API hooks → API client: calls
- API hooks → Pipeline view: updates status
- API client → Dataset upload: uploads dataset
- API client → Pipeline jobs: requests pipeline
- API client → Dataset chat: sends question
- API client → Artifact endpoints: requests artifacts
- FastAPI app → API router: mounts
- API router → Dataset upload: dispatches
- API router → Pipeline jobs: dispatches
- API router → Dataset chat: dispatches
- API router → Artifact endpoints: dispatches
- Pipeline jobs → Workflow runner: runs workflow
- Workflow runner → EDA: calls
- Workflow runner → Preprocessing: calls
- Workflow runner → Feature selection: calls
- Workflow runner → Model evaluation: calls
- Pipeline jobs → Artifact creation: creates artifacts
- Workflow runner → Workflow state: passes state
- Pipeline jobs → Pipeline view: broadcasts progress
- Dataset state → Dataset records: reads and writes
- Local records → Browser: stores locally
- Firestore records → Firebase: reads and writes
