# Slim online SearchAudio image (CPU only). Build context = project root: # docker build -f deploy/Dockerfile -t searchaudio-online . FROM python:3.11-slim WORKDIR /app ENV HF_HOME=/app/models \ HF_HUB_CACHE=/app/models/hub \ SEARCHAUDIO_AUDIO_MODE=archive \ PYTHONUNBUFFERED=1 COPY requirements-online.txt . RUN pip install --no-cache-dir -r requirements-online.txt # Bake bge-m3 into the image so cold starts don't download it. RUN python -c "from FlagEmbedding import BGEM3FlagModel; BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)" # Pull the index from its own dataset repo rather than the Space repo: free Spaces cap # repo storage at 1 GB and the index is already 1.5 GB, growing with every ingest run. # Baked in at build time, so cold starts don't pay for it. Must precede HF_HUB_OFFLINE. # INDEX_REV pins the dataset commit — bump it on every index update, both for # reproducible builds and to bust Docker's layer cache (an unchanged RUN line would # silently reuse the previously downloaded index). ARG INDEX_REPO=kumarakkiy/osho-discourse-index ARG INDEX_REV=42e6dd0e998a9f76d1c4d73d6e604108e48385e9 RUN python -c "from huggingface_hub import snapshot_download; snapshot_download('$INDEX_REPO', repo_type='dataset', revision='$INDEX_REV', local_dir='/app/data/index')" # Everything past here runs with no network reads from the Hub. ENV HF_HUB_OFFLINE=1 COPY app ./app COPY config.yaml ./config.yaml EXPOSE 7860 CMD ["uvicorn", "app.server:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1"]