#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VENV_DIR="$ROOT_DIR/.venv" VENV_PYTHON="$VENV_DIR/bin/python" VENV_PIP="$VENV_DIR/bin/pip" cd "$ROOT_DIR" if [[ -f ".env" ]]; then set -a # shellcheck disable=SC1091 source ".env" set +a fi if [[ ! -x "$VENV_PYTHON" ]]; then echo "Creating virtual environment in $VENV_DIR" python3 -m venv "$VENV_DIR" fi create_clean_venv() { echo "Recreating clean virtual environment in $VENV_DIR" rm -rf "$VENV_DIR" python3 -m venv "$VENV_DIR" } install_project() { if ! "$VENV_PIP" install -e "$ROOT_DIR"; then echo "Initial install failed, retrying from a clean virtual environment" create_clean_venv "$VENV_PIP" install -e "$ROOT_DIR" fi } ensure_requirements() { local missing=0 if ! "$VENV_PYTHON" - <<'PY' import importlib.util import sys required_modules = [ "fastapi", "livekit", "numpy", "soundfile", "tts", ] missing = [name for name in required_modules if importlib.util.find_spec(name) is None] if missing: print("Missing modules:", ", ".join(missing)) sys.exit(1) PY then missing=1 fi if [[ "$missing" -eq 1 ]]; then echo "Installing project requirements into .venv" install_project fi } ensure_requirements exec "$VENV_PYTHON" -m tts worker "$@"