mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 02:05:22 -04:00
d70eb99a0d
Recipes now hold ONLY the install command(s). The rendered <pre> prepends a 'source <envPath>/bin/activate' line so the user sees a paste-ready sequence; Run uses env_prefix (same path the Install button uses) to activate the configured venv before the install command, so the install lands in the existing environment rather than a fresh .venv in whatever CWD the tmux task happens to start in. - cookbook-deps-recipes.js: trim each recipe to its single pip command - cookbook.js: _recipeDisplayText() prepends the activate context for display; pre's data-dep-recipe-install holds the raw install-only command list so Run knows what to send; Run builds env_prefix the same way _installDep does.
83 lines
3.4 KiB
JavaScript
83 lines
3.4 KiB
JavaScript
// Per-backend × per-model install recipes for the Dependencies tab.
|
||
//
|
||
// Each entry says: when you're about to serve `model` on `backend`, here's
|
||
// the exact shell sequence to make the venv + install the right packages.
|
||
// Entries are matched first-hit; put the more specific patterns ABOVE the
|
||
// generic fallback for that backend.
|
||
|
||
// Recipes hold ONLY the install command(s). The renderer prepends a
|
||
// `source <venv>/bin/activate` line for context using the active server's
|
||
// configured envPath; the Run button reuses env_prefix to activate that
|
||
// same venv before executing, so the install lands in your existing
|
||
// environment rather than a fresh `.venv` in some random CWD.
|
||
const _RECIPES = [
|
||
// ── vllm ──────────────────────────────────────────────────────────────
|
||
// MiniMax M2/M2.7 — same generic vllm install for now; kept as its own
|
||
// entry so future model-specific patches (FP8 quants, custom kernels)
|
||
// land in one obvious place without touching the catch-all.
|
||
{
|
||
backend: 'vllm',
|
||
label: 'MiniMax M2 / M2.7',
|
||
match: (m) => /minimax[-_]?m\s?2(\.7)?/i.test(m || ''),
|
||
commands: [
|
||
'uv pip install -U vllm --torch-backend auto',
|
||
],
|
||
},
|
||
// Generic vllm fallback — auto-resolves the right torch backend (CUDA
|
||
// 12.x / 12.4 / ROCm) at install time so users don't have to know.
|
||
{
|
||
backend: 'vllm',
|
||
label: 'Any vLLM model',
|
||
match: () => true,
|
||
commands: [
|
||
'uv pip install -U vllm --torch-backend auto',
|
||
],
|
||
},
|
||
|
||
// ── sglang ────────────────────────────────────────────────────────────
|
||
{
|
||
backend: 'sglang',
|
||
label: 'Any SGLang model',
|
||
match: () => true,
|
||
commands: [
|
||
'uv pip install -U "sglang[all]" --torch-backend auto',
|
||
],
|
||
},
|
||
|
||
// ── llama.cpp ─────────────────────────────────────────────────────────
|
||
// The cookbook-side rebuild path covers this for users who already have
|
||
// the engine compiled — but for a fresh box, surface a sane install.
|
||
{
|
||
backend: 'llama_cpp',
|
||
label: 'Any GGUF model',
|
||
match: () => true,
|
||
commands: [
|
||
'CMAKE_ARGS="-DGGML_CUDA=on" uv pip install -U "llama-cpp-python[server]"',
|
||
],
|
||
},
|
||
];
|
||
|
||
// Backends we surface a recipe panel for. Other rows in the Dependencies
|
||
// list keep the existing flat Install/Reinstall button without an expand
|
||
// affordance.
|
||
export const RECIPE_BACKENDS = new Set(['vllm', 'sglang', 'llama_cpp']);
|
||
|
||
// All recipe entries for a given backend, in catalog order. The first one
|
||
// is the model-specific match (when present); the last is always the
|
||
// generic fallback.
|
||
export function recipesForBackend(backend) {
|
||
return _RECIPES.filter((r) => r.backend === backend);
|
||
}
|
||
|
||
// Pick the best recipe for a backend + model id. Returns the catalog
|
||
// fallback when nothing more specific matches, or null if the backend
|
||
// isn't in the catalog at all.
|
||
export function pickRecipe(backend, modelId) {
|
||
const candidates = recipesForBackend(backend);
|
||
if (!candidates.length) return null;
|
||
for (const r of candidates) {
|
||
try { if (r.match(modelId)) return r; } catch (_) {}
|
||
}
|
||
return candidates[candidates.length - 1] || null;
|
||
}
|