Skip to content

Latest commit

Β 

History

History
440 lines (421 loc) Β· 24.1 KB

File metadata and controls

440 lines (421 loc) Β· 24.1 KB

T5 Training GUI - System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         USER INTERFACE (Browser)                         β”‚
β”‚                          http://localhost:3000                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β”‚ HTTP/REST
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   React Frontend        β”‚
                    β”‚   SettingsTabs.js       β”‚
                    β”‚                         β”‚
                    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
                    β”‚  β”‚ ModelTrainingTab β”‚   β”‚
                    β”‚  β”‚                  β”‚   β”‚
                    β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚   β”‚
                    β”‚  β”‚ β”‚ Example Form β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Question   β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Sensors    β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - SPARQL     β”‚ β”‚   β”‚
                    β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚   β”‚
                    β”‚  β”‚                  β”‚   β”‚
                    β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚   β”‚
                    β”‚  β”‚ β”‚Examples Tableβ”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Edit       β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Delete     β”‚ β”‚   β”‚
                    β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚   β”‚
                    β”‚  β”‚                  β”‚   β”‚
                    β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚   β”‚
                    β”‚  β”‚ β”‚Training Mon. β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Progress   β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Logs       β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Status     β”‚ β”‚   β”‚
                    β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚   β”‚
                    β”‚  β”‚                  β”‚   β”‚
                    β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚   β”‚
                    β”‚  β”‚ β”‚Model Manager β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - List       β”‚ β”‚   β”‚
                    β”‚  β”‚ β”‚ - Deploy     β”‚ β”‚   β”‚
                    β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚   β”‚
                    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β”‚ REST API Calls
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   Flask Backend         β”‚
                    β”‚   http://localhost:6000 β”‚
                    β”‚                         β”‚
                    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
                    β”‚  β”‚ t5_training_bp   β”‚   β”‚
                    β”‚  β”‚                  β”‚   β”‚
                    β”‚  β”‚ API Endpoints:   β”‚   β”‚
                    β”‚  β”‚ β”œβ”€ GET /sensors  β”‚   β”‚
                    β”‚  β”‚ β”œβ”€ GET /examples β”‚   β”‚
                    β”‚  β”‚ β”œβ”€ POST/PUT/DEL  β”‚   β”‚
                    β”‚  β”‚ β”œβ”€ POST /train   β”‚   β”‚
                    β”‚  β”‚ β”œβ”€ GET /status   β”‚   β”‚
                    β”‚  β”‚ β”œβ”€ POST /deploy  β”‚   β”‚
                    β”‚  β”‚ └─ GET /models   β”‚   β”‚
                    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚   β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   └──────────────────┐
            β”‚                                         β”‚
            β”‚ File I/O                                β”‚ Subprocess
            β”‚                                         β”‚
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚  Data Files     β”‚                      β”‚  Python Script  β”‚
   β”‚                 β”‚                      β”‚                 β”‚
   β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                      β”‚ quick_train.py  β”‚
   β”‚ β”‚sensor_list  β”‚ β”‚                      β”‚                 β”‚
   β”‚ β”‚.txt         β”‚ β”‚                      β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
   β”‚ β”‚(680 sensors)β”‚ β”‚                      β”‚ β”‚Load Dataset β”‚ β”‚
   β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                      β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚
   β”‚                 β”‚                      β”‚        β”‚        β”‚
   β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                      β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”‚
   β”‚ β”‚correlation_ β”‚ │◄─────────────────────┼──Tokenize Dataβ”‚ β”‚
   β”‚ β”‚fixes.json   β”‚ β”‚   Read/Write         β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚
   β”‚ β”‚(10 examples)β”‚ β”‚                      β”‚        β”‚        β”‚
   β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                      β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”‚
   β”‚                 β”‚                      β”‚ β”‚Fine-tune T5 β”‚ β”‚
   β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                      β”‚ β”‚Model        β”‚ β”‚
   β”‚ β”‚Model        β”‚ β”‚                      β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚
   β”‚ β”‚Checkpoints  β”‚ β”‚                      β”‚        β”‚        β”‚
   β”‚ β”‚             β”‚ β”‚                      β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”‚
   β”‚ β”‚- checkpoint-β”‚ │◄─────────────────────┼──Save Model   β”‚ β”‚
   β”‚ β”‚  quick-fix  β”‚ β”‚   Write              β”‚ β”‚(checkpoint- β”‚ β”‚
   β”‚ β”‚             β”‚ β”‚                      β”‚ β”‚ quick-fix)  β”‚ β”‚
   β”‚ β”‚- checkpoint-β”‚ β”‚                      β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
   β”‚ β”‚  3 (prod)   β”‚ β”‚                      β”‚                 β”‚
   β”‚ β”‚             β”‚ β”‚                      β”‚ Stream stdout   β”‚
   β”‚ β”‚- backups    β”‚ β”‚                      β”‚ for logs        β”‚
   β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                               β”‚
                                                     β”‚
                                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
                                            β”‚  Transformers   β”‚
                                            β”‚  Library        β”‚
                                            β”‚                 β”‚
                                            β”‚  - T5Tokenizer  β”‚
                                            β”‚  - T5Model      β”‚
                                            β”‚  - Trainer      β”‚
                                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow Diagrams

