feat: allow multiple models to be installed in docker container

This commit is contained in:
Felix Spöttel
2023-02-28 22:05:09 +01:00
parent 099a0eb1d7
commit 20f558584a
6 changed files with 18 additions and 18 deletions

View File

@@ -5,7 +5,7 @@ x-app-variables: &app-variables
DATABASE_URI: sqlite:///./whisperbox.sqlite
ENVIRONMENT: development
BROKER_URL: redis://redis:6379/0
WHISPER_MODEL: small
WHISPER_MODELS: small
services:
redis:
@@ -41,7 +41,7 @@ services:
context: ../../
dockerfile: docker/dev/worker.Dockerfile
args:
WHISPER_MODEL: small
WHISPER_MODELS: small
container_name: whisperbox_worker_dev
volumes:
- ../../:/code

View File

@@ -1,6 +1,6 @@
FROM python:3.10
ARG WHISPER_MODEL
ARG WHISPER_MODELS
WORKDIR /code
@@ -13,7 +13,7 @@ COPY --from=mwader/static-ffmpeg:5.1.2 /ffprobe /usr/local/bin/
COPY pyproject.toml .
RUN pip install --no-cache-dir --user .[worker,worker_dev]
COPY scripts/download_model.py .
RUN chmod +x download_model.py && python download_model.py ${WHISPER_MODEL}
COPY scripts/download_models.py .
RUN python download_models.py ${WHISPER_MODELS}
ENTRYPOINT ["watchmedo", "auto-restart", "-d" , "app/worker", "-p", "*.py", "--recursive", "celery", "--", "--app=app.worker.main.celery", "worker", "--loglevel=info", "--concurrency=1"]
CMD watchmedo auto-restart -d app/worker -p *.py --recursive celery -- --app=app.worker.main.celery worker --loglevel=info --concurrency=1

View File

@@ -1,2 +1,2 @@
API_SECRET="change_me"
WHISPER_MODEL="small"
WHISPER_MODELS="small"

View File

@@ -10,7 +10,7 @@ RUN python -m venv /opt/venv && \
FROM python:3.10 as python-deploy
ARG WHISPER_MODEL
ARG WHISPER_MODELS
WORKDIR /etc/whisperbox
@@ -24,7 +24,7 @@ COPY app ./app
ENV VIRTUAL_ENV /opt/venv
ENV PATH /opt/venv/bin:$PATH
COPY scripts/download_model.py .
RUN chmod +x download_model.py && python download_model.py ${WHISPER_MODEL:-small}
COPY scripts/download_models.py .
RUN python download_models.py ${WHISPER_MODELS}
CMD celery --app=app.worker.main.celery worker --loglevel=info --concurrency=1

View File

@@ -1,8 +0,0 @@
import sys
from whisper import _download, _MODELS # type: ignore
if __name__ == "__main__":
model_name = sys.argv[1]
_download(_MODELS[model_name], "/models/", False)
if model_name != "large":
_download(_MODELS[f"{model_name}.en"], "/models/", False)

View File

@@ -0,0 +1,8 @@
import os
from whisper import _download, _MODELS # type: ignore
if __name__ == "__main__":
for name in os.environ["WHISPER_MODELS"].split(","):
_download(_MODELS[name], "/models/", False)
if name != "large":
_download(_MODELS[f"{name}.en"], "/models/", False)