Spaces:
Runtime error
Runtime error
# | |
# Shortcut for downloading HF models | |
# | |
# Usage: | |
# ./llama-cli -m $(./scripts/hf.sh https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF/resolve/main/mixtral-8x7b-v0.1.Q4_K_M.gguf) | |
# ./llama-cli -m $(./scripts/hf.sh --url https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF/blob/main/mixtral-8x7b-v0.1.Q4_K_M.gguf) | |
# ./llama-cli -m $(./scripts/hf.sh --repo TheBloke/Mixtral-8x7B-v0.1-GGUF --file mixtral-8x7b-v0.1.Q4_K_M.gguf) | |
# | |
# all logs go to stderr | |
function log { | |
echo "$@" 1>&2 | |
} | |
function usage { | |
log "Usage: $0 [[--url] <url>] [--repo <repo>] [--file <file>] [--outdir <dir> [-h|--help]" | |
exit 1 | |
} | |
# check for curl or wget | |
function has_cmd { | |
if ! [ -x "$(command -v $1)" ]; then | |
return 1 | |
fi | |
} | |
if has_cmd wget; then | |
cmd="wget -q --show-progress -c -O %s/%s %s" | |
elif has_cmd curl; then | |
cmd="curl -C - -f --output-dir %s -o %s -L %s" | |
else | |
log "[E] curl or wget not found" | |
exit 1 | |
fi | |
url="" | |
repo="" | |
file="" | |
outdir="." | |
# parse args | |
while [[ $# -gt 0 ]]; do | |
case "$1" in | |
--url) | |
url="$2" | |
shift 2 | |
;; | |
--repo) | |
repo="$2" | |
shift 2 | |
;; | |
--file) | |
file="$2" | |
shift 2 | |
;; | |
--outdir) | |
outdir="$2" | |
shift 2 | |
;; | |
-h|--help) | |
usage | |
;; | |
*) | |
url="$1" | |
shift | |
;; | |
esac | |
done | |
if [ -n "$repo" ] && [ -n "$file" ]; then | |
url="https://huggingface.co/$repo/resolve/main/$file" | |
fi | |
if [ -z "$url" ]; then | |
log "[E] missing --url" | |
usage | |
fi | |
# check if the URL is a HuggingFace model, and if so, try to download it | |
is_url=false | |
if [[ ${#url} -gt 22 ]]; then | |
if [[ ${url:0:22} == "https://huggingface.co" ]]; then | |
is_url=true | |
fi | |
fi | |
if [ "$is_url" = false ]; then | |
log "[E] invalid URL, must start with https://huggingface.co" | |
exit 0 | |
fi | |
# replace "blob/main" with "resolve/main" | |
url=${url/blob\/main/resolve\/main} | |
basename=$(basename $url) | |
log "[+] attempting to download $basename" | |
if [ -n "$cmd" ]; then | |
cmd=$(printf "$cmd" "$outdir" "$basename" "$url") | |
log "[+] $cmd" | |
if $cmd; then | |
echo $outdir/$basename | |
exit 0 | |
fi | |
fi | |
log "[-] failed to download" | |
exit 1 | |