mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 15:08:16 +02:00
Lot 22 : backends llama.cpp et job des moteurs tenus par la façade (LOKI_BACKENDS=rust)
La façade (rust/loki-rs/src/backends) sert le statut du moteur llama.cpp (dépôt git, binaire, moteur de l'image, précompilé, moteur téléchargé, plan de build et conseil), la vérification git, la dernière release et l'installation des binaires précompilés (extraction avec liens, VERSION, ménage), la bascule fast/opt, les backends custom et leur désinstallation, et les GPU vus par un moteur (caches mémoire et disque). Elle détient LE job des moteurs (state/build_job + loki-build.log, repris au démarrage). Les jobs que le Go fait encore tourner (compilation depuis les sources, moteur de l'image, Strata) lui rapportent chaque étape par /internal/facade/v1/build-job/* ; le Go garde le garde de l'optimiseur et ne restaure plus de job quand la façade tient le lot. Correction du Go : prebuiltVersionFormat lisait le format comme 3e champ du marqueur VERSION ; hors CUDA Windows (« b300 fmt2 ») il n'y en a que deux, et chaque vérification retéléchargeait la release au lieu de dire « déjà à jour ». Le port suit. Parité : parity_backends_test.go (Linux) → tests/parity_backends, rejoué par tests/backends.rs (fausses machines dans le PATH, faux GitHub, dépôt git reproductible) ; TestFacadeBackends pour les étapes transmises. Mutations : 55 tuées sur 57, deux inobservables sous Linux (cudart Windows, garde d'un avertissement). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
26 files changed
+10896
-30
No files matched your search
@@ -50,6 +50,10 @@ const lcMaxLines = 4000
|
||||
// compteur de fichiers compilés à partir du contenu (mêmes heuristiques que le
|
||||
// spinner du CLI). Appelée par le sink de build (emitBuildLine).
|
||||
func lcAppend(line string) {
|
||||
if facadeBackends() {
|
||||
facadeJobNote("line", map[string]any{"line": line})
|
||||
return
|
||||
}
|
||||
lcMu.Lock()
|
||||
defer lcMu.Unlock()
|
||||
if lcCur == nil {
|
||||
@@ -74,6 +78,10 @@ func lcAppend(line string) {
|
||||
// lcPhase pose une phase explicite (étapes hors build : clone, fetch, service…)
|
||||
// et la trace aussi dans le log.
|
||||
func lcPhase(phase string) {
|
||||
if facadeBackends() {
|
||||
facadeJobNote("phase", map[string]any{"phase": phase})
|
||||
return
|
||||
}
|
||||
lcMu.Lock()
|
||||
if lcCur != nil {
|
||||
lcCur.Phase = phase
|
||||
@@ -91,6 +99,9 @@ func startLcJob(action string, run func()) error {
|
||||
if err := tuneGuard(); err != nil {
|
||||
return err
|
||||
}
|
||||
if facadeBackends() { // le job est tenu par la façade (facade_backends.go)
|
||||
return facadeJobStart(action, run)
|
||||
}
|
||||
lcMu.Lock()
|
||||
defer lcMu.Unlock()
|
||||
if lcCur != nil && lcCur.Running {
|
||||
@@ -115,6 +126,10 @@ func startLcJob(action string, run func()) error {
|
||||
}
|
||||
|
||||
func lcFail(err error) {
|
||||
if facadeBackends() {
|
||||
facadeJobNote("fail", map[string]any{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
lcMu.Lock()
|
||||
if lcCur != nil {
|
||||
lcCur.Err = err.Error()
|
||||
@@ -127,6 +142,10 @@ func lcFail(err error) {
|
||||
}
|
||||
|
||||
func lcDone(msg string) {
|
||||
if facadeBackends() {
|
||||
facadeJobNote("done", map[string]any{"msg": msg})
|
||||
return
|
||||
}
|
||||
lcMu.Lock()
|
||||
if lcCur != nil {
|
||||
lcCur.Phase = msg
|
||||
@@ -476,6 +495,9 @@ func handleLlamacppJob(w http.ResponseWriter, r *http.Request) {
|
||||
// lcJobSnapshot construit la vue JSON du job courant. withLines=false renvoie
|
||||
// juste l'entête (imbriquée dans /api/llamacpp).
|
||||
func lcJobSnapshot(from int, withLines bool) map[string]any {
|
||||
if facadeBackends() {
|
||||
return facadeJobSnapshot(from, withLines)
|
||||
}
|
||||
lcMu.Lock()
|
||||
defer lcMu.Unlock()
|
||||
if lcCur == nil {
|
||||
@@ -576,9 +598,7 @@ func lcRunUpdate(clean bool) {
|
||||
}
|
||||
|
||||
oldCommit := gitOutput(repo, "rev-parse", "--short", "HEAD")
|
||||
lcMu.Lock()
|
||||
lcCur.OldCommit = oldCommit
|
||||
lcMu.Unlock()
|
||||
lcSetCommit("old", oldCommit)
|
||||
|
||||
branch := gitOutput(repo, "rev-parse", "--abbrev-ref", "HEAD")
|
||||
if branch == "" || branch == "HEAD" {
|
||||
@@ -604,9 +624,7 @@ func lcRunUpdate(clean bool) {
|
||||
}
|
||||
}
|
||||
newCommit := gitOutput(repo, "rev-parse", "--short", "HEAD")
|
||||
lcMu.Lock()
|
||||
lcCur.NewCommit = newCommit
|
||||
lcMu.Unlock()
|
||||
lcSetCommit("new", newCommit)
|
||||
|
||||
// Le binaire en cours d'exécution ne peut pas être réécrit → stop du service
|
||||
// pendant le build, redémarrage après (même en échec).
|
||||
|
||||
Reference in new issue
Block a user