Merge pull request #340 from pipecat-ai/lewis/silero-vad-via-pip

Install Silero VAD via pip
This commit is contained in:
Lewis Wolfgang
2024-08-09 13:27:29 -04:00
committed by GitHub
5 changed files with 4 additions and 35 deletions

View File

@@ -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}

View File

@@ -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.

View File

@@ -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)

View File

@@ -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" ]

View File

@@ -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