mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 22:18:13 +02:00
La façade Rust mène les téléchargements de .gguf quand LOKI_DOWNLOADS=rust (expérimental ; le Go reste le défaut) : sonde, lancement, suivi, annulation, avec les mêmes contrats et la même mécanique que le Go (tranches rapatriées en entier, plages d'octets parallèles, reprise, place disque vérifiée sur le total, jeton réservé aux hôtes Hugging Face, refus traduits, .part vidés au démarrage). Côté Go : facade_downloads.go remet ces routes à la façade quand elles arrivent par le tunnel du relais, et le Go ne vide plus les .part qu'elle mène. Parité : journal des fonctions pures tiré du Go (parity_dl_test.go) et rejoué en Rust ; téléchargements de bout en bout contre un faux Hugging Face (tests/downloads.rs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
46 lines
1.6 KiB
Go
46 lines
1.6 KiB
Go
package loki
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// facade_downloads.go — téléchargements de modèles tenus par la façade Rust
|
|
// (LOKI_DOWNLOADS=rust, lot « modèles » de la migration ; expérimental, le Go
|
|
// reste le défaut).
|
|
//
|
|
// La façade sert elle-même /api/models/download* sur le port public. Le tunnel
|
|
// du relais et sa redistribution E2E arrivent pourtant ICI : ces routes 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 facadeDownloadsEnv = "LOKI_DOWNLOADS"
|
|
|
|
// facadeDownloads : la façade tient-elle les téléchargements de modèles ? Il
|
|
// faut aussi son adresse et le jeton interne, sans lesquels rien ne peut lui
|
|
// être remis.
|
|
func facadeDownloads() bool {
|
|
return strings.EqualFold(strings.TrimSpace(os.Getenv(facadeDownloadsEnv)), "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 !facadeDownloads() {
|
|
cleanStalePartFiles()
|
|
}
|
|
}
|
|
|
|
// facadeDownloadRoutes : les routes que la façade sert alors (downloads.rs).
|
|
var facadeDownloadRoutes = map[string]bool{
|
|
"/api/models/download": true,
|
|
"/api/models/download/probe": true,
|
|
"/api/models/download/status": true,
|
|
"/api/models/download/cancel": true,
|
|
}
|