jeanma's picture
Omnilingual ASR transcription demo
ae238b3 verified
# Frontend build stage
FROM node:18-alpine AS frontend-build
# Google Analytics build args
ARG VITE_ENABLE_ANALYTICS
ARG VITE_REACT_APP_GOOGLE_ANALYTICS_ID
ARG VITE_ALLOW_ALL_LANGUAGES
# Make build args available as environment variables during build
ENV VITE_ENABLE_ANALYTICS=${VITE_ENABLE_ANALYTICS}
ENV VITE_REACT_APP_GOOGLE_ANALYTICS_ID=${VITE_REACT_APP_GOOGLE_ANALYTICS_ID}
ENV VITE_ALLOW_ALL_LANGUAGES=${VITE_ALLOW_ALL_LANGUAGES}
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json* ./
RUN npm install
COPY frontend/ ./
RUN npm run build
# Dockerfile to support Translations API Build - works locally and on Hugging Face Spaces
FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04 as base
ENV PYTHON_VERSION=3.10 \
PYTHON_VERSION_SHORT=310
RUN apt-get update && apt-get upgrade -y
# Install system packages including audio processing libraries
RUN apt-get install -y \
build-essential \
wget \
python${PYTHON_VERSION} \
python3-pip \
libpq-dev
#Constants
ENV PYTHONUNBUFFERED TRUE
ARG DEBIAN_FRONTEND=noninteractive
# Set up user with UID 1000 for HF Spaces compatibility
RUN useradd -m -u 1000 user
# Install base utilities, linux packages, and audio processing libraries
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
fakeroot \
ca-certificates \
curl \
vim \
ssh \
wget \
gcc \
git \
ffmpeg \
libsndfile1 \
libsox-fmt-all \
sox \
libavcodec-extra && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Install miniconda
ENV CONDA_DIR /opt/conda
# Put conda in path and install
ENV PATH=$CONDA_DIR/bin:$PATH
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh \
&& /bin/bash ~/miniconda.sh -b -p /opt/conda
RUN conda config --set auto_activate_base false && \
conda config --set channel_priority flexible && \
mkdir -p ~/.conda && \
echo "channel_priority: flexible" > ~/.condarc && \
conda config --add channels conda-forge && \
conda config --set remote_max_retries 5 && \
conda config --set remote_connect_timeout_secs 30 && \
conda config --set remote_read_timeout_secs 30 && \
conda config --set show_channel_urls True && \
conda config --set auto_update_conda False && \
conda config --set notify_outdated_conda False && \
conda config --set report_errors False && \
conda config --set always_yes True && \
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main && \
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r && \
conda clean -afy
RUN conda config --set channel_priority false && \
conda create -n transcriptions-api python=${PYTHON_VERSION} -y && \
conda install -n transcriptions-api -c conda-forge \
libsndfile=1.0.31 \
numpy \
scipy \
-y
# Enable conda
SHELL ["conda", "run", "-n", "transcriptions-api", "/bin/bash", "-c"]
# Set up working directory and environment for user
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
WORKDIR $HOME/app
# Copy requirements.txt and wheel file before installing dependencies
COPY --chown=user server/requirements.txt ./
COPY --chown=user server/wheels/omnilingual_asr-0.1.0-py3-none-any.whl ./
# Install MMS library from local wheel file
RUN pip install omnilingual_asr-0.1.0-py3-none-any.whl
# Install Python dependencies with proper conda activation
RUN pip install -r requirements.txt
# Install debugpy for development debugging
RUN pip install debugpy
# Copy server code into the image with proper ownership
COPY --chown=user ./server $HOME/app/server
# Copy frontend build from the frontend-build stage
COPY --from=frontend-build --chown=user /app/frontend/dist $HOME/app/frontend/dist
# Make scripts executable and create directories with proper ownership
RUN chmod +x $HOME/app/server/run.sh $HOME/app/server/download_models.sh && \
mkdir -p $HOME/app/models && \
chown -R user:user $HOME/app && \
chmod -R 755 $HOME/app
# Switch to user for runtime
USER user
# Create /data/models and if possible (for HF Spaces)
RUN mkdir -p /data/models 2>/dev/null || true
# Set working directory to server
WORKDIR $HOME/app/server
# Expose port 7860 for HF Spaces (also works locally)
EXPOSE 7860
# For production: pre-download models into the image (optional)
# Uncomment the following lines if you want models baked into the production image
# RUN mkdir -p $HOME/app/models
# RUN cd $HOME/app/models && \
# wget -O ctc_alignment_mling_uroman_model_dict.txt https://dl.fbaipublicfiles.com/mms/torchaudio/ctc_alignment_mling_uroman/dictionary.txt && \
# wget -O ctc_alignment_mling_uroman_model.pt https://dl.fbaipublicfiles.com/mms/torchaudio/ctc_alignment_mling_uroman/model.pt && \
# wget https://dl.fbaipublicfiles.com/mms/mms_1143_langs_tokenizer_spm.model && \
# wget https://dl.fbaipublicfiles.com/mms/mms_XRI.pt
# Default command - works for both local and HF Spaces
CMD ["conda", "run", "--no-capture-output", "-n", "transcriptions-api", "./run.sh"]