mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 22:18:13 +02:00
compaction: decider sur le VRAI decompte de tokens (ctx_used du client) au lieu de l'estimation
L'heuristique ~4 char/token sous-estimait le contexte (elle ne voit ni le prompt systeme injecte ni le gabarit de chat), donc le seuil 75% n'etait jamais franchi. Le client envoie desormais ctx_used (prompt_tokens_total deja affiche) ; repli sur l'estimation quand inconnu (terminal).
This commit is contained in:
1 parent
e6c0bbe3b7
commit
2daea32ade
4 files changed
+20
-5
No files matched your search
@@ -783,6 +783,10 @@ type chatReq struct {
|
||||
Skills *bool `json:"skills"`
|
||||
// Override par requête de l'accès internet (outils web). nil = config machine.
|
||||
Internet *bool `json:"internet"`
|
||||
// Taille réelle du contexte au tour précédent (usage.prompt_tokens + tokens
|
||||
// générés), rapportée par le client qui l'affiche déjà. Sert à décider du
|
||||
// compactage sur le VRAI décompte plutôt qu'une estimation. 0 = inconnu.
|
||||
CtxUsed int `json:"ctx_used"`
|
||||
}
|
||||
|
||||
// sseHeartbeat garde la réponse SSE active en écrivant un commentaire (`: ping`,
|
||||
@@ -846,7 +850,7 @@ func runChatStream(ctx context.Context, body chatReq, emit func(map[string]any)
|
||||
// le résume AVANT le tour et on renvoie l'historique compacté au client pour
|
||||
// qu'il remplace le sien — évite de re-renvoyer tout à chaque tour.
|
||||
hist := body.Messages
|
||||
if compacted, changed := MaybeCompact(ctx, hist, caps); changed {
|
||||
if compacted, changed := MaybeCompact(ctx, hist, caps, body.CtxUsed); changed {
|
||||
hist = compacted
|
||||
emit(map[string]any{"history_replace": hist})
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user