mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 01:37:06 +02:00
- Dockerfile 3 étapes : llama.cpp CUDA (flags de backend_build.go, sauf GGML_NATIVE=OFF — l'image est bâtie sur un runner, pas sur la machine cible), binaire Go statique, runtime CUDA léger (tini, git, nodejs pour les serveurs MCP npx). - docker-entrypoint.sh : sème BIN/HOST/PORT (+ MODEL/CTX/NGL depuis l'env, au premier boot seulement), lance le moteur en supervision PID puis 'loki web' au premier plan. UI seule exposée (8090) ; le moteur (8080, non authentifié) reste interne. - Nouvelle commande 'loki config [get|set]' : configuration non interactive (la config vit dans bbolt, pas dans un fichier plat). - docker-compose.yml (build local, réservation GPU) + variante Unraid (image GHCR, runtime nvidia) ; volumes /data (LOKI_HOME) et /models. Un seul conteneur car llm_client.go joint le moteur sur localhost (hérité de l'amont).
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package loki
|
|
|
|
// cli_config.go — lecture/écriture non interactive de la configuration du
|
|
// moteur (l'équivalent scriptable de `loki edit`). Ajout du fork Loki : le
|
|
// docker-entrypoint s'en sert pour semer BIN/MODEL/CTX/NGL au premier
|
|
// démarrage du conteneur, où aucun $EDITOR n'est disponible.
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
// cmdConfigKV :
|
|
//
|
|
// loki config affiche toute la configuration (KEY=VALUE)
|
|
// loki config get KEY affiche la valeur (vide si absente)
|
|
// loki config set K=V [K=V…] définit des clés ; une valeur vide supprime
|
|
func cmdConfigKV(args []string) error {
|
|
if len(args) == 0 {
|
|
cfg := ReadConfig()
|
|
keys := make([]string, 0, len(cfg))
|
|
for k := range cfg {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
for _, k := range keys {
|
|
fmt.Printf("%s=%s\n", k, cfg[k])
|
|
}
|
|
return nil
|
|
}
|
|
switch args[0] {
|
|
case "get":
|
|
if len(args) != 2 {
|
|
return fmt.Errorf("usage : loki config get KEY")
|
|
}
|
|
fmt.Println(ReadConfig()[args[1]])
|
|
return nil
|
|
case "set":
|
|
if len(args) < 2 {
|
|
return fmt.Errorf("usage : loki config set KEY=VALUE [KEY=VALUE…]")
|
|
}
|
|
for _, kv := range args[1:] {
|
|
k, v, ok := strings.Cut(kv, "=")
|
|
k = strings.TrimSpace(k)
|
|
if !ok || k == "" {
|
|
return fmt.Errorf("argument invalide %q — attendu KEY=VALUE", kv)
|
|
}
|
|
if err := SetConfigKey(k, strings.TrimSpace(v)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
return fmt.Errorf("usage : loki config [get KEY | set KEY=VALUE…]")
|
|
}
|