mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 21:48:47 +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
@@ -703,6 +703,49 @@ func handleMCP(w http.ResponseWriter, r *http.Request) {
|
||||
sendJSON(w, 200, map[string]any{"ok": true, "servers": list})
|
||||
}
|
||||
|
||||
// handleReasoningEffort lit (GET) ou règle (POST) l'intensité du raisonnement.
|
||||
//
|
||||
// Même rôle que le sélecteur de l'éditeur de preset, mais applicable depuis la
|
||||
// barre de saisie sans rouvrir les réglages : la valeur part dans la config
|
||||
// vivante, elle est relue à chaque requête au moteur (llm_client.go). Aucun
|
||||
// redémarrage du moteur — `reasoning_effort` voyage dans le corps de la requête.
|
||||
//
|
||||
// Attention : appliquer un preset réécrit TOUTE la config, donc la valeur du
|
||||
// preset reprend la main à ce moment-là. C'est voulu — le réglage reste attaché
|
||||
// au modèle, la barre de saisie ne fait que le changer à la volée.
|
||||
func handleReasoningEffort(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == http.MethodPost {
|
||||
var req struct {
|
||||
Value string `json:"value"`
|
||||
}
|
||||
_ = json.NewDecoder(r.Body).Decode(&req)
|
||||
v := strings.ToLower(strings.TrimSpace(req.Value))
|
||||
// Liste blanche : cette clé finit dans une requête au moteur, on n'y
|
||||
// laisse pas passer une chaîne arbitraire venue du navigateur.
|
||||
ok := v == ""
|
||||
for _, allowed := range ReasoningEfforts {
|
||||
if v == allowed {
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
if !ok {
|
||||
sendJSON(w, 400, map[string]any{"ok": false, "error": "valeur inconnue : " + v})
|
||||
return
|
||||
}
|
||||
if err := SetConfigKey("REASONING_EFFORT", v); err != nil {
|
||||
sendJSON(w, 500, map[string]any{"ok": false, "error": err.Error()})
|
||||
return
|
||||
}
|
||||
}
|
||||
cfg := ReadConfig()
|
||||
sendJSON(w, 200, map[string]any{
|
||||
"ok": true,
|
||||
"value": reasoningEffortValue(cfg["REASONING_EFFORT"]),
|
||||
"on": reasoningActive(cfg["REASONING"]),
|
||||
"choices": ReasoningEfforts,
|
||||
})
|
||||
}
|
||||
|
||||
// handleMCPCatalog renvoie le catalogue embarqué de serveurs MCP connus.
|
||||
// Lecture seule : rien n'est installé ici, l'UI ne fait que préremplir la modale
|
||||
// d'ajout avec la commande de l'entrée choisie.
|
||||
|
||||
Reference in new issue
Block a user