#!/bin/bash # # Create isolated venv for one reranker backend. # set -euo pipefail PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "${PROJECT_ROOT}" PYTHON_BIN="${PYTHON_BIN:-python3}" TMP_DIR="${RERANKER_PIP_TMPDIR:-${PROJECT_ROOT}/.tmp/reranker-pip}" # shellcheck source=scripts/lib/load_env.sh source "${PROJECT_ROOT}/scripts/lib/load_env.sh" load_env_file "${PROJECT_ROOT}/.env" # shellcheck source=scripts/lib/reranker_backend_env.sh source "${PROJECT_ROOT}/scripts/lib/reranker_backend_env.sh" BACKEND="${1:-$(detect_rerank_backend "${PROJECT_ROOT}")}" VENV_DIR="${RERANKER_VENV:-$(reranker_backend_venv_dir "${PROJECT_ROOT}" "${BACKEND}")}" REQ_FILE="$(reranker_backend_requirements_file "${PROJECT_ROOT}" "${BACKEND}")" if [[ ! -f "${REQ_FILE}" ]]; then echo "ERROR: requirements file not found for reranker backend ${BACKEND}: ${REQ_FILE}" >&2 exit 1 fi if ! command -v "${PYTHON_BIN}" >/dev/null 2>&1; then echo "ERROR: python not found: ${PYTHON_BIN}" >&2 exit 1 fi if [[ -d "${VENV_DIR}" && ! -f "${VENV_DIR}/bin/activate" ]]; then echo "Found broken venv at ${VENV_DIR}, recreating..." rm -rf "${VENV_DIR}" fi if [[ ! -d "${VENV_DIR}" ]]; then echo "Creating ${VENV_DIR}" "${PYTHON_BIN}" -m venv "${VENV_DIR}" else echo "Reusing ${VENV_DIR}" fi mkdir -p "${TMP_DIR}" export TMPDIR="${TMP_DIR}" PIP_ARGS=(--no-cache-dir) echo "Using TMPDIR=${TMPDIR}" "${VENV_DIR}/bin/python" -m pip install "${PIP_ARGS[@]}" --upgrade pip wheel "${VENV_DIR}/bin/python" -m pip install "${PIP_ARGS[@]}" -r "${REQ_FILE}" if [[ "${BACKEND}" == qwen3_gguf* ]]; then if [[ -x "/usr/local/cuda/bin/nvcc" ]]; then "${VENV_DIR}/bin/python" -m pip install "${PIP_ARGS[@]}" \ cmake \ ninja \ scikit-build-core \ flit_core \ setuptools-scm echo "Rebuilding llama-cpp-python with CUDA support for ${BACKEND}" PATH="/usr/local/cuda/bin:/usr/bin:/bin" \ CC="/usr/bin/x86_64-linux-gnu-gcc" \ CXX="/usr/bin/x86_64-linux-gnu-g++" \ CUDACXX="/usr/local/cuda/bin/nvcc" \ CMAKE_ARGS="-DGGML_CUDA=on" \ FORCE_CMAKE=1 \ "${VENV_DIR}/bin/python" -m pip install "${PIP_ARGS[@]}" \ --force-reinstall \ --no-build-isolation \ "llama-cpp-python==0.3.18" else echo "WARNING: /usr/local/cuda/bin/nvcc not found; ${BACKEND} will be installed without CUDA support." >&2 fi fi echo echo "Done." echo "Backend: ${BACKEND}" echo "Reranker venv: ${VENV_DIR}" echo "Requirements: ${REQ_FILE}" echo "Start service: ./scripts/start_reranker.sh"