A native audio model built for real-world speech recognition, audio understanding, reasoning, and end-to-end spoken interaction.
π€ Hugging Face Β· Flash Β· π€ Hugging Face Β· Tiny Β· π€ ModelScope Β· Flash Β· π Cookbook Β· π» Examples
Ming-3.0-audio.mp4
- Ming-3.0-audio-flash β A 126B-parameter Mixture-of-Experts model with 6.5B activated parameters. This is the model used by the examples and benchmark results below.
- Ming-3.0-audio-tiny β A compact 9.3B-parameter Mixture-of-Experts model with 2.7B activated parameters. See its model card for checkpoint details and usage guidance.
- ποΈ Complex speech recognition β Recognizes Chinese and English speech across dialects, accents, noisy environments, and multi-speaker meetings.
- β±οΈ Long-audio understanding β Comprehends and analyzes long-form recordings.
- π§ Multi-dimensional perception β Understands fine-grained speech, non-speech sounds, acoustic scenes, and music.
- π‘ Audio reasoning β Analyzes and reasons directly over audio content.
- π£οΈ Audio interaction β Supports end-to-end spoken dialogue with optional synthesized speech output.
Ming-3.0-audio-flash closes the loop from hearing the sound, to understanding the information, to getting the task done.
All scores are reported as percentages. β means higher is better, while β means lower is better. Ming-3.0-audio-flash is evaluated in non-thinking mode. Bold indicates the best result, underlined indicates the second-best result, and an asterisk (*) indicates results obtained in our own evaluation.
Note
Results for comparison models are reproduced under our evaluation setup and may differ from their official reports due to differences in prompts, decoding settings, model versions, and evaluation pipelines.
| vLLM-Omni | SGLang | Transformers | |
|---|---|---|---|
| Best for | Serving and spoken interaction | High-throughput text serving | Local evaluation and research |
| Input | Audio + text instruction | Audio + text instruction | Audio + text instruction |
| Output | Text, or text + speech | Text | Text, or text + speech |
| Interface | OpenAI-compatible API | OpenAI-compatible API | Hugging Face AutoClass |
| Dependencies | requirements-vllm-omni.txt |
requirements-sglang.txt |
requirements-transformers.txt |
pip install -U huggingface_hub
hf download inclusionAI/Ming-3.0-audio-flash \
--local-dir inclusionAI/Ming-3.0-audio-flash
export MODEL_PATH="$PWD/inclusionAI/Ming-3.0-audio-flash"Download from ModelScope
pip install -U modelscope
modelscope download --model inclusionAI/Ming-3.0-audio-flash \
--local_dir inclusionAI/Ming-3.0-audio-flash \
--revision master
export MODEL_PATH="$PWD/inclusionAI/Ming-3.0-audio-flash"The model directory contains the tokenizer, processor, model implementation, checkpoint shards, and Talker assets. Large model files are distributed through Hugging Face and ModelScope rather than this GitHub repository.
Install the Ming-3.0-audio-flash fixes branch of inclusionAI/vllm-omni:
python3 -m venv .venv-vllm-omni
source .venv-vllm-omni/bin/activate
pip install -r requirements-vllm-omni.txtThis branch contains the bailing_moe_v3_audio pipeline and the current Ming Talker request interface. It supports IP and registered voice IDs through Chat Completions audio.voice, and voice cloning through ref_audio plus prompt_text.
Start text-output serving for audio understanding and reasoning:
MING_OUTPUT_MODE=text ./scripts/serve_vllm_omni.sh "$MODEL_PATH"Use the ASR profile when reproducing recognition evaluations with 10-gram blocking support:
MING_OUTPUT_MODE=asr ./scripts/serve_vllm_omni.sh "$MODEL_PATH"Or enable both text and synthesized speech output:
MING_OUTPUT_MODE=audio ./scripts/serve_vllm_omni.sh "$MODEL_PATH"For Ming-3.0-audio-tiny, point MODEL_PATH to the Tiny checkpoint and select the Tiny deployment profiles:
export MODEL_PATH="$PWD/inclusionAI/Ming-3.0-audio-tiny"
MING_MODEL_VARIANT=tiny MING_OUTPUT_MODE=text ./scripts/serve_vllm_omni.sh "$MODEL_PATH"scripts/serve_vllm_omni.sh also detects Tiny automatically when the model directory name contains tiny. Set MING_MODEL_VARIANT explicitly when using a custom directory name.
Note
The default Flash profiles use tensor parallelism across four GPUs. They keep the default 128K context length on 80 GB H800 GPUs with max_num_seqs: 1, since vLLM reserves KV-cache memory from the configured context length at startup. In the full-audio profile, the Talker reuses GPU 3 with a separate memory budget. The Tiny full-audio profile uses one GPU per stage. Adjust devices, context and sequence limits, and gpu_memory_utilization in deploy/*.yaml for your hardware.
Tip
The four-GPU profiles may OOM on particularly long audio inputs. When that happens, you can switch to the eight-GPU fallback profiles β deploy/ming3_audio_flash_asr_8gpu.yaml, deploy/ming3_audio_flash_thinker_only_8gpu.yaml, and deploy/ming3_audio_flash_with_talker_8gpu.yaml β which set tensor_parallel_size: 8 across GPUs 0β7 (and the Talker reuses GPU 7).
Install the audio branch of inclusionAI/sglang_ling_v3 in a separate environment:
python3 -m venv .venv-sglang
source .venv-sglang/bin/activate
pip install -r requirements-sglang.txtWhen the sglang_ling_v3 source checkout is available next to this repository, install that exact checkout in editable mode instead:
pip install -e ../sglang_ling_v3/pythonStart Ming-3.0-audio-flash with the validated four-GPU profile:
./scripts/serve_sglang.sh "$MODEL_PATH"For Ming-3.0-audio-tiny, use its checkpoint and the single-GPU profile:
export MODEL_PATH="$PWD/inclusionAI/Ming-3.0-audio-tiny"
MING_MODEL_VARIANT=tiny CUDA_VISIBLE_DEVICES=0 \
./scripts/serve_sglang.sh "$MODEL_PATH"The SGLang example currently covers audio input with text output. Use vLLM-Omni or direct Transformers inference when synthesized speech output is required.
pip install -r requirements-client.txtSpeech recognition
python examples/vllm_omni_audio_chat.py examples/audio/introduce_ant_group.wav \
--task asr \
--prompt 'Please recognize the language of this speech and transcribe it, placing a `\t` between the identified language and the transcribe.' \
--max-tokens 256 \
--no-repeat-ngram-size 10Spoken response
python examples/vllm_omni_audio_chat.py examples/audio/introduce_ant_group.wav \
--audio-response \
--output-audio outputs/answer.wavBy default, vLLM-Omni uses the built-in IP voice η΅ε°ζ. Pass --voice to select another IP voice from the complete built-in voice list, or a registered voice ID returned by GET /v1/audio/voices. The clients send this as Chat Completions audio.voice: {"id": "..."}. Voice selection cannot be combined with --ref-audio; omitting it uses the server default.
The model directory also provides two preset reference voices, η΅ζ₯· and US_James, under voice_presets/voice_audio/. Their matching transcripts are recorded in voice_presets/voice_prompts.json. Use these presets, or another reference WAV with its exact transcript, through --ref-audio and --prompt-text:
python examples/vllm_omni_audio_chat.py examples/audio/introduce_ant_group.wav \
--audio-response \
--ref-audio path/to/reference.wav \
--prompt-text "<exact transcript of the reference audio>" \
--output-audio outputs/cloned_answer.wavStreaming spoken response with latency metrics
python examples/vllm_omni_audio_streaming.py examples/audio/introduce_ant_group.wav \
--output-audio outputs/stream_answer.wavThe clients use http://localhost:8091/v1 by default and automatically select the first model returned by /v1/models. Override the connection with --base-url, --api-key, and --model, or the corresponding MING_* environment variables.
The SGLang client sends raw base64 audio using the branch's input_audio message format. Run ASR against the default endpoint at http://localhost:8008/v1:
python examples/sglang_audio_chat.py examples/audio/introduce_ant_group.wav \
--task asr \
--max-tokens 256For spoken question answering, use the validated default system prompt:
python examples/sglang_audio_chat.py examples/audio/introduce_ant_group.wavOverride the endpoint or served model with --base-url and --model, or with MING_SGLANG_BASE_URL and MING_SGLANG_MODEL.
Use an isolated environment for direct inference:
python3 -m venv .venv-transformers
source .venv-transformers/bin/activate
pip install -r requirements-transformers.txtSpeech recognition
python examples/transformers_audio.py examples/audio/introduce_ant_group.wav \
--model "$MODEL_PATH" \
--task asr \
--prompt 'Please recognize the language of this speech and transcribe it, placing a `\t` between the identified language and the transcribe.' \
--max-new-tokens 256 \
--no-repeat-ngram-size 10Spoken question answering
python examples/transformers_audio.py examples/audio/introduce_ant_group.wav \
--model "$MODEL_PATH"Thinker + native Talker
Use the Talker implementation bundled with the model to generate speech without starting a vLLM-Omni server:
python examples/transformers_thinker_talker.py \
--model "$MODEL_PATH" \
--audio examples/audio/introduce_ant_group.wav \
--voice US_Stella \
--thinker-max-memory 72GiB \
--output outputs/answer.wavReference-audio voice cloning is also supported:
python examples/transformers_thinker_talker.py \
--model "$MODEL_PATH" \
--audio examples/audio/introduce_ant_group.wav \
--ref-audio path/to/reference.wav \
--prompt-text "<exact transcript of the reference audio>" \
--output outputs/cloned_answer.wavImportant
Direct inference loads the model's registered AutoClasses with trust_remote_code=True. Review downloaded model code before enabling remote code in your environment. Native speech output additionally imports the Talker implementation bundled in the model directory.
- Explore task-specific prompts in
examples/README.md. - Run the interactive walkthrough in
cookbook.ipynb. - Inspect the bundled sample and metadata in
examples/audio/.
Ming-3.0-audio-flash/
βββ cookbook.ipynb # Interactive walkthrough
βββ deploy/ # vLLM-Omni deployment profiles
βββ examples/
β βββ audio/ # Sample audio and metadata
β βββ sglang_audio_chat.py # SGLang text-output client
β βββ vllm_omni_audio_chat.py # Text and non-streaming speech client
β βββ vllm_omni_audio_streaming.py # Streaming speech and latency metrics
β βββ transformers_thinker_talker.py # Direct Thinker-to-Talker inference
β βββ transformers_audio.py # Direct Transformers inference
βββ scripts/
β βββ serve_vllm_omni.sh # vLLM-Omni launcher
β βββ serve_sglang.sh # SGLang launcher
βββ requirements-client.txt # Lightweight API client dependencies
βββ requirements-sglang.txt # Compatible SGLang audio branch
βββ requirements-vllm-omni.txt # Compatible vLLM-Omni server branch
βββ requirements-transformers.txt # Direct inference dependencies
The vLLM-Omni endpoint accepts audio as a base64 data URL:
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Describe this audio."},
{
"type": "audio_url",
"audio_url": {"url": "data:audio/wav;base64,..."},
},
],
}
]Use modalities=["text"] for text output or modalities=["text", "audio"] for text and synthesized speech.
The SGLang endpoint uses raw base64 audio in an input_audio content item:
messages = [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {"data": audio_base64, "format": "wav"},
},
{"type": "text", "text": "Describe this audio."},
],
}
]Chat Completions speech output selects an IP or registered voice through audio.voice:
audio = {
"format": "wav", # The streaming client uses vLLM-Omni's raw PCM format.
"voice": {"id": "η΅ε°ζ"},
}The server checks its IP voice list before looking up registered reference voices.
Omit voice to use the default built-in IP voice, η΅ε°ζ.
Reference-audio voice cloning uses raw base64 audio and its transcript:
additional_information = {
"voice_mode": "reference",
"ref_audio": reference_audio_base64,
"prompt_text": reference_audio_transcript,
}This project is released under the MIT License. See LEGAL.md for the legal disclaimer.



