mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 21:48:47 +02:00
backend llama.cpp : mode binaires precompiles officiels (aucune compilation)
Alternative rapide a la compilation locale : telechargement des binaires officiels de ggml-org/llama.cpp publies a chaque release (~2 min au lieu de ~40 de build CUDA). Le variant est choisi selon la machine (CUDA Windows avec selection de la version selon le pilote + cudart, Vulkan, Metal, ROCm, CPU), extrait dans backends/llama.cpp-prebuilt et BIN repointe dessus. - backend_prebuilt.go : detection release/variant, telechargement avec progression, extraction zip/tar.gz anti zip-slip, marqueur VERSION - UI : bouton 'binaires precompiles' + 'compiler (sources)', le statut distingue le mode actif (precompile vs build local), 'verifier les maj' compare a la derniere release officielle en mode precompile - CLI : 'jean llamacpp prebuilt' - le build local reste sur le disque : bascule possible via l'editeur de preset Limites : builds generiques (pas de tuning natif) ; pas de build CUDA officiel Linux (variant Vulkan) ; la compilation locale reste requise pour les forks.
This commit is contained in:
1 parent
58b59da823
commit
b1890ed6f7
7 files changed
+628
-16
No files matched your search
@@ -119,7 +119,8 @@
|
||||
<details id="lc-details"><summary>Backend llama.cpp <span id="lc-badge" style="margin-left:auto;margin-right:12px;font-size:10px"></span></summary>
|
||||
<div id="lc-status" class="muted" style="font-size:12px;line-height:1.6">…</div>
|
||||
<div class="row" id="lc-actions" style="margin-top:8px;flex-wrap:wrap">
|
||||
<button id="lc-install" onclick="lcInstall()" style="display:none;border-color:var(--accent);color:var(--accent)">⬇ installer</button>
|
||||
<button id="lc-prebuilt" onclick="lcPrebuilt()" style="border-color:var(--accent);color:var(--accent)">⚡ binaires précompilés</button>
|
||||
<button id="lc-install" onclick="lcInstall()" style="display:none">🔧 compiler (sources)</button>
|
||||
<button id="lc-check" onclick="lcCheck()">↥ vérifier les maj</button>
|
||||
<button id="lc-update" onclick="lcUpdate(false)" style="display:none;border-color:var(--accent);color:var(--accent)">⬆ mettre à jour</button>
|
||||
<button id="lc-rebuild" onclick="lcUpdate(true)" style="display:none">🔧 recompiler</button>
|
||||
|
||||
@@ -31,11 +31,20 @@ async function loadLlamacpp(){
|
||||
const p = s.plan;
|
||||
parts.push('accélérateur détecté : <b style="color:var(--text)">'+p.backend.toUpperCase()+'</b>'+(p.arch?' <span style="opacity:.7">(arch '+p.arch+')</span>':'')+' · '+p.jobs+' jobs');
|
||||
}
|
||||
// Mode actif : binaires officiels précompilés vs build local.
|
||||
const pb = s.prebuilt || {};
|
||||
if(pb.in_use){
|
||||
parts.push('mode : <b style="color:var(--accent)">⚡ binaires précompilés officiels</b>'+(pb.tag?' <span style="opacity:.7">('+pb.tag+')</span>':''));
|
||||
lcBadge('<span class="tag ok">précompilé</span>');
|
||||
} else if(s.installed && s.in_use){
|
||||
parts.push('mode : <b style="color:var(--text)">🔧 compilé depuis les sources</b>'+(pb.tag?' <span style="opacity:.6">(précompilé '+pb.tag+' aussi installé)</span>':''));
|
||||
}
|
||||
st.innerHTML = parts.join('<br>');
|
||||
document.getElementById('lc-install').style.display = s.installed ? 'none' : '';
|
||||
document.getElementById('lc-check').style.display = s.installed ? '' : 'none';
|
||||
document.getElementById('lc-update').style.display = (s.installed && (s.behind>0 || !s.bin)) ? '' : 'none';
|
||||
document.getElementById('lc-rebuild').style.display = s.installed ? '' : 'none';
|
||||
document.getElementById('lc-check').style.display = (s.installed || pb.in_use) ? '' : 'none';
|
||||
document.getElementById('lc-update').style.display = (s.installed && !pb.in_use && (s.behind>0 || !s.bin)) ? '' : 'none';
|
||||
document.getElementById('lc-rebuild').style.display = (s.installed && !pb.in_use) ? '' : 'none';
|
||||
document.getElementById('lc-prebuilt').textContent = pb.in_use ? '⚡ maj binaires précompilés' : '⚡ binaires précompilés';
|
||||
// Job en cours (page rechargée pendant un build) → on raccroche le polling.
|
||||
if(s.job && s.job.exists && s.job.running && !lcPoll){
|
||||
document.getElementById('lc-details').open = true;
|
||||
@@ -47,6 +56,20 @@ async function lcCheck(){
|
||||
const btn = document.getElementById('lc-check');
|
||||
const msg = document.getElementById('lc-check-msg');
|
||||
btn.disabled = true; btn.textContent = '⏳ vérification…';
|
||||
// Mode précompilé : on compare à la dernière release officielle, pas au git.
|
||||
if(lcState && lcState.prebuilt && lcState.prebuilt.in_use){
|
||||
try{
|
||||
const r = await jpost('/api/llamacpp/prebuilt/check');
|
||||
if(!r.ok){ msg.innerHTML = '<span style="color:var(--err)">'+(r.error||'erreur')+'</span>'; return; }
|
||||
if(r.update){
|
||||
msg.innerHTML = 'nouvelle release officielle : <b style="color:var(--accent)">'+r.latest+'</b> (installée : '+(r.current||'aucune')+')<br><span style="opacity:.8">'+String(r.variant||'').replace(/[<>&]/g,'')+' · ~'+r.size_mb+' Mo</span>';
|
||||
lcBadge('<span class="tag" style="color:var(--accent);border-color:var(--accent)">maj dispo</span>');
|
||||
} else {
|
||||
msg.innerHTML = '<span style="color:var(--ok)">✓ à jour</span> ('+r.current+')';
|
||||
}
|
||||
} finally { btn.disabled = false; btn.textContent = '↥ vérifier les maj'; }
|
||||
return;
|
||||
}
|
||||
try{
|
||||
const r = await jpost('/api/llamacpp/check');
|
||||
if(!r.ok){ msg.innerHTML = '<span style="color:var(--err)">'+(r.error||'erreur')+'</span>'; return; }
|
||||
@@ -70,6 +93,17 @@ async function lcInstall(){
|
||||
lcStartPolling();
|
||||
}
|
||||
|
||||
async function lcPrebuilt(){
|
||||
const inUse = lcState && lcState.prebuilt && lcState.prebuilt.in_use;
|
||||
const msg = inUse
|
||||
? 'Télécharger la dernière release officielle précompilée de llama.cpp (~2 min, aucune compilation). Le service sera arrêté pendant le remplacement puis redémarré.'
|
||||
: 'Télécharger les binaires OFFICIELS précompilés de llama.cpp au lieu de compiler (~2 min). Le variant est choisi automatiquement (CUDA / Vulkan / Metal / CPU) et BIN pointera dessus. Le build local, s\'il existe, reste sur le disque — tu peux y revenir via l\'éditeur de preset. Note : builds génériques (pas de tuning natif) ; sous Linux il n\'existe pas de build CUDA officiel (variant Vulkan).';
|
||||
if(!await askConfirm(msg, {title: inUse ? 'Mettre à jour les binaires précompilés ?' : 'Passer aux binaires précompilés ?', okText: inUse ? 'Mettre à jour' : 'Télécharger'})) return;
|
||||
const r = await jpost('/api/llamacpp/prebuilt', {});
|
||||
if(!r.ok){ toast('erreur : '+(r.error||'')); return; }
|
||||
lcStartPolling();
|
||||
}
|
||||
|
||||
async function lcUpdate(clean){
|
||||
const msg = clean
|
||||
? 'Recompiler llama.cpp from scratch (build/ supprimé). Le service sera arrêté pendant le build puis redémarré.'
|
||||
@@ -81,7 +115,7 @@ async function lcUpdate(clean){
|
||||
}
|
||||
|
||||
function lcSetButtons(disabled){
|
||||
['lc-install','lc-check','lc-update','lc-rebuild'].forEach(id=>{
|
||||
['lc-install','lc-check','lc-update','lc-rebuild','lc-prebuilt'].forEach(id=>{
|
||||
const b=document.getElementById(id); if(b) b.disabled = disabled;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user