Files
Loki/internal/loki/web_switch_test.go
T
MichaelandClaude Opus 5.5 199d7f1e99 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>
2026-10-02 23:21:18 +02:00

36 lines
1.2 KiB
Go

package loki
import (
"net/http/httptest"
"strings"
"testing"
)
// La bascule vise le preset par son id, pas par sa position : une liste
// réordonnée sur un autre appareil faisait charger un AUTRE preset. Presets
// externes ici : la bascule n'a alors aucun moteur local à redémarrer.
func TestBasculeParIdentifiant(t *testing.T) {
testHome(t)
if _, err := SavePreset("", "Alpha", externalPresetContent("https://a.example/v1", "modele-a", "", "", false)); err != nil {
t.Fatal(err)
}
idB, err := SavePreset("", "Beta", externalPresetContent("https://b.example/v1", "modele-b", "", "", false))
if err != nil {
t.Fatal(err)
}
post := func(body string) int {
w := httptest.NewRecorder()
handleSwitch(w, httptest.NewRequest("POST", "/api/switch", strings.NewReader(body)))
return w.Code
}
if code := post(`{"id":"` + idB + `","n":1}`); code != 200 {
t.Fatalf("bascule par id : code %d", code)
}
if got := ReadConfig()[extKeyModel]; got != "modele-b" {
t.Fatalf("preset chargé = %q, attendu celui de l'id (modele-b) et non la position 1", got)
}
if code := post(`{"id":"inexistant"}`); code != 404 {
t.Fatalf("id inconnu : code %d, attendu 404", code)
}
}