FoolDev's picture
Add scripts/build.sh: fetch Heretic GGUF and build the Ollama model
7f4cc42
Raw
History Blame Contribute Delete
3.43 kB
#!/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}"