|
#!/bin/sh |
|
BIN="${0%/*}" |
|
PROG="${0##*/}" |
|
|
|
print_full_help() { |
|
cat << EOF |
|
Usage: $PROG [OPTION]... <old> (new) |
|
Upgrade llamafile archives. |
|
|
|
Options: |
|
-h, --help display this help and exit |
|
-f, --force skip version check |
|
-v, --verbose verbose mode |
|
|
|
Arguments: |
|
<old> the name of the old llamafile archive to be upgraded |
|
(new) the name of the new llamafile archive to be created |
|
if not defined output will be <old>.updated.llamafile |
|
|
|
Example: |
|
$PROG old.llamafile new.llamafile |
|
This command will upgrade the old_llamafile to a new llamafile named new_llamafile. |
|
|
|
When you run this program, it's recommended that you've |
|
downloaded or installed an official llamafile-VERSION.zip |
|
from https://github.com/Mozilla-Ocho/llamafile/releases |
|
because they include prebuilt DLLs for CUDA and ROCm. |
|
You can verify your llamafile has them w/ unzip -vl |
|
EOF |
|
} |
|
|
|
abort() { |
|
echo "Error: $1" >&2 |
|
cat << EOF >&2 |
|
Usage: $PROG [OPTION]... <old> (new) |
|
Upgrade llamafile archives. |
|
Refer to --help for full instructions. |
|
EOF |
|
exit 1 |
|
} |
|
|
|
if [ x"$1" = x"-h" ] || [ x"$1" = x"--help" ]; then |
|
print_full_help >&2 |
|
exit 0 |
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LLAMAFILE="$BIN/llamafile" |
|
if [ ! -x "$LLAMAFILE" ]; then |
|
LLAMAFILE="$(command -v llamafile)" || abort "llamafile not found in PATH" |
|
fi |
|
ZIPALIGN="$BIN/zipalign" |
|
if [ ! -x "$ZIPALIGN" ]; then |
|
ZIPALIGN="$(command -v zipalign)" || abort "zipalign not found in PATH" |
|
fi |
|
|
|
|
|
force_upgrade=false |
|
verbose=false |
|
while getopts "fv" opt; do |
|
case $opt in |
|
f) |
|
force_upgrade=true |
|
echo "Skipping version check." |
|
;; |
|
v) |
|
verbose=true |
|
echo "Verbose Output Mode." |
|
;; |
|
esac |
|
done |
|
|
|
|
|
shift $((OPTIND - 1)) |
|
|
|
|
|
if [ -z "${1}" ]; then |
|
abort "Missing path to old llamafile archive to be upgraded" |
|
else |
|
old_llamafile="${1%.llamafile}" |
|
fi |
|
|
|
if [ -z "$2" ]; then |
|
new_llamafile="${old_llamafile}.updated" |
|
else |
|
new_llamafile="${2%.llamafile}" |
|
fi |
|
|
|
|
|
old_llamafile_engine_version="$("./$old_llamafile".llamafile --version)" || abort "Failed to get version of old llamafile" |
|
new_llamafile_engine_version="$("$LLAMAFILE" --version)" || abort "Failed to get version of new llamafile" |
|
|
|
|
|
echo "== Engine Version Check ==" >&2 |
|
echo "Engine version from $old_llamafile: $old_llamafile_engine_version" >&2 |
|
echo "Engine version from $LLAMAFILE: $new_llamafile_engine_version" >&2 |
|
if [ "$old_llamafile_engine_version" = "$new_llamafile_engine_version" ] && [ "$force_upgrade" != "true" ]; then |
|
echo "Upgrade not required. Exiting..." >&2 |
|
exit 0 |
|
fi |
|
|
|
if [ "$verbose" = "true" ]; then |
|
echo "== Current Content ==" >&2 |
|
zipinfo "${old_llamafile}.llamafile" || abort "Failed to get current content of old llamafile" |
|
fi |
|
|
|
tempdir="$(mktemp -d)" || abort "Failed to create temporary directory" |
|
trap 'rm -rf "$tempdir"' EXIT |
|
|
|
echo "== Repackaging / Upgrading ==" >&2 |
|
echo "extracting..." >&2 |
|
unzip "${old_llamafile}.llamafile" -d "$tempdir" || abort "Failed to extract old llamafile" |
|
echo "repackaging..." >&2 |
|
cp "$LLAMAFILE" "${new_llamafile}.llamafile" || abort "Failed to copy new llamafile" |
|
"$ZIPALIGN" -j0 "${new_llamafile}.llamafile" "$tempdir"/*.gguf "$tempdir"/.args || abort "Failed to repackaging" |
|
|
|
echo "== Completed ==" >&2 |
|
echo "Original File: ${old_llamafile}.llamafile" >&2 |
|
echo "Upgraded File: ${new_llamafile}.llamafile" >&2 |
|
|