Overview
NvidiaOmniLLMService runs NVIDIA Nemotron Omni models, which accept speech, images, and video as well as text and reply with text. It extends NvidiaLLMService, so streaming, function calling, reasoning frames, and metrics work as they do there.
audio_input sets the pipeline shape:
audio_input=True(default): Omni hears the user directly and replaces the STT service. It transcribes and answers each spoken turn in one request, and pushes the transcript upstream as aTranscriptionFramefor the context. The pipeline still needs a TTS service.audio_input=False: Omni is a text LLM in a cascaded pipeline, after an STT service.
NVIDIA Omni LLM API Reference
Pipecat’s API methods for NVIDIA Nemotron Omni integration
Example Implementation
Voice bot that hears the user with no STT service
NVIDIA NIM Documentation
Official NVIDIA NIM documentation and setup
NVIDIA Developer Portal
Access NIM services and manage API keys
Installation
Prerequisites
NVIDIA NIM Setup
- NVIDIA Developer Account (cloud endpoint only): Sign up at the NVIDIA Developer Portal
- API Key (cloud endpoint only): Generate an NVIDIA API key
- Local Deployment (optional): Serve a Nemotron Omni model and set
base_urlto its address
Required Environment Variables
NVIDIA_API_KEY: Your NVIDIA API key (required for the cloud endpoint)
Configuration
str | None
default:"None"
NVIDIA API key. Required for the cloud endpoint, not for local deployments.
str
default:"https://integrate.api.nvidia.com/v1"
OpenAI-compatible endpoint base URL. For local deployments, pass the local
address (e.g.,
http://localhost:8000/v1).bool
default:"True"
Whether Omni hears the user directly, with no STT service in the pipeline.
False makes it a text LLM for a cascaded pipeline.LLMContext | None
default:"None"
Context that audio turns are answered against until the first
LLMContextFrame supplies one.float
default:"120.0"
HTTP request timeout, in seconds.
OpenAILLMService.
Settings
Runtime-configurable settings passed via thesettings constructor argument using NvidiaOmniLLMService.Settings(...). These can be updated mid-conversation with LLMUpdateSettingsFrame. See Service Settings for details.
The settings of OpenAILLMService apply, with the defaults model="nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", temperature=0.6, and top_p=0.95. It adds:
Usage
Voice Bot with Audio Input
The pipeline has no STT service. Add a VAD analyzer to the user aggregator, so the service knows where each turn starts and ends:on_user_turn_message_added:
Cascaded Pipeline
Withaudio_input=False, put an STT service before the user aggregator:
Audio and Video in the Context
Audio and video files added to the context, withLLMContext.create_file_message() or create_audio_message(), are sent in the form Omni reads. Images work in either mode.
Methods
run_multimodal_inference
NvidiaOmniInferenceResult with text, reasoning, and finish_reason (such as "stop" or "length"). Pass media in context.
Notes
- Realtime mode: With
audio_input=True, the service announces itself as a realtime service, which switches the user aggregator into realtime mode. It answers each spoken turn after any turn still running. - Interruptions: If the user interrupts a turn before Omni has transcribed it, the speech is answered together with the user’s next utterance.
- Context frames: Context frames that need an answer, such as tool results and typed user input, start a completion in both modes, so an
LLMRunFramegreeting works either way. - Reasoning content: Reasoning is emitted as
LLMThought*Frameobjects and is not sent to TTS, as forNvidiaLLMService.