diff --git a/internal/loki/ui/index.html b/internal/loki/ui/index.html
index 1adec20..d5fad03 100644
--- a/internal/loki/ui/index.html
+++ b/internal/loki/ui/index.html
@@ -3915,8 +3915,17 @@ function askKeyOnce(){
}
async function jget(u){ const r=await jfetch(u); return r.json(); }
async function jpost(u,b){ const r=await jfetch(u,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(b||{})}); return r.json(); }
+let LAST_PRESET=null; // id du preset actif vu au dernier poll (détecte une bascule faite ailleurs)
async function loadStatus(){
const s=await jget('/api/status');
+ // Preset actif changé alors qu'on n'a rien touché ici : un AUTRE appareil a
+ // basculé de preset/modèle. On rafraîchit la liste (et le libellé du preset)
+ // pour rester en phase sans recharger l'app. Premier poll (LAST_PRESET null) :
+ // on note seulement la valeur, loadPresets a déjà tourné au démarrage.
+ if(typeof s.preset!=='undefined'){
+ if(LAST_PRESET!==null && s.preset!==LAST_PRESET && typeof loadPresets==='function') loadPresets();
+ LAST_PRESET=s.preset;
+ }
const el=document.getElementById('status-svc');
// Trois états : service coupé (err) · service actif mais modèle pas encore
// chargé (loading, llama-server renvoie 503) · modèle prêt (ok).
diff --git a/internal/loki/ui/src/js/05-status.js b/internal/loki/ui/src/js/05-status.js
index d1ef222..a992f20 100644
--- a/internal/loki/ui/src/js/05-status.js
+++ b/internal/loki/ui/src/js/05-status.js
@@ -1,5 +1,14 @@
+let LAST_PRESET=null; // id du preset actif vu au dernier poll (détecte une bascule faite ailleurs)
async function loadStatus(){
const s=await jget('/api/status');
+ // Preset actif changé alors qu'on n'a rien touché ici : un AUTRE appareil a
+ // basculé de preset/modèle. On rafraîchit la liste (et le libellé du preset)
+ // pour rester en phase sans recharger l'app. Premier poll (LAST_PRESET null) :
+ // on note seulement la valeur, loadPresets a déjà tourné au démarrage.
+ if(typeof s.preset!=='undefined'){
+ if(LAST_PRESET!==null && s.preset!==LAST_PRESET && typeof loadPresets==='function') loadPresets();
+ LAST_PRESET=s.preset;
+ }
const el=document.getElementById('status-svc');
// Trois états : service coupé (err) · service actif mais modèle pas encore
// chargé (loading, llama-server renvoie 503) · modèle prêt (ok).
diff --git a/internal/loki/web_api.go b/internal/loki/web_api.go
index 3aedd04..5ffcbf2 100644
--- a/internal/loki/web_api.go
+++ b/internal/loki/web_api.go
@@ -80,6 +80,9 @@ func handleStatus(w http.ResponseWriter, r *http.Request) {
"load_error": loadErr, // modèle qui ne charge pas (incompat moteur…) — vide sinon
"load_pct": loadPct, // % estimé du chargement en cours (-1 = non mesurable)
"external": external, // preset externe : le chat part vers une API distante
+ // id du preset actif : un autre appareil a pu basculer, l'UI se
+ // resynchronise sans reload (voir loadStatus). AJEAN 0.13.6.
+ "preset": activePresetID(),
})
}