Skip to main content

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 a TranscriptionFrame for 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

  1. NVIDIA Developer Account (cloud endpoint only): Sign up at the NVIDIA Developer Portal
  2. API Key (cloud endpoint only): Generate an NVIDIA API key
  3. Local Deployment (optional): Serve a Nemotron Omni model and set base_url to 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.
NvidiaOmniLLMService.Settings
default:"None"
Runtime-configurable settings. See Settings below.
float
default:"120.0"
HTTP request timeout, in seconds.
The constructor also accepts the other arguments of OpenAILLMService.

Settings

Runtime-configurable settings passed via the settings 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:
The user’s text is only known once the transcript arrives, so read it from on_user_turn_message_added:

Cascaded Pipeline

With audio_input=False, put an STT service before the user aggregator:

Audio and Video in the Context

Audio and video files added to the context, with LLMContext.create_file_message() or create_audio_message(), are sent in the form Omni reads. Images work in either mode.

Methods

run_multimodal_inference

Runs a one-off request outside the conversation, for example to describe a video clip, and returns an 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 LLMRunFrame greeting works either way.
  • Reasoning content: Reasoning is emitted as LLMThought*Frame objects and is not sent to TTS, as for NvidiaLLMService.