mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 06:58:14 +02:00
Slots : corrections de relecture du lot 2 — une lecture d'un client ne prend plus le slot
Les proxys de Loki (/v1 et le relais) comptaient TOUTE requête d'un client comme une requête qui passe par le slot : un GET /v1/models ou une sonde /health (Open WebUI en envoie régulièrement) annulait le préchauffage en vol et retirait le tampon de la discussion. Avec PREWARM, COMPACT_CONTINUATION ou SLOT_PERSIST, la clé devenait inopérante dès qu'un client sondait le moteur. - engineProxyBegin : une lecture (GET, HEAD) reste comptée en vol, comme avant, mais n'avance pas le numéro des requêtes et garde le préchauffage ; une complétion de client garde le comportement d'avant. - README : avec PREWARM, SLOT_PERSIST ne garde presque rien (le préchauffage passe par le slot après chaque tour) — dit plutôt que découvert. Sans aucune de ces clés, rien ne change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a94c752529
commit
f0d5711a1a
5 files changed
+65
-4
No files matched your search
@@ -634,3 +634,47 @@ func TestBuildChatPayloadNoSampling(t *testing.T) {
|
||||
t.Fatalf("échantillonnage posé malgré noSampling : %v", p)
|
||||
}
|
||||
}
|
||||
|
||||
// Corrections de relecture du lot 2 : une lecture passée par les proxys de
|
||||
// Loki (GET /v1/models, /health d'un client qui sonde) ne calcule rien dans un
|
||||
// slot — elle ne retire pas le tampon de la discussion et n'annule pas un
|
||||
// préchauffage. Une complétion de client, si.
|
||||
func TestProxyReadKeepsSlotStamp(t *testing.T) {
|
||||
testHome(t)
|
||||
contReset(t)
|
||||
if err := SetConfigKey("MODEL", "/models/a.gguf"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
end, seq := engineRequestBegin(nil)
|
||||
end()
|
||||
engineMarkMain(seq, "c1")
|
||||
cancelled := false
|
||||
p := &prewarmRun{cancel: func() { cancelled = true }}
|
||||
endP, ok := prewarmBegin(p)
|
||||
if !ok {
|
||||
t.Fatal("préchauffage refusé, moteur libre")
|
||||
}
|
||||
defer endP()
|
||||
// Le préchauffage retire lui-même le tampon : reposé à la main, pour voir
|
||||
// ce que fait la lecture seule.
|
||||
engineGate.mu.Lock()
|
||||
engineGate.main.seq = engineGate.seq
|
||||
engineGate.mu.Unlock()
|
||||
for _, m := range []string{http.MethodGet, http.MethodHead} {
|
||||
r := httptest.NewRequest(m, "/v1/models", nil)
|
||||
engineProxyBegin(r, false)()
|
||||
}
|
||||
if cancelled {
|
||||
t.Error("une lecture a annulé le préchauffage")
|
||||
}
|
||||
if !engineSlotHolds("c1") {
|
||||
t.Error("une lecture a retiré le tampon de la discussion")
|
||||
}
|
||||
engineProxyBegin(httptest.NewRequest(http.MethodPost, "/v1/chat/completions", nil), false)()
|
||||
if !cancelled {
|
||||
t.Error("une complétion de client n'a pas annulé le préchauffage")
|
||||
}
|
||||
if engineSlotHolds("c1") {
|
||||
t.Error("tampon gardé après une complétion de client")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user