File size: 4,381 Bytes
b14c6e3
 
 
 
 
 
 
 
 
 
83165a7
b14c6e3
6608c49
b14c6e3
 
 
 
 
 
 
 
 
 
 
 
 
6608c49
b14c6e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
462788e
b14c6e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a7a32a6
62eaa59
 
 
 
 
b14c6e3
 
8061f1b
b14c6e3
 
 
8add461
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# ── 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"]