Files
kde-strata-dashboard/README.md
T
enne2 2a0020ca91 Strata dashboard plasmoid v1.2: barre a soglie e velocita decode/prefill
- card GPU con barre progressive: VRAM (informativa), utilizzo 60/85 %,
  temperatura 75/85 C, potenza su budget 350 W (ambra 70 %, rosso 90 %)
- velocita del motore: DEC (generazione) e PRE (prefill) in tok/s, live
  durante la generazione, ultima richiesta da fermo (badge LIVE/ULTIMA);
  semantica inversa: verde sopra la nominale, ambra fra 50 % e nominale
- card servizio + controllo unificata con switch load/unload nativo e
  stato che si chiude sulla fase osservata
- MetricBar condiviso con levelColor()/speedColor() e soglie in testa al QML
- README: requisiti, campi del control plane, tabella soglie, limiti del box
- avatar pixel-art 512x512 in assets/repository-avatar.png
2026-10-25 16:12:52 +01:00

90 lines
3.7 KiB
Markdown

# KDE Strata Dashboard Plasmoid
Plasmoide per **KDE Plasma 6** che mostra lo stato del servizio di inferenza **Strata**
(Qwen3.8-Flash-Next IQ2_XS servito su NVIDIA L40S) leggendo il control plane HTTP del
servizio. Non parla mai direttamente con il motore: lo `8082` di Strata ascolta solo su
`127.0.0.1` della macchina che lo ospita, quindi tutte le letture passano dal control plane.
## Cosa mostra
- **fase** del servizio con badge colorato: caricato / generazione / caricamento /
scaricato / fermo / non raggiungibile;
- **VRAM** usata e totale (barra indaco, informativa: il modello occupa quasi tutta la GPU);
- **utilizzo, temperatura e potenza** della GPU come **barre progressive** che si riempiono
in proporzione al valore e cambiano colore alle soglie;
- **velocità del motore**: `DEC` (generazione, tok/s) e `PRE` (prefill, tok/s), live durante
la generazione e riferite all'ultima richiesta quando il motore è fermo (badge
`LIVE` / `ULTIMA`);
- **modello**: alias, tipo di KV, contesto, concorrenza, disponibilità vision;
- **switch carica/scarica** nativo (`POST /load`, `POST /unload?wait=0`) con stato
`PENDING` che si chiude sulla fase osservata, non su un timer.
## Requisiti
- KDE Plasma 6;
- `curl` e `bash`;
- chiave del control plane in `~/.config/strata-control/control.key` (0600);
- control plane raggiungibile su `STRATACTL_API` (default `http://172.30.150.224:18090`).
## Installazione
```bash
kpackagetool6 -t Plasma/Applet -i .
```
Per aggiornare un'installazione esistente:
```bash
kpackagetool6 -t Plasma/Applet -u .
```
Aggiungi poi **Strata** al desktop o a un pannello dalle impostazioni dei widget Plasma.
## Backend
- `contents/scripts/status.sh`: `GET $STRATACTL_API/status` con header `X-API-Key`, stampa il
JSON su stdout (il widget lo legge con `P5Support.DataSource`, intervallo 4 s).
- `contents/scripts/action.sh load|unload`: `POST` in background con `setsid` ed exit
immediato, così il polling del widget non resta bloccato durante le operazioni lunghe.
Campi usati dal widget:
| Campo di `/status` | Uso |
| --- | --- |
| `phase`, `service.*` | badge di fase, tooltip |
| `model.live.tok_s`, `model.live.prefill_tok_s_mean` | barre DEC/PRE live |
| `model.last_timings.predicted_per_second`, `.prompt_per_second` | DEC/PRE dell'ultima richiesta |
| `model.alias`, `kv`, `ctx`, `concurrency`, `vision` | card servizio |
| `gpu.mem_used_mib/mem_total_mib/mem_pct`, `util_pct`, `temp_c`, `power_w`, `name` | card GPU |
Il control plane deve inoltrare `model.live` e `model.last_timings`: la versione del
2026-10-25 legge `live` da `/metrics` (cache 3 s) e passa `last_timings` da `/v1/status`.
Senza quei campi le barre DEC/PRE restano grigie.
## Soglie e scale
Tutte in testa a `contents/ui/main.qml`, facili da ritoccare:
| Grandezza | Fondo scala | Ambra | Rosso |
| --- | --- | --- | --- |
| Utilizzo GPU | 100 % | 60 % | 85 % |
| Temperatura GPU | 100 °C | 75 °C | 85 °C |
| Potenza GPU | 350 W (TDP L40S) | 70 % del budget | 90 % del budget |
| Decode (generazione) | 120 tok/s | < 40 tok/s (nominale) | < 20 tok/s |
| Prefill | 5000 tok/s | < 3000 tok/s (nominale) | < 1500 tok/s |
Per le due velocità la semantica è **inversa** rispetto ai carichi: alto è bene, quindi
verde sopra la nominale, ambra fra il 50 % e la nominale, rosso sotto. Grigio = valore non
disponibile (motore scarico, sensore assente).
## Note
- Avatar del repository in `assets/repository-avatar.png`, immagine pixel-art generata con
Antigravity (modello immagine Gemini).
- Il widget occupa un box desktop da 324x308 pixel logici: card e spaziature sono tarate su
quella altezza. Se il containment lo rimpicciolisce il footer `SYNC` viene tagliato.
## Licenza
MIT. Vedi [LICENSE](LICENSE).