mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-29 16:12:06 -04:00
Cookbook UI: backend-aware env vars, always-show MoE/EP/Reasoning toggles, GPU default, Firefox-mobile expand
Frontend half of the backend-detection + per-OS install command work, plus a pile of mobile/UX fixes: Backend awareness: - _gpuEnvPrefix() picks CUDA_VISIBLE_DEVICES / HIP_VISIBLE_DEVICES / nothing based on detected hwfit backend + scanned-host match (so a stale ajax scan does not leak CUDA env vars into a kierkegaard Vulkan launch). Replaces 6 hardcoded CUDA_VISIBLE_DEVICES sites. - GGML_CUDA_ENABLE_UNIFIED_MEMORY only emitted when backend is actually CUDA (was leaking onto Vulkan/ROCm via saved presets). Per-target install command: - Dep rows render a single mono command box + Copy button when the server resolved pkg.install_cmd_for_target. Reused in the build-deps install failure toast so the toast and the row show the same line. - Diagnosis patterns split cmake/g++/git out of the generic llama-cpp-python catch-all so a missing-cmake failure surfaces a cmake-specific message + per-distro Copy buttons. Form toggles always visible: - Reasoning Parser, Expert Parallel, MoE Env Vars no longer gated on model-family detection. Detection still hints (parser tag shown when matched); toggle works with sensible defaults otherwise. MiniMax M- series added to MoE family detector so the auto-fill is right. Mobile + GPU default: - Launch tab cached-list flex collapsed to 0px on mobile because the desktop `flex: 1 1 0` had no parent height to grow into. Override to `flex: 0 0 auto` in the cookbook mobile @media block. - doclib-card expand on mobile (Firefox no :has() support) pins explicit px heights so the launch form actually appears. - llama_mode defaults to gpu when hwfit detected cuda/rocm/vulkan/ metal on the current target, instead of always cpu (which was forcing -ngl 0 on first-open and burning 35GB models on CPU).
This commit is contained in:
@@ -461,6 +461,40 @@ export const ERROR_PATTERNS = [
|
||||
{ label: 'Copy install command', action: () => _copyText('curl -fsSL https://ollama.com/install.sh | sh') },
|
||||
],
|
||||
},
|
||||
// System build deps must be checked BEFORE the llama-server catch-all:
|
||||
// a `cmake: command not found` failure ALSO produces `llama-server:
|
||||
// command not found` later in the script (the build aborts then the
|
||||
// run line fails) — pattern order is first-match-wins, so without
|
||||
// these specific entries the user gets the misleading "install
|
||||
// llama-cpp-python[server]" suggestion when the actual blocker is a
|
||||
// missing OS-package toolchain that pip can't ship.
|
||||
{
|
||||
pattern: /cmake: command not found|cmake.*not found.*Could not/i,
|
||||
message: 'cmake is required to compile llama.cpp from source, but it is not installed on this server.',
|
||||
suggestion: 'Suggested action: install cmake via the OS package manager — apt: cmake build-essential / pacman: cmake base-devel / dnf: cmake gcc-c++ make / brew: cmake. Cookbook can do this automatically on the next launch if your user has passwordless sudo for apt/pacman/dnf.',
|
||||
fixes: [
|
||||
{ label: 'Open Dependencies', action: () => _openCookbookDependencies('llama_cpp') },
|
||||
{ label: 'Copy apt install', action: () => _copyText('sudo apt install -y cmake build-essential git') },
|
||||
{ label: 'Copy pacman install', action: () => _copyText('sudo pacman -Sy --needed cmake base-devel git') },
|
||||
{ label: 'Copy dnf install', action: () => _copyText('sudo dnf install -y cmake gcc gcc-c++ make git') },
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /^(make|g\+\+|gcc): command not found|Could not find C\+\+ compiler/i,
|
||||
message: 'A C/C++ compiler (build-essential / base-devel) is required to compile llama.cpp.',
|
||||
fixes: [
|
||||
{ label: 'Open Dependencies', action: () => _openCookbookDependencies('llama_cpp') },
|
||||
{ label: 'Copy apt install', action: () => _copyText('sudo apt install -y build-essential') },
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /^git: command not found/i,
|
||||
message: 'git is required to clone the llama.cpp source tree.',
|
||||
fixes: [
|
||||
{ label: 'Open Dependencies', action: () => _openCookbookDependencies('llama_cpp') },
|
||||
{ label: 'Copy apt install', action: () => _copyText('sudo apt install -y git') },
|
||||
],
|
||||
},
|
||||
{
|
||||
pattern: /llama-server.*command not found|llama\.cpp.*not found|No module named.*llama_cpp|No module named 'starlette_context'/i,
|
||||
message: 'llama-cpp-python server is not installed. Run: pip install "llama-cpp-python[server]"',
|
||||
@@ -688,11 +722,15 @@ export function _showDiagnosis(panel, diagnosis, sourceText) {
|
||||
copyBtn.addEventListener('click', async (e) => {
|
||||
e.stopPropagation();
|
||||
const bundle = _diagnosisCopyBundle(task, diagnosis, sourceText, suggestionText);
|
||||
try {
|
||||
await navigator.clipboard.writeText(bundle);
|
||||
// Use the shared helper which falls back to execCommand('copy') on
|
||||
// non-HTTPS origins (Tailscale IPs, LAN IPs, etc.) — navigator.clipboard
|
||||
// is silently a no-op on those, which is why the button appeared dead
|
||||
// for users on http://100.113.161.2:7011 over Tailscale/mobile.
|
||||
const ok = await _copyText(bundle);
|
||||
if (ok) {
|
||||
copyBtn.classList.add('copied');
|
||||
setTimeout(() => { if (copyBtn.isConnected) copyBtn.classList.remove('copied'); }, 1200);
|
||||
} catch (_) {}
|
||||
}
|
||||
});
|
||||
|
||||
const dismissBtn = document.createElement('button');
|
||||
@@ -757,7 +795,7 @@ export function _showDiagnosis(panel, diagnosis, sourceText) {
|
||||
});
|
||||
row.appendChild(btn);
|
||||
}
|
||||
body.appendChild(row);
|
||||
diag.appendChild(row);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user