1. Add Training Example Flow

User Input (Form)
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ React State β”‚
β”‚ - question  β”‚
β”‚ - sensors   β”‚
β”‚ - sparql    β”‚
β”‚ - category  β”‚
β”‚ - notes     β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”‚ POST /api/t5/examples
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Backend Handler β”‚
β”‚ - Validate data β”‚
β”‚ - Load JSON     β”‚
β”‚ - Append exampleβ”‚
β”‚ - Save JSON     β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚correlation_fixesβ”‚
β”‚.json            β”‚
β”‚[...existing,    β”‚
β”‚ new_example]    β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”‚ Response
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚React Update β”‚
β”‚- Clear form β”‚
β”‚- Reload listβ”‚
β”‚- Show alert β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Training Flow

User Clicks "Start Training"
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚POST /train   β”‚
β”‚{epochs: 10}  β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Backend           β”‚
β”‚- Create job_id   β”‚
β”‚- Init job state  β”‚
β”‚- Start thread    β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚                  β”‚
       β”‚ Return           β”‚ Background Thread
       β”‚ job_id           β”‚
       β”‚                  β–Ό
       β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚         β”‚Run quick_train β”‚
       β”‚         β”‚.py subprocess  β”‚
       β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                  β”‚
       β”‚                  β”‚ Stream Output
       β”‚                  β–Ό
       β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚         β”‚Update job:     β”‚
       β”‚         β”‚- logs          β”‚
       β”‚         β”‚- progress      β”‚
       β”‚         β”‚- status        β”‚
       β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                  β”‚
       β–Ό                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Frontend      β”‚ β”‚Training        β”‚
β”‚- Receive     β”‚ β”‚Completes       β”‚
β”‚  job_id      β”‚ β”‚- Save model    β”‚
β”‚- Start poll  β”‚ β”‚- Update status β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                  β”‚
       β”‚ Poll every 2s    β”‚
       β”‚                  β”‚
       β”‚ GET /train/:id/status
       β”‚β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Update UI     β”‚
β”‚- Progress barβ”‚
β”‚- Logs        β”‚
β”‚- Status      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3. Model Deployment Flow

Training Completed
       β”‚
       β–Ό
