# xiaoyuan-114/water-quality-system architecture

> Architecture diagram of the GitHub repository xiaoyuan-114/water-quality-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xiaoyuan-114/water-quality-system
- Repository: https://github.com/xiaoyuan-114/water-quality-system

## Overview

Water Quality AI Detection System combines a Jakarta EE web application, a Python prediction API, a chat agent, and MySQL. The principal workflow is that a user submits water-quality measurements through the web app; the prediction servlet calls the AI API, which preprocesses measurements and returns a model result for presentation and recording. Other documented capabilities include accounts, dashboards, history, alerts, standards, and administrator backup/restore. The chat service offers a separate natural-language route to records, predictions, standards, trends, and reports. Some subsystem links are based on README descriptions because their source was not sampled.

Main entry points: [`WaterQualitySystem/src/main/java/com/example/waterqualitysystem`](https://github.com/xiaoyuan-114/water-quality-system/tree/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem) (Jakarta EE app), [`WaterQualityAI/chat_tools.py`](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_tools.py) (Chat tools), [`WaterQualityAI/chat_agent.py`](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_agent.py) (LLM agent), [`WaterQualityAI/ai_api.py`](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/ai_api.py) (Prediction API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_webapp["Jakarta EE app"]
  node_auth["Accounts and access<br/>[LoginServlet.java]"]
  node_predict["Prediction handler"]
  node_dashboard["Dashboard views<br/>[dashboard.jsp]"]
  node_history["History and alerts"]
  node_knowledge["Standards and model info"]
  node_backup["Admin backup<br/>[BackupServlet.java]"]
end

subgraph group_ai["AI prediction"]
  node_api["Prediction API<br/>[ai_api.py]"]
  node_preprocess["Input preprocessing<br/>[data_preprocess.py]"]
  node_training["Model training<br/>[model_train.py]"]
end

subgraph group_chat["Chat assistant"]
  node_chatservice["Chat API<br/>[chat_main.py]"]
  node_agent["LLM agent<br/>[chat_agent.py]"]
  node_tools["Chat tools<br/>[chat_tools.py]"]
  node_chatconfig["Chat configuration<br/>[chat_config.py]"]
end

subgraph group_data["System data"]
  node_mysql[("MySQL database")]
end

node_user(("Browser user"))
node_llm["LLM provider"]

node_user -->|"uses"| node_webapp
node_webapp -.->|"routes account actions"| node_auth
node_webapp -.->|"routes predictions"| node_predict
node_predict -->|"requests prediction"| node_api
node_api -->|"transforms inputs"| node_preprocess
node_training -->|"fits preprocessing"| node_preprocess
node_api -.->|"provides system analysis"| node_mysql
node_webapp -->|"stores system data"| node_mysql
node_webapp -->|"renders dashboard"| node_dashboard
node_webapp -->|"serves history and alerts"| node_history
node_webapp -->|"serves reference pages"| node_knowledge
node_backup -->|"backs up and restores"| node_mysql
node_user -->|"asks questions"| node_chatservice
node_chatservice -->|"streams responses"| node_agent
node_agent -->|"dispatches tools"| node_tools
node_chatservice -->|"persists sessions"| node_tools
node_tools -->|"requests predictions"| node_api
node_tools -->|"queries records"| node_mysql
node_agent -->|"loads LLM settings"| node_chatconfig
node_tools -->|"loads database settings"| node_chatconfig
node_agent -.->|"calls model"| node_llm

click node_webapp "https://github.com/xiaoyuan-114/water-quality-system/tree/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem"
click node_auth "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/LoginServlet.java"
click node_predict "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/PredictServlet.java"
click node_dashboard "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/webapp/dashboard.jsp"
click node_history "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/HistoryServlet.java"
click node_knowledge "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/webapp/water_standards.jsp"
click node_backup "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/BackupServlet.java"
click node_api "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/ai_api.py"
click node_preprocess "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/data_preprocess.py"
click node_training "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/model_train.py"
click node_chatservice "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_main.py"
click node_agent "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_agent.py"
click node_tools "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_tools.py"
click node_chatconfig "https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_config.py"
click node_mysql "https://github.com/xiaoyuan-114/water-quality-system/blob/main/mysql/water_quality_db.sql"

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_webapp,node_auth,node_predict,node_dashboard,node_history,node_knowledge,node_backup,node_user toneBlue
class node_api,node_preprocess,node_training toneAmber
class node_chatservice,node_agent,node_tools,node_chatconfig toneMint
class node_mysql toneRose
class node_llm toneIndigo
```

## Components

### Web application

- [Jakarta EE app](https://github.com/xiaoyuan-114/water-quality-system/tree/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem): `WaterQualitySystem/src/main/java/com/example/waterqualitysystem`
- [Accounts and access](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/LoginServlet.java): `WaterQualitySystem/src/main/java/com/example/waterqualitysystem/LoginServlet.java`
- [Prediction handler](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/PredictServlet.java): `WaterQualitySystem/src/main/java/com/example/waterqualitysystem/PredictServlet.java`
- [Dashboard views](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/webapp/dashboard.jsp): `WaterQualitySystem/src/main/webapp/dashboard.jsp`
- [History and alerts](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/HistoryServlet.java): `WaterQualitySystem/src/main/java/com/example/waterqualitysystem/HistoryServlet.java`
- [Standards and model info](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/webapp/water_standards.jsp): `WaterQualitySystem/src/main/webapp/water_standards.jsp`
- [Admin backup](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualitySystem/src/main/java/com/example/waterqualitysystem/BackupServlet.java): `WaterQualitySystem/src/main/java/com/example/waterqualitysystem/BackupServlet.java`

### AI prediction

- [Prediction API](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/ai_api.py): `WaterQualityAI/ai_api.py`
- [Input preprocessing](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/data_preprocess.py): `WaterQualityAI/data_preprocess.py`
- [Model training](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/model_train.py): `WaterQualityAI/model_train.py`

### Chat assistant

- [Chat API](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_main.py): `WaterQualityAI/chat_main.py`
- [LLM agent](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_agent.py): `WaterQualityAI/chat_agent.py`
- [Chat tools](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_tools.py): `WaterQualityAI/chat_tools.py`
- [Chat configuration](https://github.com/xiaoyuan-114/water-quality-system/blob/main/WaterQualityAI/chat_config.py): `WaterQualityAI/chat_config.py`

### System data

- [MySQL database](https://github.com/xiaoyuan-114/water-quality-system/blob/main/mysql/water_quality_db.sql): `mysql/water_quality_db.sql`

### Other components

- **Browser user**
- **LLM provider**

## Connections

- Browser user → Jakarta EE app: uses (evidence: `README.md`)
- Jakarta EE app → Accounts and access: routes account actions
- Jakarta EE app → Prediction handler: routes predictions
- Prediction handler → Prediction API: requests prediction (evidence: `README.md`)
- Prediction API → Input preprocessing: transforms inputs (evidence: `WaterQualityAI/ai_api.py`)
- Model training → Input preprocessing: fits preprocessing (evidence: `WaterQualityAI/model_train.py`)
- Prediction API → MySQL database: provides system analysis
- Jakarta EE app → MySQL database: stores system data (evidence: `README.md`)
- Jakarta EE app → Dashboard views: renders dashboard (evidence: `README.md`)
- Jakarta EE app → History and alerts: serves history and alerts (evidence: `README.md`)
- Jakarta EE app → Standards and model info: serves reference pages (evidence: `README.md`)
- Admin backup → MySQL database: backs up and restores (evidence: `README.md`)
- Browser user → Chat API: asks questions (evidence: `WaterQualityAI/chat_main.py`)
- Chat API → LLM agent: streams responses (evidence: `WaterQualityAI/chat_main.py`)
- LLM agent → Chat tools: dispatches tools (evidence: `WaterQualityAI/chat_agent.py`)
- Chat API → Chat tools: persists sessions (evidence: `WaterQualityAI/chat_main.py`)
- Chat tools → Prediction API: requests predictions (evidence: `WaterQualityAI/chat_tools.py`)
- Chat tools → MySQL database: queries records (evidence: `WaterQualityAI/chat_tools.py`)
- LLM agent → Chat configuration: loads LLM settings (evidence: `WaterQualityAI/chat_agent.py`)
- Chat tools → Chat configuration: loads database settings (evidence: `WaterQualityAI/chat_config.py`)
- LLM agent → LLM provider: calls model
