| FROM python:3.11-slim AS base | |
| ENV PYTHONDONTWRITEBYTECODE=1 \ | |
| PYTHONUNBUFFERED=1 \ | |
| PIP_NO_CACHE_DIR=1 \ | |
| TOKENIZERS_PARALLELISM=false \ | |
| MODEL_OUTPUT_DIR=/app/arabguard_model \ | |
| CHECKPOINT_DIR=/tmp/arabguard_checkpoints \ | |
| DASHBOARD_DATA_DIR=/app/dashboard_data | |
| WORKDIR /app | |
| COPY requirements.txt ./requirements.txt | |
| RUN pip install --upgrade pip && pip install -r requirements.txt | |
| FROM base AS trainer | |
| # Keep downloads and checkpoints in this disposable build stage. | |
| ENV HF_HOME=/tmp/huggingface | |
| # Only source code is copied from Git. The dataset and base model are downloaded, | |
| # trained, and saved into the image while Hugging Face builds the Space. | |
| COPY train_model.py ./ | |
| RUN python train_model.py | |
| FROM base AS runtime | |
| # Copy only the trained artifacts, not the dataset cache or checkpoints. | |
| COPY --from=trainer --chown=1000:1000 /app/arabguard_model ./arabguard_model | |
| COPY --from=trainer --chown=1000:1000 /app/dashboard_data ./dashboard_data | |
| COPY app.py ./ | |
| ENV HOME=/home/user \ | |
| HF_HOME=/home/user/.cache/huggingface | |
| RUN useradd --create-home --uid 1000 user \ | |
| && chown -R user:user /app | |
| USER user | |
| EXPOSE 7860 | |
| CMD ["streamlit", "run", "app.py", "--server.address=0.0.0.0", "--server.port=7860", "--server.headless=true"] | |