| set -euo pipefail | |
| # Run the API in a Docker container with a 512Mi memory limit (Render free-tier-ish), | |
| # so you can debug OOM/import/startup issues locally with cached layers. | |
| ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" | |
| cd "$ROOT_DIR" | |
| MODEL_PATH_HOST="${MODEL_PATH_HOST:-$ROOT_DIR/models/distilmbert_lora_10k_v1.pt}" | |
| THRESHOLDS_HOST="${THRESHOLDS_HOST:-$ROOT_DIR/config/thresholds.json}" | |
| if [[ ! -f "$MODEL_PATH_HOST" ]]; then | |
| echo "ERROR: Model file not found at: $MODEL_PATH_HOST" | |
| echo "" | |
| echo "Download it first (example):" | |
| echo " python scripts/download_model.py --model-id distilmbert_lora_10k_v1 \\" | |
| echo " --url \"\$MODEL_URL\" --output-path models/distilmbert_lora_10k_v1.pt" | |
| exit 1 | |
| fi | |
| echo "Building API image (cached)…" | |
| DOCKER_PLATFORM="${DOCKER_PLATFORM:-linux/amd64}" | |
| docker build --platform "$DOCKER_PLATFORM" -f Dockerfile.api -t nlp-api-renderlike . | |
| echo "Starting container with 512Mi RAM limit…" | |
| HOST_PORT="${HOST_PORT:-8000}" | |
| docker run --rm \ | |
| --name nlp-api-renderlike \ | |
| --platform "$DOCKER_PLATFORM" \ | |
| -p "${HOST_PORT}:8000" \ | |
| --memory=512m --memory-swap=512m \ | |
| -e PYTHONUNBUFFERED=1 \ | |
| -e MODEL_PATH=models/distilmbert_lora_10k_v1.pt \ | |
| -e THRESHOLDS_PATH=config/thresholds.json \ | |
| -e TOKENIZER_NAME=distilbert-base-multilingual-cased \ | |
| -e MODEL_DTYPE="${MODEL_DTYPE:-float32}" \ | |
| -v "$MODEL_PATH_HOST:/app/models/distilmbert_lora_10k_v1.pt:ro" \ | |
| -v "$THRESHOLDS_HOST:/app/config/thresholds.json:ro" \ | |
| nlp-api-renderlike | |