User Clicks "Deploy Model"
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚POST /deploy    β”‚
β”‚{job_id: "..."}β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Backend                 β”‚
β”‚1. Validate job_id      β”‚
β”‚2. Check status=completeβ”‚
β”‚3. Locate trained model β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Backup Current Model    β”‚
β”‚checkpoint-3 β†’          β”‚
β”‚checkpoint-3-backup-    β”‚
β”‚  YYYYMMDD_HHMMSS       β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Copy New Model          β”‚
β”‚checkpoint-quick-fix β†’  β”‚
β”‚checkpoint-3            β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”‚ Success Response
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Frontend                β”‚
β”‚- Show success message  β”‚
β”‚- Remind restart needed β”‚
β”‚- Reload models list    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”‚ User Action Required
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Go to Action Server Tab β”‚
β”‚Click "Restart Server"  β”‚
β”‚β†’ New model active!     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Component Interaction Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    React Component Lifecycle                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                               β”‚
β”‚  componentDidMount / useEffect([])                           β”‚
β”‚     β”‚                                                         β”‚
β”‚     β”œβ”€β–Ί loadSensors()                                        β”‚
β”‚     β”‚     β”‚                                                   β”‚
β”‚     β”‚     └─► GET /api/t5/sensors                            β”‚
β”‚     β”‚           β”‚                                             β”‚
β”‚     β”‚           └─► setSensors([...])                        β”‚
β”‚     β”‚                                                         β”‚
β”‚     β”œβ”€β–Ί loadExamples()                                       β”‚
β”‚     β”‚     β”‚                                                   β”‚
β”‚     β”‚     └─► GET /api/t5/examples                           β”‚
β”‚     β”‚           β”‚                                             β”‚
β”‚     β”‚           └─► setExamples([...])                       β”‚
β”‚     β”‚                                                         β”‚
β”‚     └─► loadModels()                                         β”‚
β”‚           β”‚                                                   β”‚
β”‚           └─► GET /api/t5/models                             β”‚
β”‚                 β”‚                                             β”‚
β”‚                 └─► setAvailableModels([...])                β”‚
β”‚                                                               β”‚
β”‚  User Interaction                                            β”‚
β”‚     β”‚                                                         β”‚
β”‚     β”œβ”€β–Ί handleAddExample()                                   β”‚
β”‚     β”‚     β”‚                                                   β”‚
β”‚     β”‚     β”œβ”€β–Ί POST /api/t5/examples                          β”‚
β”‚     β”‚     β”‚     β”‚                                             β”‚
β”‚     β”‚     β”‚     └─► loadExamples()                           β”‚
β”‚     β”‚     β”‚                                                   β”‚
β”‚     β”‚     └─► clearForm()                                    β”‚
β”‚     β”‚                                                         β”‚
β”‚     β”œβ”€β–Ί handleStartTraining()                                β”‚
β”‚     β”‚     β”‚                                                   β”‚
β”‚     β”‚     └─► POST /api/t5/train                             β”‚
β”‚     β”‚           β”‚                                             β”‚
β”‚     β”‚           └─► setTrainingJobId(...)                    β”‚
β”‚     β”‚                 β”‚                                       β”‚
β”‚     β”‚                 └─► Triggers polling effect            β”‚
β”‚     β”‚                                                         β”‚
β”‚     └─► handleDeployModel()                                  β”‚
β”‚           β”‚                                                   β”‚
β”‚           └─► POST /api/t5/deploy                            β”‚
β”‚                 β”‚                                             β”‚
β”‚                 └─► loadModels()                             β”‚
β”‚                                                               β”‚
β”‚  useEffect([trainingJobId, trainingStatus])                  β”‚
β”‚     β”‚                                                         β”‚
β”‚     └─► if (trainingStatus === 'running')                    β”‚
β”‚           β”‚                                                   β”‚
β”‚           └─► setInterval(() => {                            β”‚
β”‚                 pollTrainingStatus(trainingJobId)            β”‚
β”‚               }, 2000)                                        β”‚
β”‚                 β”‚                                             β”‚
β”‚                 └─► GET /api/t5/train/:id/status             β”‚
β”‚                       β”‚                                       β”‚
β”‚                       └─► setTrainingProgress(...)           β”‚
β”‚                       └─► setTrainingLogs(...)               β”‚
β”‚                       └─► setTrainingStatus(...)             β”‚
β”‚                                                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

File System Structure

