mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 06:58:14 +02:00
Moteur : points de reprise des hybrides protégés sur les moteurs anciens, et la version précédente gardée après une mise à jour
Avant b10864 (PR #28302), llama-server effaçait un point de reprise trop proche du précédent même quand la liste avait de la place : sur un hybride (Qwen3.5/3.6, Qwen3-Next), une reprise retombait jusqu'à ~8 k jetons en arrière, recalculés à chaque tour d'outil. Un point de reprise est une copie exacte de l'état récurrent : rien de ce que voit le modèle ne change, seul le temps de prefill et la RAM hôte. Aucune mise à jour du moteur ici. - Build cru seulement pour un moteur officiel (image, téléchargé, précompilé) et au-dessus de 5000 : un compilé en clone superficiel (build 1) ou un fork n'a ni avis ni drapeau. --version gardé par binaire, taille et date. - Avis « moteur trop ancien » dans le panneau Moteur et au lancement d'un hybride. - Opt-in CTX_CHECKPOINTS (--ctx-checkpoints) et CKPT_MIN_STEP (--checkpoint-min-step, > 0 : 0 laisserait l'éviction FIFO jeter le point du début de la conversation). Gardes séparées : -ctxcp/--ctx-checkpoints/ --swa-checkpoints et -cms/--checkpoint-min-step, plus LLAMA_ARG_*. - D'office : --checkpoint-min-step 2048 seulement sur un hybride lu dans le GGUF, build officiel < 10864, aide qui connaît le drapeau, aucun réglage de l'utilisateur, points de reprise actifs, modèle sous 70 % de la RAM et 32 points sous le quart de la RAM libre. Sinon l'avis seul ; sur un MoE mmappé trop gros, conseil CTX_CHECKPOINTS=8 à 16. - REASONING_PRESERVE=on|off → --reasoning-preserve / --no-reasoning-preserve, seulement si la clé est posée et que l'aide le connaît. Rien par défaut : Loki ne renvoie pas la réflexion passée, et aucun choix global ne garde le rendu de tous les gabarits (Qwen3.6 contre Qwen3.8). - Mise à jour du moteur : la version téléchargée qui tournait avant n'est plus supprimée ; le panneau propose d'y revenir sans réseau. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c72467ce4c
commit
dd27b81af0
8 files changed
+604
-13
No files matched your search
+21
-13
@@ -33,16 +33,7 @@ func handleEngineStatus(w http.ResponseWriter, r *http.Request) {
|
||||
bin := currentEngineBin()
|
||||
build, commit := engineBuildOf(bin)
|
||||
imageBin := providedEngineBin()
|
||||
|
||||
source := "custom"
|
||||
switch {
|
||||
case imageBin != "" && samePath(bin, imageBin):
|
||||
source = "image"
|
||||
case engineOwns(bin):
|
||||
source = "downloaded"
|
||||
case prebuiltOwns(bin):
|
||||
source = "prebuilt"
|
||||
}
|
||||
source := engineSource(bin)
|
||||
|
||||
var installed []map[string]any
|
||||
for _, tag := range engineInstalled() {
|
||||
@@ -67,6 +58,9 @@ func handleEngineStatus(w http.ResponseWriter, r *http.Request) {
|
||||
"dir": engineDir(),
|
||||
"installed": installed,
|
||||
"job": lcJobSnapshot(0, false),
|
||||
// Avis « moteur trop ancien » : seulement pour un build digne de foi
|
||||
// (voir engineBuildTrust), jamais pour un compilé ou un fork.
|
||||
"notice": engineBuildNotice(engineBuildTrust(source, build)),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -166,12 +160,26 @@ func engineRunUpdate(tag string) {
|
||||
lcFail(err)
|
||||
return
|
||||
}
|
||||
// On garde la version qu'on vient de poser ; les précédentes ne servent plus
|
||||
// (le retour arrière se fait sur le moteur de l'image, qui, lui, est intact).
|
||||
enginePrune(map[string]bool{filepath.Base(filepath.Dir(bin)): true}, lcAppend)
|
||||
enginePrune(engineKeepAfterUpdate(bin, ancien, lcAppend), lcAppend)
|
||||
lcDone("moteur mis à jour (" + tag + ")")
|
||||
}
|
||||
|
||||
// engineKeepAfterUpdate : les versions téléchargées que le ménage épargne après
|
||||
// une bascule. La nouvelle, et celle qui tournait juste avant si c'en était une
|
||||
// : le moteur de l'image n'est pas forcément l'ancien build (il dépend de
|
||||
// LLAMACPP_IMAGE), et revenir sur la version d'hier ne doit demander ni réseau
|
||||
// ni que le tag soit encore publié. Les plus anciennes partent (~450 Mo chacune).
|
||||
func engineKeepAfterUpdate(bin, ancien string, logf func(string)) map[string]bool {
|
||||
keep := map[string]bool{filepath.Base(filepath.Dir(bin)): true}
|
||||
if prev := engineTagOf(ancien); prev != "" && !keep[prev] {
|
||||
keep[prev] = true
|
||||
if logf != nil {
|
||||
logf("version précédente gardée pour revenir en arrière : " + prev)
|
||||
}
|
||||
}
|
||||
return keep
|
||||
}
|
||||
|
||||
// engineSwitchTo pointe BIN sur un moteur et redémarre le service s'il tournait.
|
||||
func engineSwitchTo(bin string) error {
|
||||
wasUp := serviceIsActive()
|
||||
|
||||
Reference in new issue
Block a user