mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
Chat : compactage sans redite, file multi-appareils, bascule par identifiant
Repris d'AJEAN 0.17.4. - Compactage : la dernière demande du torse n'est plus réinjectée quand la queue contient déjà un message utilisateur (le modèle répondait une seconde fois à une vieille question), ni quand le résumé a échoué (elle est déjà dans le torse dégraissé et réapparaissait après ses propres résultats d'outils). - Le texte écrit avant un appel d'outil n'est plus rangé deux fois dans l'historique du modèle (message tool_calls ET réponse finale) : du contexte gaspillé à chaque tour d'outil. - Deux appareils qui envoient en même temps : le second message part en file au lieu d'un 409. Une tâche planifiée garde le refus. - Un raisonnement qui reprend après du texte de réponse ouvre une nouvelle bulle sous la réponse au lieu de remplir l'ancienne, repliée au-dessus. - Bascule de preset par identifiant : le numéro seul visait un autre preset quand la liste avait bougé sur un autre appareil. Le numéro reste accepté. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
7f8c5d360f
commit
199d7f1e99
10 files changed
+159
-14
No files matched your search
@@ -1219,8 +1219,14 @@ func handleModelUse(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func handleSwitch(w http.ResponseWriter, r *http.Request) {
|
||||
// id = identité stable du preset (nom de fichier). Le numéro seul est
|
||||
// dangereux : si la liste a changé depuis l'affichage (réordonnée, preset
|
||||
// ajouté ou supprimé depuis un autre appareil), la même position désigne un
|
||||
// AUTRE preset, et on chargeait le mauvais (AJEAN 0.17.4). n reste accepté
|
||||
// pour les anciens clients.
|
||||
var req struct {
|
||||
N int `json:"n"`
|
||||
N int `json:"n"`
|
||||
ID string `json:"id"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
sendJSON(w, 400, map[string]any{"ok": false, "error": err.Error()})
|
||||
@@ -1231,11 +1237,26 @@ func handleSwitch(w http.ResponseWriter, r *http.Request) {
|
||||
sendJSON(w, 500, map[string]any{"ok": false, "error": err.Error()})
|
||||
return
|
||||
}
|
||||
if req.N < 1 || req.N > len(list) {
|
||||
sendJSON(w, 400, map[string]any{"ok": false, "error": "index hors limites"})
|
||||
return
|
||||
var target Preset
|
||||
if id := strings.TrimSpace(req.ID); id != "" {
|
||||
found := false
|
||||
for _, p := range list {
|
||||
if p.ID == id {
|
||||
target, found = p, true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
sendJSON(w, 404, map[string]any{"ok": false, "error": "preset introuvable (supprimé ou renommé ?)"})
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if req.N < 1 || req.N > len(list) {
|
||||
sendJSON(w, 400, map[string]any{"ok": false, "error": "index hors limites"})
|
||||
return
|
||||
}
|
||||
target = list[req.N-1]
|
||||
}
|
||||
target := list[req.N-1]
|
||||
// On écrit config.env TOUT DE SUITE (c'est lui qui décide du preset actif),
|
||||
// puis on répond — le redémarrage du service part en arrière-plan. Passer par
|
||||
// SwitchToPreset bloquait la réponse pendant tout l'arrêt de llama-server plus
|
||||
|
||||
Reference in new issue
Block a user