OntoBot/
β”‚
β”œβ”€β”€ microservices/
β”‚   β”œβ”€β”€ app.py                           [Modified]
β”‚   β”œβ”€β”€ requirements.txt                 [Existing]
β”‚   └── blueprints/
β”‚       └── t5_training.py               [NEW]
β”‚
β”œβ”€β”€ rasa-frontend/
β”‚   β”œβ”€β”€ package.json                     [Modified]
β”‚   └── src/
β”‚       └── pages/
β”‚           β”œβ”€β”€ SettingsTabs.js          [Modified]
β”‚           └── ModelTrainingTab.js      [NEW]
β”‚
β”œβ”€β”€ rasa-bldg1/
β”‚   └── actions/
β”‚       └── sensor_list.txt              [Used by API]
β”‚
β”œβ”€β”€ Transformers/
β”‚   └── t5_base/
β”‚       β”œβ”€β”€ quick_train.py               [Called by API]
β”‚       β”œβ”€β”€ GUI_TRAINING_GUIDE.md        [NEW]
β”‚       β”œβ”€β”€ training/
β”‚       β”‚   └── bldg1/
β”‚       β”‚       └── correlation_fixes.json [Read/Write]
β”‚       └── trained/
β”‚           β”œβ”€β”€ checkpoint-3/             [Production]
β”‚           β”œβ”€β”€ checkpoint-quick-fix/     [Training Output]
β”‚           └── checkpoint-3-backup-*/    [Auto Backups]
β”‚
└── Documentation/                        [NEW]
    β”œβ”€β”€ T5_GUI_SETUP.md
    β”œβ”€β”€ T5_GUI_IMPLEMENTATION.md
    └── QUICKSTART_GUI.md

Technology Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       Frontend Stack                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ React 19.0.0         - UI Framework                     β”‚
β”‚ β€’ React Bootstrap      - UI Components                    β”‚
β”‚ β€’ react-select 5.8.0   - Multi-select Dropdown           β”‚
β”‚ β€’ React Router         - Navigation                       β”‚
β”‚ β€’ Axios                - HTTP Client                      β”‚
β”‚ β€’ Bootstrap 5.3.3      - CSS Framework                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       Backend Stack                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ Flask 2.0.3          - Web Framework                    β”‚
β”‚ β€’ Flask-CORS           - CORS Support                     β”‚
β”‚ β€’ Python 3.x           - Runtime                          β”‚
β”‚ β€’ Threading            - Background Jobs                  β”‚
β”‚ β€’ Subprocess           - Script Execution                 β”‚
β”‚ β€’ JSON                 - Data Storage                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       ML/Training Stack                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β€’ Transformers         - T5 Model                         β”‚
β”‚ β€’ PyTorch              - Deep Learning                    β”‚
β”‚ β€’ Datasets             - Data Loading                     β”‚
β”‚ β€’ T5-base              - Base Model                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Security & Performance

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Current Implementation                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Network:                                                   β”‚
β”‚ β€’ Localhost only (3000, 6000)                             β”‚
β”‚ β€’ No external access                                      β”‚
β”‚ β€’ CORS enabled for local development                     β”‚
β”‚                                                            β”‚
β”‚ Authentication:                                            β”‚
β”‚ β€’ None (local development)                                β”‚
β”‚ β€’ No user management                                      β”‚
β”‚                                                            β”‚
β”‚ Data Validation:                                           β”‚
β”‚ β€’ Basic form validation                                   β”‚
β”‚ β€’ Required field checks                                   β”‚
β”‚ β€’ File existence checks                                   β”‚
β”‚                                                            β”‚
β”‚ Performance:                                               β”‚
β”‚ β€’ Single training job at a time                           β”‚
β”‚ β€’ 2-second polling interval                               β”‚
β”‚ β€’ Background thread processing                            β”‚
β”‚ β€’ No request queuing                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

This architecture provides a complete, maintainable solution for T5 model training with clear separation of concerns and scalable design patterns.