mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
Trois retours d'utilisateurs apres la 0.8.3. Export de la conversation (regression de la 0.8 : conversation.json a disparu dans ajean.db, verrouille et binaire). Bouton dans l'UI + commande 'ajean export [--json] [fichier]', endpoint /api/chat/export. Ecoute reseau du moteur : interrupteur 'joignable depuis le reseau local' dans le panneau Acces OpenAI (HOST + regle de pare-feu Windows), commande 'ajean network [on|off|status]'. HOST devient un reglage de machine preserve au changement de preset. Modeles GGUF decoupes en tranches -00001-of-000NN : une famille = un modele. Telechargement de toutes les tranches depuis n'importe quel lien, sonde d'espace disque sur le total, liste et suppression regroupees, demarrage refuse avec le nom du fichier manquant.
68 lines
2.0 KiB
Go
68 lines
2.0 KiB
Go
package ajean
|
|
|
|
import "testing"
|
|
|
|
// testHome donne au test un $AJEAN_HOME à lui, et neutralise le pare-feu : un
|
|
// test ne doit jamais poser (ni retirer) une règle entrante sur la machine qui
|
|
// le fait tourner.
|
|
func testHome(t *testing.T) string {
|
|
t.Helper()
|
|
home := t.TempDir()
|
|
t.Setenv("AJEAN_HOME", home)
|
|
firewallInert = true
|
|
t.Cleanup(func() { firewallInert = false })
|
|
return home
|
|
}
|
|
|
|
// La configuration écrite doit se relire à l'identique, et une clé vidée
|
|
// disparaître au lieu de rester à "".
|
|
func TestConfigAllerRetour(t *testing.T) {
|
|
testHome(t)
|
|
if err := WriteConfig(map[string]string{"MODEL": "m.gguf", "CTX": "4096"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if cfg := ReadConfig(); cfg["MODEL"] != "m.gguf" || cfg["CTX"] != "4096" {
|
|
t.Fatalf("configuration relue incorrecte : %v", cfg)
|
|
}
|
|
if err := SetConfigKey("CTX", ""); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, ok := ReadConfig()["CTX"]; ok {
|
|
t.Error("CTX vidée mais toujours présente")
|
|
}
|
|
}
|
|
|
|
// WriteConfig REMPLACE : aucune clé de l'ancienne configuration ne doit
|
|
// survivre, sans quoi une bascule de preset laisserait des réglages fantômes.
|
|
func TestWriteConfigRemplaceTout(t *testing.T) {
|
|
testHome(t)
|
|
if err := WriteConfig(map[string]string{"A": "1", "B": "2"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := WriteConfig(map[string]string{"B": "3"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cfg := ReadConfig()
|
|
if _, ok := cfg["A"]; ok {
|
|
t.Error("A a survécu au remplacement")
|
|
}
|
|
if cfg["B"] != "3" {
|
|
t.Errorf("B = %q, attendu 3", cfg["B"])
|
|
}
|
|
}
|
|
|
|
// Une base absente se comporte comme une base vide : les lecteurs ont tous un
|
|
// défaut, aucun ne doit paniquer.
|
|
func TestLecturesSurBaseVide(t *testing.T) {
|
|
testHome(t)
|
|
if len(ReadConfig()) != 0 {
|
|
t.Error("configuration non vide sur une base neuve")
|
|
}
|
|
if agentEnabled() || internetEnabled() {
|
|
t.Error("interrupteurs actifs sur une base neuve")
|
|
}
|
|
if readAPIKey() != "" || readWebKey() != "" || readLinkToken() != "" {
|
|
t.Error("clés non vides sur une base neuve")
|
|
}
|
|
}
|