#!/usr/bin/env bash set -euo pipefail PRIMARY_BASE="${PRIMARY_BASE:-qwen3-coder:30b}" PRIMARY_NAME="${PRIMARY_NAME:-junie-qwen3-coder-30b-a6000}" ALT_BASE="${ALT_BASE:-qwen2.5-coder:32b}" ALT_NAME="${ALT_NAME:-junie-qwen25-coder-32b-a6000}" FAST_BASE="${FAST_BASE:-qwen2.5-coder:7b}" FAST_NAME="${FAST_NAME:-junie-qwen25-coder-7b-fast}" PRIMARY_CTX="${PRIMARY_CTX:-65536}" ALT_CTX="${ALT_CTX:-32768}" FAST_CTX="${FAST_CTX:-16384}" WORKDIR="${WORKDIR:-$HOME/ollama-junie-a6000}" JUNIE_HOME="${JUNIE_HOME:-$HOME/.junie}" JUNIE_PROFILE="${JUNIE_PROFILE:-local-ollama-a6000}" mkdir -p "$WORKDIR" "$JUNIE_HOME/models" echo "==> Checking Ollama" if ! command -v ollama >/dev/null 2>&1; then echo "==> Installing Ollama" curl -fsSL https://ollama.com/install.sh | sh fi echo "==> Configuring Ollama systemd for A6000 long-context use" if systemctl list-unit-files | grep -q '^ollama\.service'; then sudo mkdir -p /etc/systemd/system/ollama.service.d sudo tee /etc/systemd/system/ollama.service.d/a6000.conf >/dev/null </dev/null sudo systemctl restart ollama else echo "WARN: ollama.service niet gevonden. Start Ollama handmatig met:" echo 'OLLAMA_HOST=127.0.0.1:11434 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_KEEP_ALIVE=24h ollama serve' fi echo "==> Pulling base models" ollama pull "$PRIMARY_BASE" ollama pull "$ALT_BASE" ollama pull "$FAST_BASE" cat > "$WORKDIR/Modelfile.${PRIMARY_NAME}" < "$WORKDIR/Modelfile.${ALT_NAME}" < "$WORKDIR/Modelfile.${FAST_NAME}" < Creating tuned Ollama models" ollama create "$PRIMARY_NAME" -f "$WORKDIR/Modelfile.${PRIMARY_NAME}" ollama create "$ALT_NAME" -f "$WORKDIR/Modelfile.${ALT_NAME}" ollama create "$FAST_NAME" -f "$WORKDIR/Modelfile.${FAST_NAME}" echo "==> Creating Junie CLI custom model profile" cat > "$JUNIE_HOME/models/${JUNIE_PROFILE}.json" < Setting Junie CLI default model profile" if command -v python3 >/dev/null 2>&1; then CONFIG="$JUNIE_HOME/config.json" python3 - <<'PY' import json, os, pathlib, shutil path = pathlib.Path(os.environ["CONFIG"]) profile = "local-ollama-a6000" if path.exists(): backup = path.with_suffix(".json.bak") shutil.copy2(path, backup) try: data = json.loads(path.read_text()) except Exception: data = {} else: data = {} data["model"] = profile data["model-default-locations"] = True path.write_text(json.dumps(data, indent=2) + "\n") PY else echo "WARN: python3 ontbreekt; zet handmatig in ~/.junie/config.json:" echo '{ "model": "local-ollama-a6000", "model-default-locations": true }' fi echo "==> Preloading primary model" curl -s http://127.0.0.1:11434/api/generate \ -H "Content-Type: application/json" \ -d "{\"model\":\"${PRIMARY_NAME}\",\"prompt\":\"\",\"keep_alive\":-1}" >/dev/null || true echo "==> Testing OpenAI-compatible endpoint" curl -s http://127.0.0.1:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d "{ \"model\": \"${PRIMARY_NAME}\", \"messages\": [{\"role\":\"user\",\"content\":\"Return exactly: OK\"}], \"stream\": false }" | sed 's/,/,\n/g' | head -40 echo echo "Done." echo echo "Models:" ollama list | grep -E "${PRIMARY_NAME}|${ALT_NAME}|${FAST_NAME}" || true echo echo "Check GPU load with:" echo " ollama ps" echo " watch -n 1 nvidia-smi" echo echo "Junie CLI:" echo " cd /path/to/project" echo " junie --model ${JUNIE_PROFILE}" echo echo "IntelliJ AI Assistant:" echo " Settings > Tools > AI Assistant > Providers & API keys > Ollama" echo " Host: http://localhost:11434" echo " Model: ${PRIMARY_NAME}"