mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 14:08:11 +02:00
Compaction : une compaction en cours de tour ne fait plus disparaître le rappel des pages lues
Après une compaction en cours de tour, generate rangeait la vue publiée en retirant TOUS les messages système de tête. Ceux que la vue d'envoi avait posés (préambule, prompt du preset, contexte du projet ou bloc figé) n'ont rien à faire dans l'historique ; mais le rappel « [MEMORY PAGES REMINDER] », posé par une compaction de début de tour, en fait partie — il partait avec eux, et le modèle perdait la liste des pages à relire. - historyFromView : un système de tête n'est gardé que s'il figurait en tête de l'historique d'où la vue est partie (la compaction garde la tête telle quelle) ; un système fusionné par InjectSkills devant le préambule est rendu tel qu'il était. - Même correction pour la reprise du builder (mode Code) et le terminal, où le /sys de l'utilisateur disparaissait de la même façon. - Test : la compaction réactive en plein tour garde le rappel, avec et sans PROJ_SNAPSHOT, et ne range aucun système injecté ; échoue sur l'ancien code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c888afb493
commit
432308c5b2
4 files changed
+133
-23
No files matched your search
@@ -76,19 +76,17 @@ func cmdChat(args []string) error {
|
||||
fmt.Println(dim("[contexte compacté pour tenir dans la fenêtre]"))
|
||||
}
|
||||
sent, tools := prepareTurn(msgs, caps)
|
||||
hist := msgs
|
||||
extra, err := runChatTools(context.Background(), sent, tools, 0.7, caps, func(ev StreamEvent) bool {
|
||||
switch {
|
||||
case ev.Err != nil:
|
||||
fmt.Printf("\n%s\n", red("[erreur] "+ev.Err.Error()))
|
||||
case ev.NewHistory != nil:
|
||||
// Compaction survenue pendant le tour : elle REMPLACE l'historique (elle
|
||||
// contient déjà le tour en cours), préfixe système injecté retiré. Sans
|
||||
// ça le terminal repartirait du fil complet au tour suivant.
|
||||
base := ev.NewHistory
|
||||
for len(base) > 0 && base[0].Role == "system" {
|
||||
base = base[1:]
|
||||
}
|
||||
msgs = append([]Message(nil), base...)
|
||||
// contient déjà le tour en cours), préfixe système injecté retiré —
|
||||
// le /sys de l'utilisateur, lui, reste (historyFromView). Sans ça le
|
||||
// terminal repartirait du fil complet au tour suivant.
|
||||
msgs = historyFromView(ev.NewHistory, hist)
|
||||
fmt.Println(dim("\n[contexte compacté pour tenir dans la fenêtre]"))
|
||||
case ev.Stats != nil:
|
||||
stats = ev.Stats
|
||||
|
||||
Reference in new issue
Block a user