39 lines
1.4 KiB
Bash
39 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
# Build the serial native text bundle. Run this once inside `nix develop`;
|
|
# the Python converter itself has no network or framework dependency.
|
|
set -euo pipefail
|
|
|
|
if [[ $# -ne 2 && $# -ne 4 ]]; then
|
|
echo "usage: $0 BASE_MODEL_DIR OUTPUT_DIR [FIRST_LAYER LAST_LAYER]" >&2
|
|
exit 2
|
|
fi
|
|
|
|
base=$1
|
|
output=$2
|
|
root=$(cd "$(dirname "$0")/.." && pwd)
|
|
mkdir -p "$output"
|
|
first=0
|
|
last=31
|
|
if [[ $# -eq 2 ]]; then
|
|
python3 "$root/scripts/convert_llm2vec_tokenizer_to_gguf.py" \
|
|
--tokenizer "$base/tokenizer.json" --output "$output/tokenizer.gguf"
|
|
python3 "$root/scripts/convert_llm2vec_layer_to_gguf.py" \
|
|
--base "$base" --mntp-adapter "$root/models/llm2vec-mntp-adapter" \
|
|
--supervised-adapter "$root/models/llm2vec-adapter" --embedding \
|
|
--output "$output/embedding.gguf"
|
|
python3 "$root/scripts/convert_llm2vec_layer_to_gguf.py" \
|
|
--base "$base" --mntp-adapter "$root/models/llm2vec-mntp-adapter" \
|
|
--supervised-adapter "$root/models/llm2vec-adapter" --final-norm \
|
|
--output "$output/final-norm.gguf"
|
|
else
|
|
first=$3
|
|
last=$4
|
|
fi
|
|
for layer in $(seq "$first" "$last"); do
|
|
printf -v name 'layer-%02d.gguf' "$layer"
|
|
python3 "$root/scripts/convert_llm2vec_layer_to_gguf.py" \
|
|
--base "$base" --mntp-adapter "$root/models/llm2vec-mntp-adapter" \
|
|
--supervised-adapter "$root/models/llm2vec-adapter" --layer "$layer" \
|
|
--output "$output/$name"
|
|
done
|