mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-19 13:08:15 +02:00
Frugalité : supprime le CPU consommé à vide (sondage groupé et adaptatif)
À vide, l'app chauffait le CPU en continu : trois sondages navigateur séparés (5/8/10 s) tournaient en permanence, y compris onglet caché, et chaque tick relançait un sous-processus nvidia-smi (cache TTL 5 s = la cadence, donc jamais efficace) plus deux connexions vers Ollama. - Nouveau /api/system/pulse : statut + ressources + modèles chargés en UNE requête (appels Ollama en parallèle, dégradation propre si muet), avec un cache court qui absorbe les rafales multi-onglets. - Front : un seul sondage, SUSPENDU quand l'onglet est caché, cadence adaptative (4 s pendant un flux, 20 s au repos) et rafraîchissement immédiat au retour sur l'onglet. - Panneau Matériel : 5 s -> 15 s et rien onglet caché. - Caches serveur alignés sur la cadence : nvidia-smi mis en cache 12 s, et _all_local_gpus (vue Matériel) n'était pas caché du tout. Effet au repos : ~25 requêtes/min et ~12 nvidia-smi/min -> ~3 et ~3 onglet visible, et ZÉRO onglet caché. Le serveur n'a aucune boucle de fond : sans navigateur ouvert, il ne consomme plus rien. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SVay7z3y7q2gEe54ByAE6N
This commit is contained in:
5 files changed
+150
-25
No files matched your search
@@ -11,6 +11,7 @@ import {
|
||||
getStatus,
|
||||
getSystemStats,
|
||||
getLoadedModels,
|
||||
getPulse,
|
||||
warmModel,
|
||||
fileContent,
|
||||
listFiles,
|
||||
@@ -71,6 +72,7 @@ interface LokiState {
|
||||
refreshStatus: () => Promise<void>;
|
||||
refreshSystemStats: () => Promise<void>;
|
||||
refreshLoadedModels: () => Promise<void>;
|
||||
refreshPulse: () => Promise<void>;
|
||||
refreshModels: () => Promise<void>;
|
||||
refreshFiles: () => Promise<void>;
|
||||
|
||||
@@ -261,6 +263,21 @@ export const useStore = create<LokiState>((set, get) => ({
|
||||
set({ loadedModels: await getLoadedModels() });
|
||||
},
|
||||
|
||||
// Sondage unique (statut + ressources + modèles chargés). Une seule requête
|
||||
// au lieu de trois, et une seule mise à jour du store : moins de réveils
|
||||
// navigateur et moins de rendus React quand l'app est ouverte à vide.
|
||||
refreshPulse: async () => {
|
||||
try {
|
||||
const { status, stats, loaded } = await getPulse();
|
||||
set({ status, systemStats: stats, loadedModels: loaded });
|
||||
} catch {
|
||||
set({
|
||||
status: { connected: false, host: "", default_model: "" },
|
||||
systemStats: null,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
refreshModels: async () => {
|
||||
set({ loadingModels: true });
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user