mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-16 19:59:56 +02:00
La variable LOKI_DOWNLOADS devient LOKI_MODELS et couvre, en plus des téléchargements, la liste du sélecteur (avec qui référence chaque .gguf), la suppression (refus si en service, 409 avec les presets sans force, tranches emportées), les dossiers de modèles et le catalogue Hugging Face (recherche, fichiers d'un dépôt avec verdict mémoire, jeton vérifié puis enregistré, cache vidé à son changement). Côté Go, facade_models.go remet ces routes à la façade quand elles arrivent par le tunnel du relais. Parité : parity_models_test.go tire du Go les fonctions pures du catalogue et un scénario sur disque de 20 appels (liste, dossiers, suppressions), rejoués à l'identique par tests/models.rs ; catalogue et routes testés de bout en bout contre un faux Hugging Face. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
53 lines
1.9 KiB
Go
53 lines
1.9 KiB
Go
package loki
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// facade_models.go — routes des modèles tenues par la façade Rust
|
|
// (LOKI_MODELS=rust, lot 8 de la migration ; expérimental, le Go reste le
|
|
// défaut) : liste du sélecteur, dossiers, suppression, téléchargements et
|
|
// catalogue Hugging Face.
|
|
//
|
|
// La façade sert elle-même ces routes sur le port public. Le tunnel du relais
|
|
// et sa redistribution E2E arrivent pourtant ICI : elles lui sont remises, sans
|
|
// quoi un téléchargement lancé depuis le téléphone vivrait dans ce process, que
|
|
// le poste — servi par la façade — ne verrait pas.
|
|
//
|
|
// Les .part orphelins sont vidés par la façade à son démarrage : les vider ici
|
|
// (un Go relancé seul après un plantage) effacerait sous ses pieds un
|
|
// téléchargement qu'elle mène.
|
|
|
|
const facadeModelsEnv = "LOKI_MODELS"
|
|
|
|
// facadeModels : la façade tient-elle les routes des modèles ? Il faut aussi
|
|
// son adresse et le jeton interne, sans lesquels rien ne peut lui être remis.
|
|
func facadeModels() bool {
|
|
return strings.EqualFold(strings.TrimSpace(os.Getenv(facadeModelsEnv)), "rust") &&
|
|
facadeAddr() != "" && internalToken() != ""
|
|
}
|
|
|
|
// cleanStartupPartFiles vide les .part orphelins au démarrage — sauf quand la
|
|
// façade tient les téléchargements : elle le fait à SON démarrage.
|
|
func cleanStartupPartFiles() {
|
|
if !facadeModels() {
|
|
cleanStalePartFiles()
|
|
}
|
|
}
|
|
|
|
// facadeModelRoutes : les routes que la façade sert alors (models.rs,
|
|
// downloads.rs, hf.rs).
|
|
var facadeModelRoutes = map[string]bool{
|
|
"/api/models": true,
|
|
"/api/models/delete": true,
|
|
"/api/models/dirs": true,
|
|
"/api/hf/search": true,
|
|
"/api/hf/files": true,
|
|
"/api/hf/token": true,
|
|
"/api/models/download": true,
|
|
"/api/models/download/probe": true,
|
|
"/api/models/download/status": true,
|
|
"/api/models/download/cancel": true,
|
|
}
|