Rootless Quadlet on dankserver serving just1moremodel/Qwen3.8-27B-Uncensored-MXFP4-awq (the radiance stack's designated alternate target; ships its fp8 MTP head, no rewrite step) with the DFlash2-FP8 drafter at SPEC=7 on the 2x R9700s (TP=2, host network, :7770, alias frank-medium unchanged). - dankserver/frank-medium/: quadlet unit, container entrypoint (fork of serve-mxfp4.sh's patch block at pinned clone commit 97353293), healthcheck - dispatcher retires the root llama.cpp unit, re-tags the registry image to the localhost alias, installs the quadlet, waits on /health - planner maps dankserver/frank-medium/* to frank-medium; scripts-era mappings removed - ROCmFPX-era env/serve/unit/download scripts staged in scripts/.AGENTTRASH with .rocmfpx suffix; seams updated (frank_medium_quadlet.bats new)
87 lines
2.6 KiB
Bash
Executable File
87 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Download the kingjones Qwen3.8-27B-ROCmFPX-Q8_0-AGENT payload for
|
|
# frank-medium from HuggingFace into
|
|
# /home/dank/models/kingjones-Qwen3.8-27B-ROCMFPX-Q8_0-AGENT.
|
|
#
|
|
# Run on Dankserver (the box that serves it). The repo is public, so the
|
|
# download works anonymously; a token in ~/.cache/huggingface/token is used
|
|
# when present, which keeps the ~28 GB main file clear of the anonymous
|
|
# rate limit at full speed.
|
|
#
|
|
# bash scripts/download-q8agent.sh
|
|
# bash scripts/download-q8agent.sh --verify-only
|
|
#
|
|
# The script is resumable (curl -C -) and verifies every artifact's size
|
|
# afterwards, so a truncated file fails loudly instead of load-crashing.
|
|
set -euo pipefail
|
|
|
|
REPO="kingjones777/Qwen3.8-27B-ROCmFPX-Q8_0-AGENT-GGUF"
|
|
DIR="/home/dank/models/kingjones-Qwen3.8-27B-ROCMFPX-Q8_0-AGENT"
|
|
EXPECTED=(
|
|
"Qwen3.8-27B-Q8_0_ROCMFPX_AGENT.gguf:28214425952"
|
|
"mmproj-Qwen3.8-27B-BF16.gguf:931145888"
|
|
"mtp-Qwen3.8-27B-Q4_0.gguf:1680271648"
|
|
)
|
|
# The model card's MTP prompt-cache fix ships in the same repo as a patch;
|
|
# fetched for reference only. This fork's main already carries the
|
|
# speculative boundary in the context checkpoint, so nothing applies it.
|
|
EXTRA=(
|
|
"patches/mtp-prompt-cache-fix.patch"
|
|
)
|
|
|
|
cd -- "$(dirname -- "$0")/.."
|
|
|
|
main() {
|
|
local mode="download"
|
|
[[ "${1:-}" == "--verify-only" ]] && mode="verify"
|
|
mkdir -p "$DIR"
|
|
cd "$DIR"
|
|
|
|
local token="" auth=()
|
|
if [[ -r "$HOME/.cache/huggingface/token" ]]; then
|
|
token="$(cat "$HOME/.cache/huggingface/token")"
|
|
auth=(-H "Authorization: Bearer $token")
|
|
else
|
|
echo "no HF token at $HOME/.cache/huggingface/token; downloading anonymously"
|
|
fi
|
|
|
|
dl() {
|
|
local f="$1"
|
|
mkdir -p "$(dirname "$f")"
|
|
curl -fsSL -C - -o "$f" --retry 10 --retry-delay 5 --retry-max-time 10800 \
|
|
"${auth[@]}" \
|
|
"https://huggingface.co/$REPO/resolve/main/$f"
|
|
echo " done: $f ($(du -h "$f" | cut -f1))"
|
|
}
|
|
|
|
if [[ "$mode" == "download" ]]; then
|
|
echo "downloading $REPO into $DIR"
|
|
for entry in "${EXPECTED[@]}"; do
|
|
dl "${entry%%:*}"
|
|
done
|
|
for f in "${EXTRA[@]}"; do
|
|
dl "$f"
|
|
done
|
|
fi
|
|
|
|
echo "verifying sizes"
|
|
local ok=1 f want act
|
|
for entry in "${EXPECTED[@]}"; do
|
|
f="${entry%%:*}"; want="${entry##*:}"
|
|
act="$(stat -c%s "$f" 2>/dev/null || echo 0)"
|
|
if [[ "$act" -eq "$want" ]]; then
|
|
echo " OK $f ($act bytes)"
|
|
else
|
|
echo " BAD $f ($act bytes, want $want)" >&2
|
|
ok=0
|
|
fi
|
|
done
|
|
if [[ -z "$token" ]]; then
|
|
echo "note: no token was used; sizes above are the integrity check"
|
|
fi
|
|
[[ "$ok" -eq 1 ]] || exit 1
|
|
echo "all files present and sized correctly"
|
|
}
|
|
|
|
main "$@"
|