Compaction plus efficace : resume borne, reduction garantie, jauge immediate

- Resume borne et dense : max_tokens 700, consigne 250 mots max, plafond dur a
  1500 caracteres, et surtout thinking DESACTIVE pour l'appel de resume
  (chat_template_kwargs enable_thinking:false) -> plus rapide, plus dense, plus
  de budget gaspille en <think> par un modele hybride.
- Garantie de reduction : la compaction n'est acceptee que si elle enleve >=20%
  du contexte estime, sinon refusee -> fini le "compactage a chaque message sans
  reduire". Queue plus agressive (tailFrac 0.35 -> 0.25) : le contexte retombe
  plus bas et met plus longtemps a re-declencher.
- Jauge de contexte : chute immediatement apres compaction (delta ctx_used emis
  aussitot) au lieu d'attendre la fin du tour.
This commit is contained in:
nathaninline committed 2026-07-23 17:07:55 +02:00
1 parent 7720877533
commit dcbfcb36f9
4 files changed
+36 -11

No files matched your search

+6 -1
View File
@@ -198,13 +198,16 @@ func (c *Conversation) generate(ctx context.Context, caps Caps, temperature floa
}
if compacted, changed := MaybeCompact(ctx, msgs, caps, ctxUsed); changed {
msgs = compacted
est := estimateTokens(compacted)
c.mu.Lock()
if c.epoch == epoch {
c.Messages = compacted
c.CtxUsed = est // le vrai compte reviendra avec les stats du tour
}
c.mu.Unlock()
c.appendDelta(epoch, map[string]any{"compacting": false})
c.appendDelta(epoch, map[string]any{"compacted": true})
c.appendDelta(epoch, map[string]any{"ctx_used": est}) // fait chuter la jauge tout de suite
} else if willCompact {
c.appendDelta(epoch, map[string]any{"compacting": false})
}
@@ -298,13 +301,15 @@ func (c *Conversation) CompactNow() error {
c.appendDelta(epoch, map[string]any{"compact_noop": true})
return
}
est := estimateTokens(compacted)
c.mu.Lock()
if c.epoch == epoch {
c.Messages = compacted
c.CtxUsed = estimateTokens(compacted) // feedback immédiat ; le vrai compte revient au prochain tour
c.CtxUsed = est // feedback immédiat ; le vrai compte revient au prochain tour
}
c.mu.Unlock()
c.appendDelta(epoch, map[string]any{"compacted": true})
c.appendDelta(epoch, map[string]any{"ctx_used": est})
c.persist()
}()
return nil