diff --git a/frontend/src/panels/SettingsView.tsx b/frontend/src/panels/SettingsView.tsx index 5967968..0382375 100644 --- a/frontend/src/panels/SettingsView.tsx +++ b/frontend/src/panels/SettingsView.tsx @@ -299,6 +299,7 @@ export function SettingsView() { GÉNÉRATION + {/* Les deux seuls réglages qui comptent au quotidien. */} v.toFixed(2)} onChange={(v) => set("temperature", v)} /> + `${Math.round(v / 1024)}K`} + onChange={(v) => set("num_ctx", Math.round(v))} + /> + + set("max_tokens", Math.round(v))} /> `${Math.round(v / 1024)}K`} - onChange={(v) => set("num_ctx", Math.round(v))} - /> - (v < 0 ? "auto" : String(Math.round(v)))} onChange={(v) => set("num_gpu", Math.round(v))} /> +
+ Laisse « auto » : forcer un nombre de couches qui ne tient + pas en VRAM bascule toute l'inférence sur le CPU. +
set("num_batch", Math.round(v))} last /> +
+ La précision KV (f16/q8_0) est un + réglage global du serveur Ollama et nécessite son redémarrage. +
+
+
Mode réflexion
@@ -373,10 +386,6 @@ export function SettingsView() {
set("think", !draft.think)} />
-
- La précision KV (f16/q8_0) est un - réglage global du serveur Ollama et nécessite son redémarrage. -
@@ -427,34 +436,42 @@ export function SettingsView() {
INTELLIGENCE
- {[ + {/* Au quotidien : comment il code, et s'il planifie. */} + {([ + ["ponytail", "Code minimal", + "Va au plus simple qui marche, sans dépendance ni extra"] as const, ["plan_mode", "Plan-puis-exécute", - "Décompose les demandes complexes en étapes"] as const, - ["self_review", "Auto-critique (Qualité +)", - "Relit et révise la réponse avant de la donner"] as const, - ["rag_enabled", "Mémoire entre sessions (RAG)", - "Rappelle d'AUTRES discussions dans celle-ci. Désactivé par défaut : sinon une ancienne demande sans rapport ressurgit. Chaque discussion garde toujours sa propre mémoire."] as const, - ["skills_enabled", "Skills automatiques", - "Méthodes expertes injectées selon la tâche (débogage, web, refactor…)"] as const, - ["ponytail", "Ponytail (code minimal)", - "Anti sur-ingénierie : code le plus simple qui marche, sans dépendance ni fonctionnalité superflue (github.com/DietrichGebert/ponytail)"] as const, - ].map(([key, label, desc], i) => ( -
( + 0 ? "border-t-2 border-line-soft" : "" - }`} - > - - {label} - {desc} - - set(key, !draft[key])} + /> + ))} + + + {([ + ["skills_enabled", "Skills automatiques", + "Méthodes expertes selon la tâche (débogage, web…)"] as const, + ["self_review", "Auto-critique", + "Relit et révise la réponse — plus lent"] as const, + ["rag_enabled", "Mémoire entre sessions", + "Rappelle d'AUTRES discussions ici. Chaque discussion garde toujours sa propre mémoire."] as const, + ]).map(([key, label, desc], i) => ( + set(key, !draft[key])} /> -
- ))} + ))} +
@@ -881,6 +898,58 @@ function Toggle({ on, onClick }: { on: boolean; onClick: () => void }) { ); } +/** Repli « Avancé » : sort les réglages rares du chemin principal. + * + *
natif : pas d'état à gérer, repliement mémorisé par le navigateur + * le temps de la page, et accessible au clavier sans code supplémentaire. + */ +function Advanced({ + children, + label = "Réglages avancés", +}: { + children: React.ReactNode; + label?: string; +}) { + return ( +
+ + ▸ + {label} + +
{children}
+
+ ); +} + +/** Ligne interrupteur : libellé + description + bascule. */ +function ToggleRow({ + label, + desc, + on, + onClick, + first, +}: { + label: string; + desc: string; + on: boolean; + onClick: () => void; + first?: boolean; +}) { + return ( +
+ + {label} + {desc} + + +
+ ); +} + function Slider({ label, value,