#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" STACK_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" # shellcheck disable=SC1091 source "${SCRIPT_DIR}/catalog-lib.sh" cd "${STACK_DIR}" PROFILE_ARG="${1:-}" if [[ -n "${PROFILE_ARG}" ]]; then PROFILE_FILE="${STACK_DIR}/profiles/${PROFILE_ARG}.env" if [[ ! -f "${PROFILE_FILE}" ]]; then echo "ERROR: Profile not found: ${PROFILE_ARG}" echo " Available:" ls -1 "${STACK_DIR}/profiles/"*.env 2>/dev/null | xargs -n1 basename | sed 's/\.env$//' | sed 's/^/ /' exit 1 fi cp "${PROFILE_FILE}" .env echo "Applied profile: ${PROFILE_ARG}" fi if [[ ! -f .env ]]; then echo "ERROR: .env not found. Run: cp .env.example .env" echo " Or use a profile: ./scripts/start.sh qwen3.6-27b-awq-128k" exit 1 fi set -a # shellcheck disable=SC1091 source .env set +a DATA_ROOT="${DATA_ROOT:-/data}" if [[ -z "${VLLM_MODEL:-}" ]]; then echo "ERROR: VLLM_MODEL is empty in .env" echo " Set a model, use a profile, or run:" echo " ./scripts/download-model.sh qwen3.6-27b-awq-vllm" echo " ./scripts/switch-model.sh qwen3.6-27b-awq-128k" exit 1 fi if [[ "${VLLM_MODEL}" == *".gguf"* ]]; then echo "ERROR: VLLM_MODEL points to a .gguf file — standard vLLM cannot load GGUF." echo " GGUF models are in models.catalog.yaml for future llama.cpp (stacks/llamacpp/)." echo " For vLLM use AWQ from Hugging Face, e.g.:" echo " ./scripts/download-model.sh qwen3.6-27b-awq-vllm" echo " ./scripts/switch-model.sh qwen3.6-27b-awq-128k" exit 1 fi if ! mountpoint -q "${DATA_ROOT}" 2>/dev/null; then echo "ERROR: ${DATA_ROOT} is not mounted" echo " Complete disk setup (tutorial 04 part A) first" exit 1 fi catalog_ensure_dirs "${DATA_ROOT}" if ! docker info &>/dev/null; then echo "ERROR: Docker is not running" exit 1 fi chmod +x "${SCRIPT_DIR}/vllm-entrypoint.sh" 2>/dev/null || true echo "=== vLLM stack ===" echo "Model: ${VLLM_MODEL}" echo "Served as: ${SERVED_MODEL_NAME:-qwen3.6-27b}" echo "Context: ${MAX_MODEL_LEN:-131072} tokens" echo "KV cache: ${KV_CACHE_DTYPE:-fp8}" echo "Quantize: ${QUANTIZATION:-(none)}" echo "Data root: ${DATA_ROOT}" echo "" docker compose --profile vllm pull docker compose --profile vllm up -d echo "" echo "Started. Follow logs:" echo " docker compose --profile vllm logs -f vllm" echo "" echo "Test when ready:" echo " curl -s http://localhost:${VLLM_PORT:-8000}/v1/models | jq ."