# jackielinn/mhfl-vs architecture

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

- Interactive diagram: https://gitdiagram.com/jackielinn/mhfl-vs
- Repository: https://github.com/jackielinn/mhfl-vs

## Overview

MHFL-VS is a federated-learning visualization and simulation platform. Users manage accounts and datasets, configure training tasks, run federated algorithms, and monitor round/client results live; they can also explore recommendations, platform health, and an RAG assistant. The README documents the Python → Redis → Spring Boot → MySQL/WebSocket training pipeline. Some subsystem links rely on README capabilities and the file tree because their implementations were not sampled.

Main entry points: [`mhfl-ui/src/main.ts`](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/main.ts) (Vue application), [`mhfl-server/src/main/java/ynu/jackielinn/server/listener/TrainingMessageListener.java`](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/listener/TrainingMessageListener.java) (Training messages), [`mhfl-algo/main.py`](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/main.py) (FastAPI routes), [`mhfl-server/src/main/java/ynu/jackielinn/server/service/TaskService.java`](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/TaskService.java) (Task orchestration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Vue user interface"]
  node_ui_app["Vue application<br/>[main.ts]"]
  node_ui_tasks["Task views<br/>[index.vue]"]
  node_ui_task_detail["Training views<br/>[index.vue]"]
  node_ui_api_task["Task API client<br/>[task.ts]"]
  node_ui_dashboard["Dashboard views<br/>[index.vue]"]
  node_ui_recommend["Recommendation views<br/>[index.vue]"]
  node_ui_assistant["Assistant views<br/>[index.vue]"]
  node_ui_api_assistant["Assistant API client<br/>[assistant.ts]"]
end

subgraph group_server["Spring application"]
  node_server_task_controller["Task endpoints"]
  node_server_task_service["Task orchestration<br/>[TaskService.java]"]
  node_server_auth["Account and access"]
  node_server_dashboard["Dashboard services"]
  node_server_recommend["Recommendations"]
  node_server_assistant["Assistant sessions"]
  node_server_listener["Training messages"]
  node_server_ws["Task WebSocket"]
end

subgraph group_algo["Federated learning service"]
  node_algo_api["FastAPI routes<br/>[main.py]"]
  node_algo_training["Training orchestration"]
  node_algo_core["Federated algorithms"]
  node_algo_assistant["RAG assistant<br/>[rag.py]"]
end

subgraph group_infra["Shared infrastructure"]
  node_mysql[("MySQL")]
  node_redis[("Redis")]
  node_rabbit["RabbitMQ"]
end

node_user(("Platform user"))

node_user -->|"uses"| node_ui_app
node_ui_app -->|"routes to"| node_ui_tasks
node_ui_app -->|"routes to"| node_ui_dashboard
node_ui_app -->|"routes to"| node_ui_recommend
node_ui_app -->|"routes to"| node_ui_assistant
node_ui_tasks -->|"requests"| node_ui_api_task
node_ui_task_detail -->|"requests"| node_ui_api_task
node_ui_api_task -->|"HTTP requests"| node_server_task_controller
node_server_task_controller -->|"delegates"| node_server_task_service
node_server_task_service -->|"starts or stops"| node_algo_api
node_algo_api -->|"dispatches"| node_algo_training
node_algo_training -->|"runs"| node_algo_core
node_algo_training -->|"publishes updates"| node_redis
node_redis -->|"delivers updates"| node_server_listener
node_server_listener -->|"persists results"| node_mysql
node_server_listener -->|"pushes updates"| node_server_ws
node_server_ws -->|"streams updates"| node_ui_task_detail
node_server_task_service -->|"reads and writes"| node_mysql
node_ui_dashboard -->|"requests"| node_server_dashboard
node_ui_recommend -->|"requests"| node_server_recommend
node_ui_assistant -->|"requests"| node_ui_api_assistant
node_ui_api_assistant -->|"HTTP and SSE"| node_server_assistant
node_server_assistant -->|"proxies chat"| node_algo_api
node_algo_api -->|"dispatches chat"| node_algo_assistant
node_server_assistant -->|"stores conversations"| node_mysql
node_server_listener -.->|"may consume messages"| node_rabbit

click node_ui_app "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/main.ts"
click node_ui_tasks "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Task/index.vue"
click node_ui_task_detail "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/TaskDetail/index.vue"
click node_ui_api_task "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/api/task.ts"
click node_ui_dashboard "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Dashboard/index.vue"
click node_ui_recommend "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Recommended/index.vue"
click node_ui_assistant "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Assistant/index.vue"
click node_ui_api_assistant "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/api/assistant.ts"
click node_server_task_controller "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/controller/TaskController.java"
click node_server_task_service "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/TaskService.java"
click node_server_auth "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/AccountService.java"
click node_server_dashboard "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/DashboardService.java"
click node_server_recommend "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/RecommendService.java"
click node_server_assistant "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/AssistantService.java"
click node_server_listener "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/listener/TrainingMessageListener.java"
click node_server_ws "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/websocket/TaskWebSocketHandler.java"
click node_algo_api "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/main.py"
click node_algo_training "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/services/training_service.py"
click node_algo_core "https://github.com/jackielinn/mhfl-vs/tree/main/mhfl-algo/fl_core/algorithms"
click node_algo_assistant "https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/assistant/rag.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_ui_app,node_ui_tasks,node_ui_task_detail,node_ui_api_task,node_ui_dashboard,node_ui_recommend,node_ui_assistant,node_ui_api_assistant,node_user toneBlue
class node_server_task_controller,node_server_task_service,node_server_auth,node_server_dashboard,node_server_recommend,node_server_assistant,node_server_listener,node_server_ws toneAmber
class node_algo_api,node_algo_training,node_algo_core,node_algo_assistant toneMint
class node_mysql,node_redis,node_rabbit toneRose
```

## Components

### Vue user interface

- [Vue application](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/main.ts): `mhfl-ui/src/main.ts`
- [Task views](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Task/index.vue): `mhfl-ui/src/views/Task/index.vue`
- [Training views](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/TaskDetail/index.vue): `mhfl-ui/src/views/TaskDetail/index.vue`
- [Task API client](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/api/task.ts): `mhfl-ui/src/api/task.ts`
- [Dashboard views](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Dashboard/index.vue): `mhfl-ui/src/views/Dashboard/index.vue`
- [Recommendation views](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Recommended/index.vue): `mhfl-ui/src/views/Recommended/index.vue`
- [Assistant views](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/views/Assistant/index.vue): `mhfl-ui/src/views/Assistant/index.vue`
- [Assistant API client](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-ui/src/api/assistant.ts): `mhfl-ui/src/api/assistant.ts`

### Spring application

- [Task endpoints](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/controller/TaskController.java): `mhfl-server/src/main/java/ynu/jackielinn/server/controller/TaskController.java`
- [Task orchestration](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/TaskService.java): `mhfl-server/src/main/java/ynu/jackielinn/server/service/TaskService.java`
- [Account and access](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/AccountService.java): `mhfl-server/src/main/java/ynu/jackielinn/server/service/AccountService.java`
- [Dashboard services](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/DashboardService.java): `mhfl-server/src/main/java/ynu/jackielinn/server/service/DashboardService.java`
- [Recommendations](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/RecommendService.java): `mhfl-server/src/main/java/ynu/jackielinn/server/service/RecommendService.java`
- [Assistant sessions](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/service/AssistantService.java): `mhfl-server/src/main/java/ynu/jackielinn/server/service/AssistantService.java`
- [Training messages](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/listener/TrainingMessageListener.java): `mhfl-server/src/main/java/ynu/jackielinn/server/listener/TrainingMessageListener.java`
- [Task WebSocket](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-server/src/main/java/ynu/jackielinn/server/websocket/TaskWebSocketHandler.java): `mhfl-server/src/main/java/ynu/jackielinn/server/websocket/TaskWebSocketHandler.java`

### Federated learning service

- [FastAPI routes](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/main.py): `mhfl-algo/main.py`
- [Training orchestration](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/services/training_service.py): `mhfl-algo/services/training_service.py`
- [Federated algorithms](https://github.com/jackielinn/mhfl-vs/tree/main/mhfl-algo/fl_core/algorithms): `mhfl-algo/fl_core/algorithms`
- [RAG assistant](https://github.com/jackielinn/mhfl-vs/blob/main/mhfl-algo/assistant/rag.py): `mhfl-algo/assistant/rag.py`

### Shared infrastructure

- **MySQL**
- **Redis**
- **RabbitMQ**

### Other components

- **Platform user**

## Connections

- Platform user → Vue application: uses
- Vue application → Task views: routes to
- Vue application → Dashboard views: routes to
- Vue application → Recommendation views: routes to
- Vue application → Assistant views: routes to
- Task views → Task API client: requests
- Training views → Task API client: requests
- Task API client → Task endpoints: HTTP requests
- Task endpoints → Task orchestration: delegates
- Task orchestration → FastAPI routes: starts or stops
- FastAPI routes → Training orchestration: dispatches
- Training orchestration → Federated algorithms: runs
- Training orchestration → Redis: publishes updates
- Redis → Training messages: delivers updates
- Training messages → MySQL: persists results
- Training messages → Task WebSocket: pushes updates
- Task WebSocket → Training views: streams updates
- Task orchestration → MySQL: reads and writes
- Dashboard views → Dashboard services: requests
- Recommendation views → Recommendations: requests
- Assistant views → Assistant API client: requests
- Assistant API client → Assistant sessions: HTTP and SSE
- Assistant sessions → FastAPI routes: proxies chat
- FastAPI routes → RAG assistant: dispatches chat
- Assistant sessions → MySQL: stores conversations
- Training messages → RabbitMQ: may consume messages
