Spaces:
Sleeping
Sleeping
| # ββ Adaptive Alert Triage β Optimised Dockerfile βββββββββββββββββββββββββββββ | |
| # | |
| # Key change vs previous version: | |
| # - Installs ONLY core deps from pyproject.toml (no torch / stable-baselines3) | |
| # - torch + stable-baselines3 are in the [train] optional group β NOT here | |
| # - Build time: ~60-90s (was ~2200s pulling 2GB of PyTorch) | |
| # | |
| # Build: | |
| # docker build -t adaptive-alert-triage:latest . | |
| # | |
| # | |
| # Run server: | |
| # docker run -p 7860:7860 adaptive-alert-triage:latest | |
| # | |
| # Run inference baseline: | |
| # docker run --rm \ | |
| # -e API_BASE_URL="https://api.openai.com/v1" \ | |
| # -e MODEL_NAME="gpt-4o-mini" \ | |
| # -e HF_TOKEN="hf_..." \ | |
| # adaptive-alert-triage:latest \ | |
| # python inference.py --n 3 | |
| # | |
| # Environment variables (set at runtime, not here): | |
| # API_BASE_URL β LLM endpoint (default: https://api.openai.com/v1) | |
| # MODEL_NAME β LLM model name (default: gpt-4o-mini) | |
| # HF_TOKEN β Hugging Face / OpenAI API key | |
| # PORT β Server port (default: 7860) | |
| # ββ Base image ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.11-slim | |
| # ββ System dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| gcc \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ββ Working directory βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| WORKDIR /app | |
| # ββ Copy dependency manifest first (maximises Docker layer cache) βββββββββββββ | |
| COPY pyproject.toml . | |
| # ββ Upgrade pip/setuptools/wheel ββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN pip install --no-cache-dir --upgrade pip setuptools wheel | |
| RUN pip install huggingface_hub | |
| # ββ Copy full project βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY . . | |
| # ββ Install ONLY core deps (no [train], no [viz], no [gemini]) ββββββββββββββββ | |
| # This skips torch, stable-baselines3, matplotlib, seaborn, pandas, google-genai | |
| # Those are only needed for local training/analysis β not the server or inference | |
| RUN pip install --no-cache-dir -e . | |
| # ββ Environment variables βββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ENV PYTHONUNBUFFERED=1 | |
| ENV PYTHONPATH=/app/src:/app | |
| ENV PORT=7860 | |
| # ββ Expose port βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| EXPOSE 7860 | |
| # ββ Health check ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \ | |
| CMD curl -f http://localhost:${PORT}/health || exit 1 | |
| # ββ Add non-root user βββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Save a pristine copy of repo weights so cached HF weights can be overridden | |
| # RUN cp -r /app/weights /app/weights_pristine 2>/dev/null || true | |
| # RUN useradd -m -u 1000 appuser \ | |
| # && mkdir -p /app/weights /app/results /app/weights_pristine \ | |
| # && chown -R appuser:appuser /app | |
| # USER appuser | |
| # ββ Default command: start the FastAPI server βββββββββββββββββββββββββββββββββ | |
| CMD ["sh", "-c", \ | |
| "python -m uvicorn adaptive_alert_triage.server:app \ | |
| --host 0.0.0.0 \ | |
| --port ${PORT:-7860} \ | |
| --workers 1 \ | |
| --log-level info"] | |