mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-17 20:26:35 +02:00
Repris d'AJEAN 9c7423bf (v0.18.1) : POST /api/models/download/pause
{"filename", "pause"} met en pause ou reprend un téléchargement en cours.
La pause coupe les connexions (rien ne reste ouvert vers le CDN), garde le
fichier partiel, et chaque morceau attend la reprise puis repart de l'octet
où il s'était arrêté par une requête de plage ; une pause ne consomme pas
d'essai. /status expose « paused », la vitesse publiée tombe à zéro.
Façade Rust (downloads.rs) : même route, même porte (watch), mêmes
réponses ; la route est ajoutée à celles que le Go remet à la façade quand
LOKI_MODELS=rust. Tests portés de part et d'autre (pause puis reprise de
bout en bout, fichier identique à la source).
UI : bouton « Mettre en pause » / « Reprendre » à côté de « Annuler le
téléchargement », « en pause » dans la ligne de progression.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
54 lines
1.9 KiB
Go
54 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,
|
|
"/api/models/download/pause": true,
|
|
}
|