File size: 3,507 Bytes
6f2884f
7197abd
6f2884f
 
0d08cb9
6f2884f
0d08cb9
6f2884f
9ca8700
73e905b
9ca8700
 
6f2884f
 
 
 
73e905b
 
 
 
 
 
 
 
6f2884f
9ca8700
 
 
6f2884f
0d08cb9
7197abd
6f2884f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9ca8700
6f2884f
 
9ca8700
6f2884f
9ca8700
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f2884f
9ca8700
 
6f2884f
9ca8700
 
6f2884f
 
 
 
9ca8700
 
6f2884f
 
0ee8836
6f2884f
bc0cbc6
6f2884f
 
 
 
 
 
0ee8836
6f2884f
 
 
 
 
 
 
7197abd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env bash
# Thanatos-27B — fetch a Qwen 3.6 27B GGUF and build the Ollama model.
#
# Usage:
#   ./scripts/build.sh                       # default: Q4_K_M
#   ./scripts/build.sh Q5_K_M                # different quant
#   QUANT=Q6_K ./scripts/build.sh
#
# Skip the download by pointing at a GGUF you already have:
#   GGUF_PATH=/path/to/Qwen3.6-27B-Q4_K_M.gguf ./scripts/build.sh Q4_K_M
#
# Requires: huggingface-cli (or hf), ollama, awk.
set -euo pipefail

QUANT="${1:-${QUANT:-Q4_K_M}}"

REPO_ID="${REPO_ID:-unsloth/Qwen3.6-27B-GGUF}"
# Upstream uses dashes, e.g. Qwen3.6-27B-Q4_K_M.gguf. Quants known to exist
# at unsloth/Qwen3.6-27B-GGUF (as of 2026-04):
#   Q3_K_S Q3_K_M Q4_0 Q4_1 Q4_K_S Q4_K_M Q5_K_S Q5_K_M Q6_K Q8_0
#   IQ4_XS IQ4_NL
#   UD-IQ2_XXS UD-IQ2_M UD-Q2_K_XL UD-IQ3_XXS UD-Q3_K_XL UD-Q4_K_XL
#   UD-Q5_K_XL UD-Q6_K_XL UD-Q8_K_XL
GGUF_NAME="Qwen3.6-27B-${QUANT}.gguf"
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# GGUF_PATH defaults to ${ROOT}/${GGUF_NAME}, but can be overridden so users
# with cached weights elsewhere don't have to copy or symlink anything.
GGUF_PATH="${GGUF_PATH:-${ROOT}/${GGUF_NAME}}"

MODELFILE="${ROOT}/Modelfile"
TAG="${TAG:-thanatos-27b}"

echo "[*] repo:     ${REPO_ID}"
echo "[*] quant:    ${QUANT}"
echo "[*] tag:      ${TAG}"
echo "[*] modelfile:${MODELFILE}"
echo "[*] gguf:     ${GGUF_PATH}"

# ---- 1. Sanity ---------------------------------------------------------------

if ! command -v ollama >/dev/null 2>&1; then
    echo "[!] ollama not found in PATH" >&2; exit 1
fi
if [[ ! -f "${MODELFILE}" ]]; then
    echo "[!] Missing ${MODELFILE}" >&2; exit 1
fi

# ---- 2. Download GGUF if missing --------------------------------------------

if [[ -f "${GGUF_PATH}" ]]; then
    echo "[=] GGUF already present at ${GGUF_PATH}, skipping download."
else
    # Need a HF CLI to fetch the file.
    HF=""
    if command -v hf >/dev/null 2>&1; then
        HF="hf"
    elif command -v huggingface-cli >/dev/null 2>&1; then
        HF="huggingface-cli"
    else
        echo "[!] ${GGUF_PATH} not found, and neither 'hf' nor" >&2
        echo "    'huggingface-cli' is installed to download it." >&2
        echo "    Either:" >&2
        echo "      pip install -U huggingface_hub" >&2
        echo "    or set GGUF_PATH to an existing GGUF and rerun." >&2
        exit 1
    fi

    echo "[*] Downloading ${GGUF_NAME} from ${REPO_ID} ..."
    DEST_DIR="$(dirname "${GGUF_PATH}")"
    mkdir -p "${DEST_DIR}"
    case "${HF}" in
        hf)              hf download "${REPO_ID}" "${GGUF_NAME}" --local-dir "${DEST_DIR}" ;;
        huggingface-cli) huggingface-cli download "${REPO_ID}" "${GGUF_NAME}" --local-dir "${DEST_DIR}" ;;
    esac
fi

if [[ ! -f "${GGUF_PATH}" ]]; then
    echo "[!] GGUF still not present at ${GGUF_PATH} after download attempt." >&2
    exit 1
fi

# ---- 3. Patch the Modelfile FROM line in a temp copy -------------------------

TMP_MODELFILE="$(mktemp -t thanatos27b-modelfile.XXXXXX)"
trap 'rm -f "${TMP_MODELFILE}"' EXIT
awk -v p="${GGUF_PATH}" '
    /^FROM[[:space:]]/ && !done { print "FROM " p; done=1; next }
    { print }
' "${MODELFILE}" > "${TMP_MODELFILE}"

# ---- 4. Create the Ollama model ---------------------------------------------

echo "[*] ollama create ${TAG} -f <patched modelfile>"
ollama create "${TAG}" -f "${TMP_MODELFILE}"

echo
echo "[+] Done. Try it:"
echo "    ollama run ${TAG}"
echo "    python ${ROOT}/examples/ollama_chat.py   # update MODEL constant if not 'thanatos-27b'"