talk-amharic-tts / Dockerfile
Bushra-KB's picture
Update Dockerfile
3f23b61 verified
# Use a multi-stage build to handle uroman installation cleanly
# ---- Builder Stage for uroman ----
FROM python:3.10-slim as uroman-builder
# Install uroman via pip in a temporary stage
# This lets pip manage the download of the perl script
RUN pip install uroman==1.3.1.1
# ---- Final App Stage ----
FROM python:3.10-slim
# Set environment variables for caching to a writable directory
# These will be used by huggingface libraries to store models and other assets.
ENV HF_HOME=/data/huggingface
ENV TORCH_HOME=/data/torch
ENV TRANSFORMERS_CACHE=/data/huggingface/hub
ENV HF_DATASETS_CACHE=/data/huggingface/datasets
# Create the cache directories and make them writable by any user
RUN mkdir -p $TRANSFORMERS_CACHE $HF_DATASETS_CACHE $TORCH_HOME && \
chmod -R 777 /data
# System deps for soundfile, audio encoding, and uroman
RUN apt-get update && apt-get install -y --no-install-recommends \
libsndfile1 ffmpeg perl && \
rm -rf /var/lib/apt/lists/*
# Copy the uroman script from the builder stage. It's placed in /usr/local/bin by pip.
COPY --from=uroman-builder /usr/local/bin/uroman /usr/local/bin/uroman
WORKDIR /app
# Install Python deps
COPY backend/requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r /app/requirements.txt
# Copy app code
COPY backend/ /app/
# Optional: pre-cache the MMS model at build time to speed up first request
# This now uses the cache directory defined by the ENV variables.
RUN python -c "from transformers import VitsModel, AutoTokenizer; model_id = 'facebook/mms-tts-amh'; VitsModel.from_pretrained(model_id); AutoTokenizer.from_pretrained(model_id); print('Pre-cached MMS model')"
# Spaces expects the app to listen on $PORT (default 7860)
ENV PORT=7860
EXPOSE 7860
# Start the Flask app via gunicorn
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:7860", "--workers", "1", "--threads", "4", "--timeout", "300"]