fix(studio): source-build fallback prefers Unsloth's tested tag over upstream latest (#4593)

* fix(studio): source-build fallback prefers Unsloth's tested tag over upstream latest

When the prebuilt install fails and falls back to source build,
--resolve-llama-tag now queries the Unsloth release repo
(unslothai/llama.cpp) first to get the latest tested/approved tag
(e.g. b8508), instead of going straight to ggml-org/llama.cpp which
may return a newer untested tag (e.g. b8514).

This ensures the source-build fallback compiles the same version that
the prebuilt path would have installed, rather than a potentially
incompatible bleeding-edge release.

Resolution order for "latest":
  1. Unsloth release repo (tested/approved)
  2. ggml-org upstream (bleeding-edge)
  3. Raw requested tag string (last resort)

Changes:
- resolve_requested_llama_tag() accepts optional published_repo param
  with docstring explaining the resolution order
- CLI --resolve-llama-tag passes --published-repo through
- setup.sh and setup.ps1 pass --published-repo to --resolve-llama-tag
  with inline comments explaining the preference

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Daniel Han 2026-03-25 07:25:47 -07:00 committed by GitHub
commit 3efea63e2f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 3 deletions

View file

@ -1285,9 +1285,39 @@ def pinned_published_release_bundle(
def resolve_requested_llama_tag(
requested_tag: str | None,
published_repo: str = "",
) -> str:
"""Resolve a llama.cpp tag for source-build fallback.
Resolution order:
1. Concrete tag (e.g. "b8508") -- returned as-is.
2. "latest" with published_repo -- query the Unsloth release repo
(e.g. unslothai/llama.cpp) for its latest release tag. This is the
tested/approved version that matches the prebuilt binaries.
3. "latest" without published_repo or if (2) fails -- query the upstream
ggml-org/llama.cpp repo. This may return a newer, untested tag.
The Unsloth repo is preferred because its releases are pinned to specific
upstream tags that have been validated with Unsloth Studio. Using the
upstream bleeding-edge tag risks API/ABI incompatibilities.
"""
if requested_tag and requested_tag != "latest":
return requested_tag
# Prefer the Unsloth release repo tag (tested/approved) over bleeding-edge
# upstream. For example, unslothai/llama.cpp may publish b8508 while
# ggml-org/llama.cpp latest is b8514. The source-build fallback should
# compile the same version the prebuilt path would have installed.
if published_repo:
try:
payload = fetch_json(
f"https://api.github.com/repos/{published_repo}/releases/latest"
)
tag = payload.get("tag_name")
if isinstance(tag, str) and tag:
return tag
except Exception:
pass
# Fall back to upstream ggml-org latest release tag
return latest_upstream_release_tag()
@ -3360,7 +3390,9 @@ def parse_args() -> argparse.Namespace:
def main() -> int:
args = parse_args()
if args.resolve_llama_tag is not None:
print(resolve_requested_llama_tag(args.resolve_llama_tag))
# Pass published_repo so the resolver prefers the Unsloth release tag
# (tested/approved) over the upstream ggml-org bleeding-edge tag.
print(resolve_requested_llama_tag(args.resolve_llama_tag, args.published_repo))
return EXIT_SUCCESS
if args.resolve_install_tag is not None:

View file

@ -1314,7 +1314,10 @@ if ($resolveExit -ne 0 -or [string]::IsNullOrWhiteSpace($ResolvedLlamaTag)) {
if ($resolveOutput) {
$resolveOutput | ForEach-Object { Write-Host $_ }
}
$fallbackOutput = & python "$PSScriptRoot\install_llama_prebuilt.py" --resolve-llama-tag $RequestedLlamaTag 2>$null
# Resolve the llama.cpp tag for source-build fallback. Pass --published-repo
# so the resolver prefers Unsloth's tested tag (e.g. b8508) over the upstream
# bleeding-edge tag (e.g. b8514) from ggml-org/llama.cpp.
$fallbackOutput = & python "$PSScriptRoot\install_llama_prebuilt.py" --resolve-llama-tag $RequestedLlamaTag --published-repo $HelperReleaseRepo 2>$null
$fallbackExit = $LASTEXITCODE
$ResolvedLlamaTag = if ($fallbackExit -eq 0 -and $fallbackOutput) {
($fallbackOutput | Select-Object -Last 1).ToString().Trim()

View file

@ -397,7 +397,10 @@ if [ -z "$_RESOLVED_LLAMA_TAG" ]; then
echo "⚠️ Failed to resolve an installable prebuilt llama.cpp tag via $_HELPER_RELEASE_REPO"
cat "$_RESOLVE_LLAMA_LOG" >&2 || true
set +e
_RESOLVED_LLAMA_TAG="$(python "$SCRIPT_DIR/install_llama_prebuilt.py" --resolve-llama-tag "$_REQUESTED_LLAMA_TAG" 2>/dev/null)"
# Resolve the llama.cpp tag for source-build fallback. Pass --published-repo
# so the resolver prefers Unsloth's tested tag (e.g. b8508) over the upstream
# bleeding-edge tag (e.g. b8514) from ggml-org/llama.cpp.
_RESOLVED_LLAMA_TAG="$(python "$SCRIPT_DIR/install_llama_prebuilt.py" --resolve-llama-tag "$_REQUESTED_LLAMA_TAG" --published-repo "$_HELPER_RELEASE_REPO" 2>/dev/null)"
_RESOLVE_UPSTREAM_STATUS=$?
set -e
if [ "$_RESOLVE_UPSTREAM_STATUS" -ne 0 ] || [ -z "$_RESOLVED_LLAMA_TAG" ]; then