mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
Repris d'AJEAN et adapté à Loki : - liste réordonnable par glisser-déposer (SortableJS 1.15.6, MIT), ordre gardé côté serveur (/api/presets/order) et suivi par le sélecteur de l'en-tête ; le clic de fin de glissement ne bascule pas de preset - pastille de contexte (32K, 128K, 40K…) et pastille « capacités » : œil quand le preset lit les images (MMPROJ, API externe déclarée multimodale, Strata), ampoule + niveau quand il raisonne - éditeur : prompt système DE CE preset (rangé en base, sysprompt:<id>), projecteur vision sur le CPU (--no-mmproj-offload, visible seulement avec un mmproj) - les projecteurs mmproj ne sont plus proposés comme modèle (éditeur et sélecteur de l'en-tête) - l'aide « ? » reste survolable sur un réglage grisé Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package loki
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
// Ordre choisi par glisser-déposer : les presets classés d'abord, dans cet
|
|
// ordre ; les nouveaux (non classés) ensuite, par nom.
|
|
func TestPresetOrder(t *testing.T) {
|
|
testHome(t)
|
|
_ = os.MkdirAll(presetsDir(), 0o755)
|
|
for _, id := range []string{"alpha", "bravo", "charlie", "delta"} {
|
|
if err := os.WriteFile(filepath.Join(presetsDir(), id+".env"), []byte("# NAME="+id+"\nCTX=4096\n"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
ids := func() []string {
|
|
list, err := ListPresets()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var out []string
|
|
for _, p := range list {
|
|
out = append(out, p.ID)
|
|
}
|
|
return out
|
|
}
|
|
if got := ids(); got[0] != "alpha" || got[3] != "delta" {
|
|
t.Fatalf("sans ordre enregistré, tri par nom attendu : %v", got)
|
|
}
|
|
if err := savePresetOrder([]string{"charlie", "alpha"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := []string{"charlie", "alpha", "bravo", "delta"}
|
|
got := ids()
|
|
for i := range want {
|
|
if got[i] != want[i] {
|
|
t.Fatalf("ordre %v, attendu %v", got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPresetCtx(t *testing.T) {
|
|
cases := map[string]string{
|
|
"": "32K", // défaut de serve : 32768
|
|
"CTX=40000\n": "40K",
|
|
"CTX=\"131072\"\n": "128K",
|
|
"CTX=1000000\n": "1M",
|
|
"CTX=1500000\n": "1.5M",
|
|
"CTX=512\n": "512",
|
|
"CTX=abc\n": "",
|
|
}
|
|
for in, want := range cases {
|
|
if got := presetCtx(in); got != want {
|
|
t.Errorf("presetCtx(%q) = %q, attendu %q", in, got, want)
|
|
}
|
|
}
|
|
}
|