diff --git a/examples/deployment/flyio-example/Dockerfile b/examples/deployment/flyio-example/Dockerfile index 2e1b9bad9..b2cc45701 100644 --- a/examples/deployment/flyio-example/Dockerfile +++ b/examples/deployment/flyio-example/Dockerfile @@ -9,8 +9,5 @@ COPY *.py . COPY ./requirements.txt requirements.txt RUN pip3 install --no-cache-dir --upgrade -r requirements.txt -# Install models -RUN python3 install_deps.py - # Start the FastAPI server CMD python3 bot_runner.py --port ${FAST_API_PORT} \ No newline at end of file diff --git a/examples/deployment/flyio-example/README.md b/examples/deployment/flyio-example/README.md index 709bcc63b..689ef11fc 100644 --- a/examples/deployment/flyio-example/README.md +++ b/examples/deployment/flyio-example/README.md @@ -2,8 +2,6 @@ This project modifies the `bot_runner.py` server to launch a new machine for each user session. This is a recommended approach for production vs. running shell processess as your deployment will quickly run out of system resources under load. -To speed up machine boot times, we also download and cache Silero VAD as part of the Dockerfile (`install_deps.py`). If you are using other custom models, you can add them here too. - For this example, we are using Daily as a WebRTC transport and provisioning a new room and token for each session. You can use another transport, such as WebSockets, by modifying the `bot.py` and `bot_runner.py` files accordingly. ## Setting up your fly.io deployment @@ -14,7 +12,7 @@ You can copy the `example-fly.toml` as a reference. Be sure to change the app na ### Create your .env file -Copy the base `env.example` to `.env` and enter the necessary API keys. +Copy the base `env.example` to `.env` and enter the necessary API keys. `FLY_APP_NAME` should match that in the `fly.toml` file. @@ -32,7 +30,6 @@ Note: you can do this manually via the fly.io dashboard under the "secrets" sub- `fly deploy` - ## Connecting to your bot Send a post request to your running fly.io instance: @@ -40,4 +37,3 @@ Send a post request to your running fly.io instance: `curl --location --request POST 'https://YOUR_FLY_APP_NAME/start_bot'` This request will wait until the machine enters into a `starting` state, before returning the a room URL and token to join. - diff --git a/examples/deployment/flyio-example/install_deps.py b/examples/deployment/flyio-example/install_deps.py deleted file mode 100644 index 30396bba3..000000000 --- a/examples/deployment/flyio-example/install_deps.py +++ /dev/null @@ -1,4 +0,0 @@ -import torch - -# Download (cache) the Silero VAD model -torch.hub.load(repo_or_dir='snakers4/silero-vad', model='silero_vad', force_reload=True) diff --git a/pyproject.toml b/pyproject.toml index 33a72a041..3c94aadf4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,7 +50,7 @@ moondream = [ "einops~=0.8.0", "timm~=0.9.16", "transformers~=4.40.2" ] openai = [ "openai~=1.35.0" ] openpipe = [ "openpipe~=4.18.0" ] playht = [ "pyht~=0.0.28" ] -silero = [ "torch~=2.3.1", "torchaudio~=2.3.1" ] +silero = [ "silero-vad~=5.1" ] websocket = [ "websockets~=12.0", "fastapi~=0.111.0" ] whisper = [ "faster-whisper~=1.0.3" ] xtts = [ "resampy~=0.4.3" ] diff --git a/src/pipecat/vad/silero.py b/src/pipecat/vad/silero.py index 4fdf5c767..08d3534ea 100644 --- a/src/pipecat/vad/silero.py +++ b/src/pipecat/vad/silero.py @@ -15,12 +15,8 @@ from pipecat.vad.vad_analyzer import VADAnalyzer, VADParams, VADState from loguru import logger try: + from silero_vad import load_silero_vad import torch - # We don't use torchaudio here, but we need to try importing it because - # Silero uses it. - import torchaudio - - torch.set_num_threads(1) except ModuleNotFoundError as e: logger.error(f"Exception: {e}") @@ -37,10 +33,6 @@ class SileroVADAnalyzer(VADAnalyzer): self, *, sample_rate: int = 16000, - version: str = "v5.0", - force_reload: bool = False, - skip_validation: bool = True, - trust_repo: bool = True, params: VADParams = VADParams()): super().__init__(sample_rate=sample_rate, num_channels=1, params=params) @@ -49,11 +41,7 @@ class SileroVADAnalyzer(VADAnalyzer): logger.debug("Loading Silero VAD model...") - (self._model, _) = torch.hub.load(repo_or_dir=f"snakers4/silero-vad:{version}", - model="silero_vad", - force_reload=force_reload, - skip_validation=skip_validation, - trust_repo=trust_repo) + self._model = load_silero_vad() self._last_reset_time = 0 @@ -94,20 +82,12 @@ class SileroVAD(FrameProcessor): self, *, sample_rate: int = 16000, - version: str = "v5.0", - force_reload: bool = False, - skip_validation: bool = True, - trust_repo: bool = True, vad_params: VADParams = VADParams(), audio_passthrough: bool = False): super().__init__() self._vad_analyzer = SileroVADAnalyzer( sample_rate=sample_rate, - version=version, - force_reload=force_reload, - skip_validation=skip_validation, - trust_repo=trust_repo, params=vad_params) self._audio_passthrough = audio_passthrough