mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-24 15:38:12 +02:00
Cache : PREWARM prépare le prochain tour pendant que l'utilisateur lit, en opt-in
Une compaction, un dernier message rendu autrement au tour suivant ou une tâche planifiée qui a pris le slot laissent au message suivant un recalcul inévitable : des secondes sur un 27B, des dizaines sur un MoE aux experts en RAM, avant le premier mot. Nouvelle clé PREWARM (off par défaut) : dès que le moteur local est libre, Loki lui envoie la requête du prochain tour suivie d'un message utilisateur « . », max_tokens 1, sans flux. Le moteur calcule le préfixe et pose un point de reprise au début de ce message ; le vrai tour ne calcule plus que le sien. Sans la clé, aucune requête de plus (testé). - assemblage partagé, contenu vivant : turnViewDry (même code que turnView, sans rien toucher à la discussion, décision PROJ_SNAPSHOT via projSnapDecide), wireMessages, turnReasoning et buildChatPayload, extraits de runChat ; corps identique à l'octet près à celui d'avant (matrice d'options et de modes, testée contre une copie de l'ancien code) - jamais devant un vrai travail : toute requête de Loki l'annule au départ (compteur de llm_slots.go, sous son verrou), sauf un tour de chat dont les messages sérialisés, outils et arguments du gabarit prolongent exactement le préfixe préchauffé - moteur local, un seul slot (/props total_slots), pas pendant un tour, une tâche, un bench, un travail annexe ni une requête en vol ; un seul à la fois ; pas si le prochain tour compactera, ni à moins de 10 min de minuit - requête brute : ni compaction, ni relance, ni effort appris, ni CtxUsed, ni stats ; erreurs lâchées (une ligne de journal par statut) ; rien persisté - déclencheurs : fin de tour sans file d'attente, fin de tâche (projet forcé levé, slot effacé) ; full = aussi changement de discussion après 3 s - capacités du dernier tour gardées en mémoire par discussion ; mode Code = rôle d'un message ordinaire, une demande de plan diverge et annule - télémétrie kind=prewarm ; la vérification du cache RAM après une tâche se fait sur lui Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4932999d5c
commit
630e84cc08
14 files changed
+1186
-86
No files matched your search
@@ -82,9 +82,20 @@ var sideJobs atomic.Int32
|
||||
|
||||
// engineRequestStart marque une requête vers le moteur local ; la fonction
|
||||
// rendue la clôt (une seule fois, quel que soit le nombre d'appels), une fois
|
||||
// le corps de la réponse lu.
|
||||
func engineRequestStart() func() {
|
||||
// le corps de la réponse lu. Un préchauffage en vol (PREWARM, chat_prewarm.go)
|
||||
// est annulé d'abord : il ne passe jamais devant un vrai travail.
|
||||
func engineRequestStart() func() { return engineRequestStartKeep(nil) }
|
||||
|
||||
// engineRequestStartKeep : engineRequestStart, sauf pour le préchauffage en vol
|
||||
// que keep reconnaît comme le début exact de cette requête — il continue, et la
|
||||
// requête le suit dans le même slot sur le préfixe qu'il vient de calculer.
|
||||
// Décidé sous le verrou du compteur : aucun préchauffage ne peut démarrer entre
|
||||
// la décision et le compte.
|
||||
func engineRequestStartKeep(keep func(*prewarmRun) bool) func() {
|
||||
engineGate.mu.Lock()
|
||||
if p := prewarmCur; p != nil && (keep == nil || !keep(p)) {
|
||||
prewarmDropLocked(p)
|
||||
}
|
||||
engineGate.inflight++
|
||||
engineGate.mu.Unlock()
|
||||
var once sync.Once
|
||||
|
||||
Reference in new issue
Block a user