mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 06:58:14 +02:00
v0.7.9 : les moteurs llama.cpp arretent de jouer a cache-cache
- moteur precompile : la version installee est celle qui tourne (on elisait le dossier le plus ancien), et les anciennes extractions sont purgees - presets : le moteur precompile reste reconnu apres une mise a jour, et un BIN pointant une release disparue suit la version installee au lieu d'echouer - build CUDA : le toolkit est cherche avant le nvcc du PATH, sa racine est passee a CMake (fin du "CUDA Toolkit not found" avec CUDA installe) - job d'installation : etat persiste sur disque, une operation interrompue par un redemarrage du service est annoncee, pastille de rappel sur mobile - editeur de modele : section Cartes graphiques (--device / --tensor-split), la liste vient du moteur du preset car les identifiants dependent du backend - reglages : plus de menu replie, interrupteurs regroupes, decodage speculatif - CUDA_VISIBLE_DEVICES et WEB_ENGINE survivent au changement de preset, sauf si le preset les definit lui-meme
This commit is contained in:
1 parent
726f065d25
commit
e57fc0966e
24 files changed
+1754
-94
No files matched your search
@@ -5,6 +5,8 @@ import (
|
||||
"compress/gzip"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -60,3 +62,96 @@ func TestExtractArchiveSymlink(t *testing.T) {
|
||||
t.Fatalf("contenu résolu = %q, attendu %q", got, body)
|
||||
}
|
||||
}
|
||||
|
||||
// fakePrebuilt monte un dossier prebuilt contenant plusieurs releases extraites,
|
||||
// comme sur une machine mise à jour plusieurs fois.
|
||||
func fakePrebuilt(t *testing.T, version string, tags ...string) string {
|
||||
t.Helper()
|
||||
home := t.TempDir()
|
||||
t.Setenv("AJEAN_HOME", home)
|
||||
dir := filepath.Join(home, "backends", "llama.cpp-prebuilt")
|
||||
name := "llama-server"
|
||||
if runtime.GOOS == "windows" {
|
||||
name += ".exe"
|
||||
}
|
||||
for _, tag := range tags {
|
||||
d := filepath.Join(dir, "llama-"+tag)
|
||||
if err := os.MkdirAll(d, 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(d, name), []byte("bin"), 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if version != "" {
|
||||
if err := os.WriteFile(filepath.Join(dir, "VERSION"),
|
||||
[]byte(version+" - "+prebuiltFormat+"\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
return dir
|
||||
}
|
||||
|
||||
// La version notée dans VERSION gagne, même si une extraction plus ancienne
|
||||
// vient avant dans l'ordre alphabétique — le bug : on servait b10088, une
|
||||
// installation incomplète, alors que b10280 était la version installée.
|
||||
func TestPrebuiltServerBinSuitLeMarqueurVersion(t *testing.T) {
|
||||
fakePrebuilt(t, "b10280", "b10088", "b10159", "b10280")
|
||||
got := filepath.ToSlash(prebuiltServerBin())
|
||||
if !strings.Contains(got, "/llama-b10280/") {
|
||||
t.Errorf("binaire élu = %s, attendu sous /llama-b10280/", got)
|
||||
}
|
||||
}
|
||||
|
||||
// Sans marqueur exploitable, on prend la release la plus récente.
|
||||
func TestPrebuiltServerBinSansVersionPrendLePlusRecent(t *testing.T) {
|
||||
fakePrebuilt(t, "", "b10088", "b10280")
|
||||
if got := filepath.ToSlash(prebuiltServerBin()); !strings.Contains(got, "/llama-b10280/") {
|
||||
t.Errorf("binaire élu = %s, attendu la release la plus récente", got)
|
||||
}
|
||||
}
|
||||
|
||||
// Un BIN de preset écrit avant une mise à jour pointe une release disparue : il
|
||||
// doit suivre le moteur courant au lieu d'échouer au lancement (exit 127).
|
||||
func TestPrebuiltResolveBinSuitLaMiseAJour(t *testing.T) {
|
||||
dir := fakePrebuilt(t, "b10280", "b10280")
|
||||
stale := filepath.Join(dir, "llama-b10088", "llama-server")
|
||||
if got := filepath.ToSlash(prebuiltResolveBin(stale)); !strings.Contains(got, "/llama-b10280/") {
|
||||
t.Errorf("BIN périmé résolu en %s, attendu la release installée", got)
|
||||
}
|
||||
// Un binaire hors du dossier prebuilt (fork, build maison) n'est jamais touché.
|
||||
ext := filepath.Join(t.TempDir(), "llama-server")
|
||||
if got := prebuiltResolveBin(ext); got != ext {
|
||||
t.Errorf("BIN externe réécrit en %s", got)
|
||||
}
|
||||
}
|
||||
|
||||
// L'installation fait le ménage : les autres releases sont supprimées.
|
||||
func TestPrebuiltPruneGardeLaVersionCourante(t *testing.T) {
|
||||
dir := fakePrebuilt(t, "b10280", "b10088", "b10159", "b10280")
|
||||
prebuiltPrune(prebuiltServerBin(), nil)
|
||||
for _, tag := range []string{"b10088", "b10159"} {
|
||||
if _, err := os.Stat(filepath.Join(dir, "llama-"+tag)); err == nil {
|
||||
t.Errorf("%s aurait dû être supprimé", tag)
|
||||
}
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(dir, "llama-b10280")); err != nil {
|
||||
t.Errorf("la version courante a été supprimée : %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Un preset pointant une release remplacée désigne toujours « le moteur
|
||||
// précompilé » : sans ça, l'UI repassait tous les presets en « personnalisé »
|
||||
// après chaque mise à jour du moteur.
|
||||
func TestPrebuiltOwns(t *testing.T) {
|
||||
dir := fakePrebuilt(t, "b10280", "b10280")
|
||||
if !prebuiltOwns(filepath.Join(dir, "llama-b10088", "llama-server")) {
|
||||
t.Error("une release périmée du dossier prebuilt doit rester reconnue")
|
||||
}
|
||||
if prebuiltOwns(filepath.Join(t.TempDir(), "llama-server")) {
|
||||
t.Error("un binaire externe ne doit pas être pris pour le moteur précompilé")
|
||||
}
|
||||
if prebuiltOwns("") {
|
||||
t.Error("BIN vide reconnu à tort")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user