nemo_curator.models.asr.qwen_omni

View as Markdown

Qwen3-Omni ASR adapter using in-process vLLM.

Module Contents

Classes

NameDescription
QwenOmniASRAdapterQwen3-Omni in-process vLLM adapter (thinker-only path).

Functions

NameDescription
_default_sampling_kwargsReturn Qwen-Omni defaults forwarded to vLLM SamplingParams.
_default_vllm_kwargsReturn Qwen-Omni defaults forwarded to Curator’s shared vLLM helper.
_require_qwen_omni_stackRaise a single ImportError listing missing Qwen-Omni dependencies.

Data

_MIN_QWEN_AUDIO_SAMPLES

_PROMPT_CONTENT_ORDERS

_QWEN3_OMNI_MODEL_ID

_QWEN_OMNI_SAMPLE_RATE

API

class nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter(
model_id: str = _QWEN3_OMNI_MODEL_ID,
revision: str | None = None,
prompt_text: str = 'Transcribe the audio.',
prompt_file: str | None = None,
en_prompt_text: str | None = None,
en_prompt_file: str | None = None,
system_prompt: str | None = None,
system_prompt_file: str | None = None,
prompt_content_order: str = 'text_audio',
max_output_tokens: int = 256,
vllm_kwargs: dict[str, typing.Any] = _default_vllm_kwargs(),
sampling_kwargs: dict[str, typing.Any] = _default_sampling_kwargs()
)
Dataclass

Qwen3-Omni in-process vLLM adapter (thinker-only path).

ASRStage supplies model_id plus this adapter’s explicitly configured adapter_kwargs. Hugging Face revision pinning therefore remains a Qwen adapter capability rather than part of the shared ASR stage contract.

Notable Args: prompt_text / *_file: User prompt; {language} is interpolated per-item when the stage supplies a language. *_file variants load text from a UTF-8 file at __post_init__ time. en_prompt_text / en_prompt_file: override used when language is "English". system_prompt / *_file: optional system message. prompt_content_order: order of text and audio blocks in each user message. audio_text matches Qwen’s official ASR cookbook. max_output_tokens: maximum transcription tokens. Kept separate so the adapter remains the only source of SamplingParams.max_tokens. vllm_kwargs: engine settings forwarded to Curator’s shared create_vllm_llm helper. model and revision have dedicated adapter fields, while tensor_parallel_size comes from the stage’s GPU allocation; none can be overridden here. sampling_kwargs: settings forwarded to vLLM SamplingParams. max_tokens is adapter-owned and cannot be overridden.

en_prompt_file
str | None = None
en_prompt_text
str | None = None
max_output_tokens
int = 256
model_id
str = _QWEN3_OMNI_MODEL_ID
prompt_content_order
str = 'text_audio'
prompt_file
str | None = None
prompt_text
str = 'Transcribe the audio.'
revision
str | None = None
sampling_kwargs
dict[str, Any] = field(default_factory=_default_sampling_kwargs)
system_prompt
str | None = None
system_prompt_file
str | None = None
vllm_kwargs
dict[str, Any] = field(default_factory=_default_vllm_kwargs)
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter.__post_init__() -> None
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._adapter_owned_vllm_kwargs(
num_gpus: int | None
) -> dict[str, typing.Any]

Return vLLM arguments controlled by adapter fields and the allocated GPU count.

nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._build_audio_prompt_messages(
waveform: numpy.ndarray,
language: str | None = None
) -> list[dict[str, typing.Any]]
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._build_messages(
waveform: numpy.ndarray,
language: str | None = None
) -> list[dict[str, typing.Any]]
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._first_output_text(
output: typing.Any
) -> str
staticmethod
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._generate(
prompts: list[typing.Any]
) -> list[typing.Any]
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._get_prompt_text(
language: str | None
) -> str
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._infer_batch(
inputs: list[dict[str, typing.Any]],
indices: list[int],
n: int
) -> list[str]

Run one vLLM batch and scatter its texts back to input order.

indices[k] is the position in the length-n batch that inputs[k] came from.

nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._load_text(
text: str | None,
file_path: str | None
) -> str | None
staticmethod
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._pack_vllm_inputs(
messages: list[dict[str, typing.Any]]
) -> dict[str, typing.Any]

Render chat messages into a vLLM request dict.

nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._prepare_batch(
waveforms: list[numpy.ndarray],
languages: list[str | None] | None = None
) -> list[dict[str, typing.Any] | None]
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._prepare_single(
waveform: numpy.ndarray,
language: str | None = None
) -> dict[str, typing.Any] | None
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._resolve_prompt(
template: str,
language: str | None
) -> str
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter._run_inference(
waveforms: list[numpy.ndarray],
languages: list[str | None] | None = None
) -> tuple[list[str], set[int]]

Run batched inference on in-memory waveforms.

nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter.download_weights_on_node() -> None

Cache the model snapshot on local disk without touching the GPU.

nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter.load_model(
num_gpus: int
) -> None
nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter.transcribe_batch(
items: list[dict[str, typing.Any]]

Run batched inference over per-task dicts.

Skipped items (empty / unprocessable waveforms) round-trip as ASRResult(text="", skipped=True) to preserve ordering.

nemo_curator.models.asr.qwen_omni.QwenOmniASRAdapter.unload_model() -> None
nemo_curator.models.asr.qwen_omni._default_sampling_kwargs() -> dict[str, typing.Any]

Return Qwen-Omni defaults forwarded to vLLM SamplingParams.

nemo_curator.models.asr.qwen_omni._default_vllm_kwargs() -> dict[str, typing.Any]

Return Qwen-Omni defaults forwarded to Curator’s shared vLLM helper.

nemo_curator.models.asr.qwen_omni._require_qwen_omni_stack(
context: str
) -> None

Raise a single ImportError listing missing Qwen-Omni dependencies.

nemo_curator.models.asr.qwen_omni._MIN_QWEN_AUDIO_SAMPLES = 1600
nemo_curator.models.asr.qwen_omni._PROMPT_CONTENT_ORDERS = frozenset({'text_audio', 'audio_text'})
nemo_curator.models.asr.qwen_omni._QWEN3_OMNI_MODEL_ID = 'Qwen/Qwen3-Omni-30B-A3B-Instruct'
nemo_curator.models.asr.qwen_omni._QWEN_OMNI_SAMPLE_RATE = 16000