- Add `infrastructure/energy/monitor.py` with `EnergyBudgetMonitor`:
- Estimates power draw via three strategies: battery discharge (ioreg),
CPU utilisation proxy (top), or model-size heuristic
- Tracks per-inference efficiency (tok/s per watt), scored 0–10
- Rolling window of 60 inference samples
- Auto-engages Low Power Mode when watts exceed threshold
- Low Power Mode advises routing to a compact model (energy_low_power_model)
- Add `dashboard/routes/energy.py` with REST endpoints:
- GET /energy/status — current power, efficiency score, samples
- GET /energy/report — full sample history
- POST /energy/low-power — toggle low power mode
- POST /energy/record — record an inference event
- Add config settings: energy_budget_enabled, energy_budget_watts_threshold,
energy_low_power_model
- Add 26 unit tests covering all estimation strategies and edge cases
Fixes#1009
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>