You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cookbook llama.cpp prebuilt lookup can never match: /releases/latest skips prereleases, and the Linux asset patterns target nonexistent CUDA/.zip artifacts #6252
Download a GGUF via Cookbook → Download (unsloth/gpt-oss-20b-GGUF, Q4_K_M).
Cookbook → Serve, Engine: llama.cpp, on a host with no llama-server on PATH.
Launch.
Expected Behaviour
The prebuilt lookup in _append_llamacpp_runner_lines finds a matching llama.cpp release asset, downloads it, and llama-server starts in seconds.
Actual Behaviour
_odysseus_prebuilt_url is always empty, so every launch falls through to git clone + a from-source build. Mine printed:
Native llama-server not found — building from source (one-time, may take a few minutes)...
Cloning into 'llama.cpp'...
and then wedged: 3h20m elapsed, 17.7 MB fetched, byte-identical size 8 seconds apart. Chat showed [Error: Cannot reach http://localhost:8000] the whole time, which is accurate — nothing ever bound the port.
There are three independent reasons the URL is never found. Each alone is sufficient.
1. /releases/latest excludes prereleases; llama.cpp ships binaries only on prereleases.
So the response contains exactly one browser_download_url, pointing at a text file. No pattern can match it. (v0.4.0 was published 2026-09-04T19:56:47Z. Before it existed the endpoint had no non-prerelease to return at all, so curl -f failed and the URL was empty for a different reason — the endpoint has no working state here either way.)
2. ubuntu.*cuda matches nothing — llama.cpp publishes no Linux CUDA binary.
Line 869 sets _odysseus_pat="ubuntu.*cuda" whenever nvidia-smi reports a GPU. Every CUDA asset is Windows-only:
ubuntu.*cuda -> NO MATCH
ubuntu.*vulkan -> llama-b10816-bin-ubuntu-vulkan-x64.tar.gz
So every NVIDIA Linux host takes the branch that cannot match, and never reaches the vulkan branch that would have worked. This is the branch most likely to matter: NVIDIA + Linux is the common self-host configuration.
3. The CPU fallback pattern ends in .zip; Linux assets are .tar.gz.
Line 873 sets _odysseus_pat="ubuntu-x64\\.zip". The asset is llama-b10816-bin-ubuntu-x64.tar.gz:
ubuntu-x64\.zip -> NO MATCH
ubuntu-x64\.tar\.gz -> llama-b10816-bin-ubuntu-x64.tar.gz
Only the Windows assets are .zip. This is the same .zip-vs-.tar.gz assumption behind #5636, one step earlier in the pipeline — here it stops the match, there it stops the extract.
Yes — happy to open a PR against dev if the approach below looks right.
Additional Information
Suggested fix, all in the same block at routes/cookbook_helpers.py:869-875:
Query /releases?per_page=10 and take the first entry that actually carries a matching asset, instead of /releases/latest. That is prerelease-tolerant and self-corrects when upstream changes its release model again.
Make the asset patterns .tar.gz-aware on Linux, and drop cuda from the Linux pattern set entirely since no such asset is published. Ordering that reflects what exists: ubuntu.*vulkan when a Vulkan loader and a render node are present, else ubuntu-x64\.tar\.gz.
Worth noting the practical consequence of #2: on NVIDIA Linux the best available prebuilt is the Vulkan build, not a CUDA one. That is still a large win over a from-source build — and a from-source CUDA build has its own trap, since nvcc is often installed but not on PATH (mine is at /opt/cuda/bin/nvcc), so the fallback silently produces a CPU-only binary. Related: #5606, #831.
Prerequisites
.tar.gz-into-zipfileextraction failure. This issue is about the three earlier failures that mean the URL is never found in the first place, so Cookbook prebuilt llama-server install fails — zipfile.ZipFile() cannot open a .tar.gz asset #5636's extractor is unreachable on Linux today.)dev.Odysseus Revision
upstream/dev@ affaee1Install Method
Manual (uvicorn)
Operating System
Linux (Arch, kernel 7.2.2)
Steps to Reproduce
unsloth/gpt-oss-20b-GGUF, Q4_K_M).llama-serveron PATH.Expected Behaviour
The prebuilt lookup in
_append_llamacpp_runner_linesfinds a matching llama.cpp release asset, downloads it, andllama-serverstarts in seconds.Actual Behaviour
_odysseus_prebuilt_urlis always empty, so every launch falls through togit clone+ a from-source build. Mine printed:and then wedged: 3h20m elapsed, 17.7 MB fetched, byte-identical size 8 seconds apart. Chat showed
[Error: Cannot reach http://localhost:8000]the whole time, which is accurate — nothing ever bound the port.There are three independent reasons the URL is never found. Each alone is sufficient.
1.
/releases/latestexcludes prereleases; llama.cpp ships binaries only on prereleases.routes/cookbook_helpers.py:875queries:GitHub defines that as the latest non-prerelease release. Current state of the repo:
So the response contains exactly one
browser_download_url, pointing at a text file. No pattern can match it. (v0.4.0was published 2026-09-04T19:56:47Z. Before it existed the endpoint had no non-prerelease to return at all, socurl -ffailed and the URL was empty for a different reason — the endpoint has no working state here either way.)2.
ubuntu.*cudamatches nothing — llama.cpp publishes no Linux CUDA binary.Line 869 sets
_odysseus_pat="ubuntu.*cuda"whenevernvidia-smireports a GPU. Every CUDA asset is Windows-only:Checked against the full 27-asset list of
b10816:So every NVIDIA Linux host takes the branch that cannot match, and never reaches the
vulkanbranch that would have worked. This is the branch most likely to matter: NVIDIA + Linux is the common self-host configuration.3. The CPU fallback pattern ends in
.zip; Linux assets are.tar.gz.Line 873 sets
_odysseus_pat="ubuntu-x64\\.zip". The asset isllama-b10816-bin-ubuntu-x64.tar.gz:Only the Windows assets are
.zip. This is the same.zip-vs-.tar.gzassumption behind #5636, one step earlier in the pipeline — here it stops the match, there it stops the extract.Logs / Screenshots
Model / Backend (if relevant)
llama.cpp /
unsloth/gpt-oss-20b-GGUFQ4_K_M. Host: RTX 4050 Laptop 6 GB, 31 GB RAM, x86_64.Are you willing to submit a fix?
Yes — happy to open a PR against
devif the approach below looks right.Additional Information
Suggested fix, all in the same block at
routes/cookbook_helpers.py:869-875:/releases?per_page=10and take the first entry that actually carries a matching asset, instead of/releases/latest. That is prerelease-tolerant and self-corrects when upstream changes its release model again..tar.gz-aware on Linux, and dropcudafrom the Linux pattern set entirely since no such asset is published. Ordering that reflects what exists:ubuntu.*vulkanwhen a Vulkan loader and a render node are present, elseubuntu-x64\.tar\.gz.tarpath (Cookbook prebuilt llama-server install fails — zipfile.ZipFile() cannot open a .tar.gz asset #5636 covers this);bsdtaralready handles both, plainunzip/zipfilehandles neither.Worth noting the practical consequence of #2: on NVIDIA Linux the best available prebuilt is the Vulkan build, not a CUDA one. That is still a large win over a from-source build — and a from-source CUDA build has its own trap, since
nvccis often installed but not onPATH(mine is at/opt/cuda/bin/nvcc), so the fallback silently produces a CPU-only binary. Related: #5606, #831.