Spaces:
Running
Running
| # Afterimage live backend — FastAPI + FastEmbed CLIP + embedded Qdrant. | |
| # Built for a Hugging Face Docker Space (runs as UID 1000, serves on :7860). | |
| FROM python:3.11-slim | |
| RUN useradd -m -u 1000 user && mkdir -p /app && chown user:user /app | |
| USER user | |
| WORKDIR /app | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH \ | |
| PYTHONUNBUFFERED=1 \ | |
| AFTERIMAGE_ASSET_ROOT=/app/data/assets \ | |
| AFTERIMAGE_MANIFEST=/app/data/manifest.json \ | |
| QDRANT_URL=path:/app/.qdrant-local \ | |
| AFTERIMAGE_ALLOW_FAKE_EMBEDDINGS=0 \ | |
| AFTERIMAGE_CORS_ORIGINS=* \ | |
| HF_HOME=/home/user/.cache/huggingface \ | |
| FASTEMBED_CACHE_DIR=/home/user/.cache/fastembed | |
| COPY --chown=user backend/requirements.txt ./backend/requirements.txt | |
| RUN pip install --no-cache-dir --user -r backend/requirements.txt | |
| COPY --chown=user backend/ ./backend/ | |
| COPY --chown=user data/ ./data/ | |
| # Bake the model cache + seeded embedded Qdrant into the image so boots are fast. | |
| # (Downloads CLIP ViT-B/32, embeds the 36 region/baseline/incident points.) | |
| RUN cd backend && python scripts/seed.py \ | |
| && python -c "from app.config import get_settings; from app.embedder import ImageEmbedder; ImageEmbedder(get_settings()).embed_text('warm up the clip text tower')" || echo "text-tower preload skipped" | |
| EXPOSE 7860 | |
| WORKDIR /app/backend | |
| CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"] | |