File size: 3,431 Bytes
7f4cc42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
# Janus-35B — fetch a Qwen 3.6 35B-A3B 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-35B-A3B-uncensored-heretic-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:-llmfan46/Qwen3.6-35B-A3B-uncensored-heretic-GGUF}"
# Filenames at llmfan46/Qwen3.6-35B-A3B-uncensored-heretic-GGUF follow
#   Qwen3.6-35B-A3B-uncensored-heretic-${QUANT}.gguf
# Check the repo's Files tab for the quants actually published; override
# GGUF_NAME or GGUF_PATH below if the naming differs for your chosen quant.
GGUF_NAME="Qwen3.6-35B-A3B-uncensored-heretic-${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:-janus}"

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 janus35b-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}"