From cfe70f2b70dcfcaa32cf94643e5e7b108882b515 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Sun, 30 Aug 2026 15:47:10 +0200 Subject: [PATCH] =?UTF-8?q?Presets=20:=20un=20switch=20Raisonnement=20lais?= =?UTF-8?q?s=C3=A9=20sur=20off=20ne=20l'=C3=A9crivait=20jamais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit onchange ne part que sur une interaction : créer un preset et laisser l'interrupteur décoché n'écrivait pas REASONING=, et la clé absente laisse le moteur suivre le gabarit du modèle — il raisonnait malgré le switch affiché sur off. À l'enregistrement, l'état de l'interrupteur est désormais matérialisé : off explicite, ou on si aucune valeur active plus précise (auto/deepseek) n'est déjà là. Repris de l'amont AJEAN v0.12.1 (issue #46). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Q7fwdmmVbvLHznF9v1npzN --- internal/loki/ui/index.html | 15 +++++++++++++++ internal/loki/ui/src/js/07-models.js | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/internal/loki/ui/index.html b/internal/loki/ui/index.html index c6e99da..8a26934 100644 --- a/internal/loki/ui/index.html +++ b/internal/loki/ui/index.html @@ -5279,6 +5279,21 @@ function closeModal(){ hideModal('modal'); document.getElementById('modal').clas async function saveItem(){ const K = KINDS[editingKind]; const name = document.getElementById('m-name').value.trim(); + // Interrupteur « Raisonnement » : on matérialise son état dans le preset AVANT + // de lire le contenu. onchange ne part que sur une interaction : un switch + // laissé sur off à la création n'écrivait donc jamais REASONING=, et la clé + // ABSENTE laisse le moteur raisonner malgré l'interrupteur affiché sur off + // (amont, issue #46). Décoché → REASONING=off explicite. Coché → on, sauf si + // une valeur active plus précise (auto/deepseek) est déjà là : on la garde. + if(editingKind==='preset'){ + const rsw = document.getElementById('s-reasoning'); + if(rsw){ + const cur = cfgReadKey('REASONING'); + const active = /^(on|1|true|auto|deepseek)$/i.test(cur); + if(!rsw.checked){ if(!/^off$/i.test(cur)) cfgWriteKey('REASONING', 'off'); } + else if(!active){ cfgWriteKey('REASONING', 'on'); } + } + } const content = document.getElementById('m-content').value; if(!name){ toast('nom requis'); return; } // Presets: keyed by id (filename); duplicate display names are allowed. diff --git a/internal/loki/ui/src/js/07-models.js b/internal/loki/ui/src/js/07-models.js index 06adb7a..983b530 100644 --- a/internal/loki/ui/src/js/07-models.js +++ b/internal/loki/ui/src/js/07-models.js @@ -827,6 +827,21 @@ function closeModal(){ hideModal('modal'); document.getElementById('modal').clas async function saveItem(){ const K = KINDS[editingKind]; const name = document.getElementById('m-name').value.trim(); + // Interrupteur « Raisonnement » : on matérialise son état dans le preset AVANT + // de lire le contenu. onchange ne part que sur une interaction : un switch + // laissé sur off à la création n'écrivait donc jamais REASONING=, et la clé + // ABSENTE laisse le moteur raisonner malgré l'interrupteur affiché sur off + // (amont, issue #46). Décoché → REASONING=off explicite. Coché → on, sauf si + // une valeur active plus précise (auto/deepseek) est déjà là : on la garde. + if(editingKind==='preset'){ + const rsw = document.getElementById('s-reasoning'); + if(rsw){ + const cur = cfgReadKey('REASONING'); + const active = /^(on|1|true|auto|deepseek)$/i.test(cur); + if(!rsw.checked){ if(!/^off$/i.test(cur)) cfgWriteKey('REASONING', 'off'); } + else if(!active){ cfgWriteKey('REASONING', 'on'); } + } + } const content = document.getElementById('m-content').value; if(!name){ toast('nom requis'); return; } // Presets: keyed by id (filename); duplicate display names are allowed.