mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-19 21:18:20 +02:00
Intensité du raisonnement dans la barre de saisie, angles moins arrondis
Le niveau de raisonnement n'existait que dans l'éditeur de preset : le changer demandait d'ouvrir les réglages, éditer, enregistrer. Or ça se décide au moment d'écrire le message. - Nouvelle route /api/reasoning-effort (GET/POST), calquée sur /api/memory : elle écrit REASONING_EFFORT dans la config vivante, relue à chaque requête au moteur. Aucun redémarrage — la valeur voyage dans le corps de la requête. - Liste blanche côté serveur : cette clé finit dans une requête au moteur, on n'y laisse pas passer une chaîne arbitraire venue du navigateur. - La liste est grisée quand le raisonnement est coupé pour ce modèle, plutôt que masquée : le réglage reste trouvable, et l'infobulle dit où le rallumer. - L'éditeur de preset garde le même réglage comme DÉFAUT du modèle. Appliquer un preset réécrit toute la config, donc il reprend la main sur le choix fait à la volée — les deux sous-titres le disent, sinon la double présence intrigue. Angles : les rayons allaient de 5 à 26px selon les composants, ce qui donnait des cartes très rondes. Tout est ramené à 4px (cartes, boutons, modales) et 3px (petits éléments), y compris les formes multi-valeurs comme la barre de saisie (26px 26px 0 0 → 3px 3px 0 0). Les pastilles (999px) et les ronds (50%) sont laissés intacts : ce sont des interrupteurs et des avatars, pas des cartes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ebe04f9d61
commit
0a3af60715
9 files changed
+386
-216
No files matched your search
@@ -451,7 +451,7 @@ async function loadAll(){
|
||||
// MANQUANTE lève ici une ReferenceError qui est avalée en silence. Toute
|
||||
// suppression de module doit donc retirer son appel de cette ligne, et le test
|
||||
// navigateur écoute `pageerror` pour ne pas s'en apercevoir trop tard.
|
||||
await Promise.allSettled([loadStatus(),loadVram(),loadRam(),loadCfg(),loadPresets(),loadConversations(),loadIdentity(),loadAgent(),loadInternet(),loadMCP(),loadApiKey(),loadPrefs(),loadLlamacpp()]);
|
||||
await Promise.allSettled([loadStatus(),loadVram(),loadRam(),loadCfg(),loadPresets(),loadConversations(),loadIdentity(),loadAgent(),loadInternet(),loadMCP(),loadApiKey(),loadPrefs(),loadLlamacpp(),loadThinkEffort()]);
|
||||
releaseHeights(); // tout est en place : on rend la main et on mesure pour la prochaine fois
|
||||
}
|
||||
async function act(a){ toast(a+'…'); await jpost('/api/'+a); setTimeout(loadAll,1500); }
|
||||
@@ -755,9 +755,12 @@ function populateSettings(){
|
||||
eff.value = (cfgReadKey('REASONING_EFFORT')||'').toLowerCase();
|
||||
const effSub = document.getElementById('s-reasoning-effort-sub');
|
||||
if(effSub){
|
||||
// Deux emplacements, deux portées : ici c'est le défaut ENREGISTRÉ avec le
|
||||
// preset (donc rattaché au modèle) ; la liste de la barre de saisie le
|
||||
// dévie pour la suite de la session, jusqu'au prochain preset appliqué.
|
||||
effSub.textContent = eff.value
|
||||
? 'envoyée au gabarit du modèle — sans effet si son gabarit l\'ignore'
|
||||
: 'envoyée au gabarit du modèle — auto = ne rien imposer';
|
||||
? 'défaut de ce preset — sans effet si le gabarit du modèle l\'ignore'
|
||||
: 'défaut de ce preset — ajustable à la volée depuis la barre de saisie';
|
||||
}
|
||||
}
|
||||
chk('s-flash', eaHasFlag('--flash-attn') && !/^off$/i.test(eaGetValued('--flash-attn')));
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// ─── Intensité du raisonnement (barre de saisie) ─────────────────────────────
|
||||
// Le même réglage existe dans l'éditeur de preset, mais il y est figé avec le
|
||||
// preset : le changer demande d'ouvrir les réglages, éditer, enregistrer. Ici il
|
||||
// s'applique au message suivant, sans redémarrer le moteur — `reasoning_effort`
|
||||
// voyage dans le corps de la requête, pas dans la ligne de commande.
|
||||
//
|
||||
// La valeur part dans la config vivante. Appliquer un preset la réécrit : le
|
||||
// réglage reste donc attaché au modèle, cette liste ne fait que le dévier à la
|
||||
// volée.
|
||||
|
||||
const THINK_EFFORT_LABELS = {
|
||||
'': 'auto',
|
||||
none: 'aucune',
|
||||
low: 'basse',
|
||||
medium: 'moyenne',
|
||||
high: 'haute',
|
||||
};
|
||||
|
||||
async function loadThinkEffort(){
|
||||
try{ applyThinkEffort(await jget('/api/reasoning-effort')); }
|
||||
catch(e){ /* endpoint indisponible : la liste garde sa valeur par défaut */ }
|
||||
}
|
||||
|
||||
function applyThinkEffort(r){
|
||||
const sel = document.getElementById('think-effort');
|
||||
if(!sel || !r || !r.ok) return;
|
||||
sel.value = r.value || '';
|
||||
// Raisonnement coupé au niveau du preset : le niveau n'a plus de prise. On
|
||||
// grise plutôt que de masquer, pour que le réglage reste trouvable.
|
||||
sel.disabled = !r.on;
|
||||
sel.title = r.on
|
||||
? 'Intensité du raisonnement — envoyée au gabarit du modèle'
|
||||
: 'Raisonnement désactivé pour ce modèle (réglages → Raisonnement)';
|
||||
}
|
||||
|
||||
async function setThinkEffort(value){
|
||||
const r = await jpost('/api/reasoning-effort', {value});
|
||||
if(!r || !r.ok){ toast((r && r.error) || 'réglage refusé'); return; }
|
||||
applyThinkEffort(r);
|
||||
toast('raisonnement : '+(THINK_EFFORT_LABELS[r.value||''] || r.value));
|
||||
}
|
||||
Reference in new issue
Block a user