mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 05:28:15 +02:00
Le sélecteur de l'en-tête ne charge que des presets (repris de la PR #25)
Le sélecteur de l'en-tête proposait, sous les presets, un groupe « Modèles (.gguf) » listant les fichiers du disque. En choisir un écrivait MODEL= et rien d'autre : le contexte, le NGL et l'échantillonnage du modèle précédent restaient en place — un 27B chargé par-dessus les réglages d'un 4B partait sur 100k de contexte et mourait en OOM, sans que rien ne dise pourquoi. Charger un modèle, c'est appliquer tous ses réglages : ça s'appelle un preset, et c'est désormais le seul chemin. /api/models/use disparaît avec le groupe qu'elle servait, ainsi que switchModelFile, loadModelSwitchFiles et MS_FILES côté interface. Le title du sélecteur le dit : « preset actif — en changer recharge tous ses réglages et relance le moteur ». Repris tel quel de la PR #25, dont l'historique (antérieur à la réécriture de main) ne peut plus y être fusionné. index.html régénéré par tools/assemble-ui. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
6 files changed
+26
-140
No files matched your search
@@ -1377,41 +1377,6 @@ func handleMemDelete(w http.ResponseWriter, r *http.Request) {
|
||||
sendJSON(w, 200, map[string]any{"ok": true})
|
||||
}
|
||||
|
||||
// handleModelUse charge un MODÈLE précis (fichier .gguf) sans passer par un
|
||||
// preset : seul MODEL change dans la configuration active — contexte, NGL et
|
||||
// échantillonnage sont conservés — et le service redémarre en arrière-plan,
|
||||
// même contrat que handleSwitch. C'est ce qui rend le sélecteur de l'en-tête
|
||||
// utilisable même sans avoir créé de preset.
|
||||
func handleModelUse(w http.ResponseWriter, r *http.Request) {
|
||||
if tuneDenyHTTP(w) {
|
||||
return
|
||||
}
|
||||
var req struct {
|
||||
Value string `json:"value"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil || strings.TrimSpace(req.Value) == "" {
|
||||
sendJSON(w, 400, map[string]any{"ok": false, "error": "modèle manquant"})
|
||||
return
|
||||
}
|
||||
// Le fichier doit exister AVANT d'écrire la config : une faute de frappe ne
|
||||
// doit pas laisser un moteur qui boucle sur un modèle introuvable.
|
||||
if _, err := resolveServeModelPath(req.Value); err != nil {
|
||||
sendJSON(w, 400, map[string]any{"ok": false, "error": err.Error()})
|
||||
return
|
||||
}
|
||||
if err := SetConfigKey("MODEL", req.Value); err != nil {
|
||||
sendJSON(w, 500, map[string]any{"ok": false, "error": err.Error()})
|
||||
return
|
||||
}
|
||||
fmt.Printf("%s MODEL <- %s\n", green("[ok]"), req.Value)
|
||||
go func() {
|
||||
if err := serviceAction("restart"); err != nil {
|
||||
fmt.Println(red("[err] redémarrage : " + err.Error()))
|
||||
}
|
||||
}()
|
||||
sendJSON(w, 200, map[string]any{"ok": true})
|
||||
}
|
||||
|
||||
func handleSwitch(w http.ResponseWriter, r *http.Request) {
|
||||
// Pendant une optimisation, la configuration active est celle qu'elle mesure
|
||||
// et le moteur ne doit pas redémarrer (backend_tune_lock.go).
|
||||
|
||||
Reference in new issue
Block a user