gazet / Dockerfile
srmsoumya's picture
hf: update Dockerfile & supervisord to point to q8_0.gguf model
71d368c
FROM ghcr.io/ggml-org/llama.cpp:server AS llama
FROM python:3.13-slim
# Install system deps
RUN apt-get update && apt-get install -y --no-install-recommends \
curl supervisor libgomp1 && rm -rf /var/lib/apt/lists/*
# Copy llama-server binary and backend .so files (must stay together)
COPY --from=llama /app /usr/local/lib/llama
RUN ln -s /usr/local/lib/llama/llama-server /usr/local/bin/llama-server \
&& echo /usr/local/lib/llama > /etc/ld.so.conf.d/llama.conf \
&& ldconfig
ENV LD_LIBRARY_PATH=/usr/local/lib/llama
# HF Spaces requires UID 1000
RUN useradd -m -u 1000 user
USER user
ENV HOME=/home/user PATH=/home/user/.local/bin:$PATH
WORKDIR $HOME/app
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# Install dependencies (cache layer)
COPY --chown=user pyproject.toml uv.lock ./
RUN uv sync --frozen --no-install-project --extra demo
# Copy application code
COPY --chown=user src/ src/
COPY --chown=user assets/ assets/
COPY --chown=user gazet_demo.py .
RUN uv sync --frozen --extra demo
# Download model from HF
RUN uv run python -c "\
from huggingface_hub import hf_hub_download; \
hf_hub_download('developmentseed/gazet-model', 'models/ckpt-q8_0.gguf', local_dir='.')"
# Download geodata from HF (repo structure matches app's expected layout)
RUN uv run python -c "\
from huggingface_hub import snapshot_download; \
snapshot_download('developmentseed/gazet-geodata', repo_type='dataset', local_dir='data')"
COPY --chown=user supervisord.conf .
ENV GAZET_DATA_DIR=$HOME/app/data \
LLAMA_SERVER_URL=http://localhost:9000 \
GAZET_API_URL=http://localhost:8000 \
PATH="$HOME/app/.venv/bin:$PATH"
EXPOSE 7860
CMD ["supervisord", "-c", "supervisord.conf"]