diff --git a/static/js/cookbook.js b/static/js/cookbook.js index b1610c50c..b1691749b 100644 --- a/static/js/cookbook.js +++ b/static/js/cookbook.js @@ -917,7 +917,45 @@ async function _fetchDependencies() { // Wire the alternative-install "Run" buttons in the Manual block. // Each action launches the underlying command as a tmux task on the - // currently selected deps server, same as Reinstall does. + // currently selected deps server, same as Reinstall does. The exact + // command varies by detected GPU vendor — NVIDIA gets the standard + // vllm package + vllm/vllm-openai docker image; AMD gets the ROCm + // index/wheel + rocm/vllm-dev docker image. + const _detectedBackend = () => { + try { + const sys = window._hwfitSystemCache || {}; + const b = String(sys.backend || '').toLowerCase(); + if (b === 'rocm' || b === 'amd' || b === 'hip') return 'rocm'; + return 'cuda'; + } catch { return 'cuda'; } + }; + const _depsCmdFor = (action, backend) => { + if (backend === 'rocm') { + if (action === 'vllm-uv') { + return 'uv venv && . .venv/bin/activate && uv pip install -U vllm --torch-backend rocm'; + } + if (action === 'vllm-docker') { + return 'docker pull rocm/vllm-dev:main'; + } + } + // NVIDIA / CUDA default + if (action === 'vllm-uv') { + return 'uv venv && . .venv/bin/activate && uv pip install -U vllm --torch-backend auto'; + } + if (action === 'vllm-docker') { + return 'docker pull vllm/vllm-openai:latest'; + } + return ''; + }; + // Re-paint the
 blocks with the backend-appropriate command so
+    // the preview matches what Run will actually launch.
+    const _backend = _detectedBackend();
+    document.querySelectorAll('.cookbook-deps-run-btn').forEach(btn => {
+      const block = btn.closest('.cookbook-deps-cmd-block');
+      const pre = block && block.querySelector('.cookbook-deps-cmd');
+      const cmd = _depsCmdFor(btn.dataset.depsAction, _backend);
+      if (pre && cmd) pre.textContent = cmd;
+    });
     document.querySelectorAll('.cookbook-deps-run-btn').forEach(btn => {
       if (btn._wired) return;
       btn._wired = true;
@@ -928,14 +966,12 @@ async function _fetchDependencies() {
         if (sel) _applyServerSelection(sel.value);
         const host = _envState.remoteHost || '';
         const where = host || 'this server';
-        const cmds = {
-          'vllm-uv':     'uv venv && . .venv/bin/activate && uv pip install -U vllm --torch-backend auto',
-          'vllm-docker': 'docker pull vllm/vllm-openai:latest',
-        };
-        const cmd = cmds[action];
+        const backend = _detectedBackend();
+        const cmd = _depsCmdFor(action, backend);
         if (!cmd) return;
-        if (!confirm(`Run on ${where}?\n\n${cmd}\n\nLaunches as a tmux task — watch progress in the Active tab.`)) return;
-        _launchServeTask(`deps-${action}`, 'deps-install', cmd);
+        const tag = backend === 'rocm' ? 'AMD ROCm' : 'NVIDIA CUDA';
+        if (!confirm(`Run on ${where} (${tag})?\n\n${cmd}\n\nLaunches as a tmux task — watch progress in the Active tab.`)) return;
+        _launchServeTask(`deps-${action}-${backend}`, 'deps-install', cmd);
       });
     });