You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Created `LICENSE` (MIT, matching related projects)
351
+
- Created `.github/workflows/publish.yml` for automated PyPI publishing on version tags
352
+
- Build system: hatchling
353
+
354
+
To publish:
355
+
1. Set up PyPI trusted publishing (PyPI → Account Settings → Publishing)
356
+
2.`git tag v0.1.0 && git push origin v0.1.0`
275
357
276
358
### Azure WAA Evaluation - ACR Auth Issue
277
359
**Status**: FIXED - setup_azure.py now configures ACR authentication automatically
@@ -316,21 +398,36 @@ az ml workspace sync-keys -n openadapt-ml -g openadapt-agents
316
398
-[ACR Pull Role Assignment](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication-managed-identity)
317
399
318
400
### Training Dashboard - Terminal Output Streaming
319
-
**Status**: TODO - nice to have
401
+
**Status**: DONE
320
402
321
403
**Goal**: Show training command line output in the browser dashboard in real-time.
322
404
323
-
**Possible approaches**:
324
-
1.**File-based polling** (simplest): Training writes stdout to `training_output/training.log`, browser polls and displays in a `<pre>` element with auto-scroll
325
-
2.**WebSocket**: Run training in subprocess, stream stdout via WebSocket server to browser
326
-
3.**Server-sent events (SSE)**: Similar to WebSocket but simpler, one-way streaming
327
-
328
-
**Recommended**: File-based polling is simplest and consistent with current JSON polling approach. Add:
329
-
-`--log-stdout` flag to train.py that tees output to training.log
330
-
- Add scrollable terminal panel to dashboard.html
331
-
- Poll training.log alongside training_log.json
405
+
**Implementation**: File-based polling approach
406
+
1. Training writes stdout to `training_output/training.log` with timestamps
407
+
2. Browser polls training.log every 2 seconds alongside training_log.json
408
+
3. Displays last 500 lines in scrollable terminal panel with auto-scroll
409
+
4. Terminal panel features:
410
+
- Dark terminal theme (black background, green/colored text)
411
+
- Auto-scroll toggle (on by default)
412
+
- Text wrap toggle
413
+
- Collapse/expand button
414
+
- Line counter
415
+
- Syntax highlighting (errors in red, warnings in orange, success in green)
332
416
333
-
**Priority**: Low - current dashboard shows key metrics (loss, epoch, step). Terminal output mainly useful for debugging.
417
+
**Files changed**:
418
+
-`openadapt_ml/training/trainer.py`:
419
+
- Added terminal panel CSS styles
420
+
- Added terminal panel HTML section
421
+
- Added JavaScript polling function `fetchTerminalOutput()`
- Or use DevTools → Network → "Disable cache" checkbox
579
+
580
+
4.**Use HTTP serving** (not file://) for auto-refresh:
581
+
```bash
582
+
uv run python -m openadapt_ml.cloud.local serve --port 8080 --open
583
+
```
584
+
585
+
### Before Showing User
586
+
587
+
Before presenting dashboard/viewer to user, verify:
588
+
-[ ] Elapsed time shows correct value (not 0m 0s)
589
+
-[ ] Comparison screenshots load (not blank/404)
590
+
-[ ] Model predictions appear in dropdown
591
+
-[ ] Loss curve shows data
592
+
-[ ] Timestamp info panel shows recent dates
593
+
594
+
### Automatic Data Loading Checklist
595
+
596
+
The viewer should automatically load:
597
+
-[ ] Capture data from `comparison_epoch*.html` files (extracts `window.comparisonData`)
598
+
-[ ] Predictions from same comparison HTML files (human + predicted actions per step)
599
+
-[ ] Evaluations from `training_log.json` (if present)
600
+
-[ ] Recording events from capture data (note: `recording.end` depends on capture source)
601
+
602
+
### Common Issues
603
+
604
+
| Symptom | Cause | Fix |
605
+
|---------|-------|-----|
606
+
| Elapsed time shows 0m 0s |`elapsed_time` not loaded from training_log.json | Check `state.elapsed_time = data.get("elapsed_time", 0.0)` in local.py |
607
+
| No comparison screenshots | Paths point to Lambda not local | Update `capture_path` in training_log.json to local path |
608
+
| Missing model predictions | No `comparison_epoch*.html` files or wrong data format | Run compare script: `uv run python -m openadapt_ml.scripts.compare --capture ... --checkpoint ...`|
609
+
| Predictions not extracted | HTML uses `window.comparisonData` but regex expects `const`| Use regex `(?:const\s+\|window\.)comparisonData` pattern |
610
+
| Stale data after code change | Browser caching HTML | Hard refresh (Cmd+Shift+R) or disable cache |
0 commit comments