Installation
NeMo Labs Voice Agent installs from source into a uv-managed virtual environment. For the shortest setup
path, run bash install.sh at the repository root. Use the manual steps to inspect or adapt the installation.
Prerequisites
Before installing, verify your operating system, Python, GPU, model, browser, and audio requirements on the Prerequisites page.
Installation Methods
Choose the installation script for the shortest setup path, or run the equivalent commands manually when you need to adapt the environment.
Installation Script: Recommended
Run the repository installation script to create the environment and prefetch the required runtime resources.
You can rerun install.sh safely. The script resolves the environment again in place.
When it finishes, activate the environment or prefix commands with uv run:
Manual Installation
Run the equivalent commands directly when you need to inspect or adapt each installation step.
To install the test tooling used in continuous integration (CI), run:
What install.sh Does
The installation script prepares the operating system, Python environment, and runtime text resources.
- Refuses to run inside a non-
baseconda environment. IfCONDA_DEFAULT_ENVis set to anything other thanbase, the script prints an error and exits 1. Conda’s GCC combined with system Python headers breaks C extensions that compile from source, so runconda deactivatefirst. - Installs operating system packages with
sudo apt-get install -y npm nodejs build-essential python3-dev. - Installs
uvfromhttps://astral.sh/uv/install.shif it is not already onPATH. The installer places it in~/.local/bin. - Runs
uv sync, which readspyproject.tomlplusuv.lockand creates.venv/in the current directory. - Prefetches two Natural Language Toolkit (NLTK) corpora to avoid a network download during a live text-to-speech (TTS) session.
Why Those apt Packages
The operating system packages support dependency compilation and the browser client:
The NLTK Prefetch
Kokoro TTS phonemizes out-of-vocabulary words through an Apache-2.0 g2p_en fallback
(nemo_voice_agent/pipecat/services/nemo/_g2p_fallback.py). This fallback replaces misaki’s GPL-3.0
espeak-ng path and requires two NLTK corpora:
If you skip this step, a manual installation downloads the corpora during the first TTS use.
Additional Setup
After the Python environment is installed, configure the CUDA build, model access, cache location, and browser dependencies required by your workflow.
Choose CUDA Wheels
uv selects PyTorch and vLLM wheels using torch-backend under [tool.uv] in pyproject.toml. The shipped
value is cu130. To target a different build, edit that key and re-run uv sync:
Verify the selected build:
Configure Hugging Face Credentials and Cache
The repository code does not read either variable directly. The huggingface_hub library consumes both,
and every model download uses that library. Export the variables in the shell that starts the server:
examples/generic_voice_agent/server/server.py calls load_dotenv(override=True). Instead of exporting the
variables, you can add them to a .env file next to server.py or in any parent directory. Refer to
Environment variables for the variables the server itself reads.
If Hugging Face downloads fail with I/O errors, download the repository in advance and point the configuration to the local path:
Then set llm.model to /path/to/model. You can use the same approach for TTS models.
Install Browser Client Dependencies
install.sh installs Node.js but not the client’s JavaScript packages. Install them in a separate terminal:
Installation Verification
Verify that the package imports successfully, then run the CPU-compatible unit tests.
The unit suite runs in-process and needs no GPU or model serving.
Troubleshoot the Installation
If installation or runtime verification fails, review Troubleshooting for known failures and recovery steps.
Next Steps
After verification succeeds, launch the default agent or learn how to use a different model-serving path.
The default configuration points llm.model_config at
server_configs/llm_configs/nemotron_nano_v3.yaml, which sets start_vllm_on_init: false. You must start
vLLM yourself before launching the server. Continue with:
- Quickstart: Start vLLM, the server, and the browser client.
- Serving with vLLM: Learn the serving flags and how the server communicates with vLLM.
- Hosted NVIDIA NIM endpoints: Skip local GPU serving.