Presets : une bascule faite sur un appareil se voit sur les autres

Repris d'AJEAN 0.13.6. Changer de preset sur le téléphone laissait l'onglet
du PC afficher l'ancien, sélection de la liste comprise, jusqu'à un
rechargement à la main. /api/status (sondé toutes les 5 s) expose l'id du
preset actif ; loadStatus rappelle loadPresets quand il change sans qu'on
y ait touché ici.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-02 23:05:34 +02:00
1 parent 2c36fa6d2c
commit 38802d9e21
3 files changed
+21

No files matched your search

+9
View File
@@ -3915,8 +3915,17 @@ function askKeyOnce(){
} }
async function jget(u){ const r=await jfetch(u); return r.json(); } 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(); } 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(){ async function loadStatus(){
const s=await jget('/api/status'); 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'); const el=document.getElementById('status-svc');
// Trois états : service coupé (err) · service actif mais modèle pas encore // Trois états : service coupé (err) · service actif mais modèle pas encore
// chargé (loading, llama-server renvoie 503) · modèle prêt (ok). // chargé (loading, llama-server renvoie 503) · modèle prêt (ok).
+9
View File
@@ -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(){ async function loadStatus(){
const s=await jget('/api/status'); 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'); const el=document.getElementById('status-svc');
// Trois états : service coupé (err) · service actif mais modèle pas encore // Trois états : service coupé (err) · service actif mais modèle pas encore
// chargé (loading, llama-server renvoie 503) · modèle prêt (ok). // chargé (loading, llama-server renvoie 503) · modèle prêt (ok).
+3
View File
@@ -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_error": loadErr, // modèle qui ne charge pas (incompat moteur…) — vide sinon
"load_pct": loadPct, // % estimé du chargement en cours (-1 = non mesurable) "load_pct": loadPct, // % estimé du chargement en cours (-1 = non mesurable)
"external": external, // preset externe : le chat part vers une API distante "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(),
}) })
} }