This repository has been archived on 2026-05-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
imagerepo/Dockerfile.ml
T
bvandeusen fb925f5e6a feat: ml-worker self-heals models; restore modal tag-input auto-focus
ml-worker now fetches WD14 + SigLIP on container start via an entrypoint
script that calls huggingface_hub with a populated local_dir. HF does a
content-based integrity check, so subsequent starts are a no-op. Transient
HF outages warn and continue when a local copy is already present. This
drops the baked-in model layer (~4 GB) from the image so it pushes cleanly
through registry proxies and no longer bloats every tagged release.

view-modal.js restores the desktop-only auto-focus of the tag input on
openModal (with touch-device guard). The block existed in an earlier
main commit (0bf1961) but was absent from the post-corruption
consolidation commit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 21:12:43 -04:00

41 lines
1.7 KiB
OCaml

# syntax=docker/dockerfile:1
FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
ML_MODEL_DIR=/models
# System deps: Pillow / image handling + psycopg2 build deps (binary wheel usually fine but libpq is needed at runtime on slim)
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1 \
libglib2.0-0 \
libpq5 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Install PyTorch CPU wheel first from its dedicated index to avoid pulling CUDA libs.
# Floor only buildkit will pick the latest matching CPU wheel; keep this above the app-deps
# layer so transformers on PyPI doesn't accidentally resolve a mismatched torch.
RUN pip install --no-cache-dir \
--index-url https://download.pytorch.org/whl/cpu \
"torch>=2.5"
# Install ML requirements. Models are NOT baked in the entrypoint fetches them
# at container start into the ${ML_MODEL_DIR} volume, and huggingface_hub's
# content-based integrity check makes subsequent starts a no-op.
COPY requirements-ml.txt /app/requirements-ml.txt
RUN pip install --no-cache-dir -r requirements-ml.txt
# Copy application code (needed so Celery can import app.tasks.ml and app.ml).
# config.py lives at the repo root and is imported by app/__init__.py via 'config.Config'.
COPY app /app/app
COPY config.py /app/config.py
COPY scripts/ensure_models.py /app/scripts/ensure_models.py
COPY scripts/entrypoint-ml.sh /app/scripts/entrypoint-ml.sh
RUN chmod +x /app/scripts/entrypoint-ml.sh && mkdir -p ${ML_MODEL_DIR}
ENTRYPOINT ["/app/scripts/entrypoint-ml.sh"]
CMD ["celery", "-A", "app.celery_app:celery", "worker", "--loglevel=info", "-Q", "ml", "--concurrency=1"]