Presets : un switch Raisonnement laissé sur off ne l'écrivait jamais

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7fwdmmVbvLHznF9v1npzN
This commit is contained in:
MichaelandClaude Fable 5 committed 2026-08-30 15:47:10 +02:00
1 parent b4f4135101
commit cfe70f2b70
2 files changed
+30

No files matched your search

+15
View File
@@ -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.
+15
View File
@@ -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.