- README.md: add vLLM/dynamic VAD to What's new, add vLLM row to features
- README_zh.md: same updates in Chinese
- Fun-ASR-Nano README/README_zh: add built-in vLLM and WebSocket service links
Features:
- AutoModelVLLM: generic vLLM inference for all LLM-based ASR models
- serve_realtime_ws.py: streaming WebSocket ASR with VAD+SPK+hotwords
- DynamicStreamingVAD: dynamic silence threshold (default on for all models)
- Fun-ASR-Nano batch_size fix for VAD pipeline
- Comprehensive vLLM documentation (docs/vllm_guide.md)
- New funasr/utils/dynamic_vad.py: generic dynamic-threshold streaming VAD
- Supports both streaming (feed/finalize) and non-streaming (process) APIs
- Configurable silence_schedule for custom threshold curves
- Refactor serve_realtime_ws.py to use DynamicStreamingVAD
- Add documentation in vllm_guide.md appendix
Press hotkey → record → auto-transcribe → paste to cursor.
Works with funasr-server as backend. Supports macOS/Linux/Windows.
No secondary development needed - just pip install and run.
Enables AI tools to call FunASR speech recognition via Model Context Protocol.
Supports transcribe_audio tool with auto language detection and speaker diarization.
Drop-in replacement for /v1/audio/transcriptions endpoint.
Works with any agent framework (LangChain, AutoGen, etc).
Supports sensevoice, paraformer, and fun-asr-nano models.
Conformer, Transformer, and Branchformer models raise
NotImplementedError for batch decoding. Only Paraformer and
e_paraformer support batch_size>1 for inference. Revert the
non-Paraformer recipes back to batch_size=1.
The conformer, transformer, branchformer, and e_branchformer recipes
had inference_batch_size=1 which made GPU decoding extremely slow
(processing one utterance at a time). Changed to 32 to match the
paraformer recipe and utilize GPU parallelism during inference.
Streaming ASR with 720ms chunks using vLLM batch generation:
- Cumulative audio re-encoding per chunk (encoder+adaptor)
- All chunks batched into single vLLM generate() call
- 8-character rollback for fixed/unfixed region tracking
- repetition_penalty=1.3 for stable short-audio output
- Output stabilizes after ~3s of audio
Files:
- funasr/models/fun_asr_nano/inference_vllm_streaming.py
- examples/.../docs/vllm_streaming.md
Add high-throughput inference backend using vLLM for Fun-ASR-Nano model.
Key features:
- Automatic LLM weight extraction from model.pt to vLLM-compatible format
- Multi-GPU tensor parallelism support
- Batch inference with EmbedsPrompt API
- Character-level timestamps via CTC forced alignment
- Hotword and language customization
New files:
- funasr/models/fun_asr_nano/inference_vllm.py: Core vLLM engine
- examples/.../fun_asr_nano/demo_vllm.py: Demo script
- examples/.../fun_asr_nano/docs/vllm_inference.md: Usage documentation
- Qwen3-ASR: support spk_model with forced_aligner for speaker diarization
- Qwen3-ASR: fix list input handling (numpy/tensor to tuple format)
- Qwen3-ASR: output timestamp as [start_ms, end_ms] for pipeline compatibility
- Qwen3-ASR: graceful fallback when forced_aligner not configured
- Remove punc_model from Fun-ASR-Nano/SenseVoice/Qwen3-ASR SPK demos and tests
(these models output punctuation natively)
- Fix test scripts to handle both text/sentence keys in sentence_info
- auto_model: set return_time_stamps=True when spk_model present
Integrates ERes2NetV2 from 3D-Speaker into FunASR as a speaker
verification/diarization model. Can be used standalone or as spk_model
combined with VAD + ASR for speaker-attributed transcription.
Usage (standalone speaker embedding):
model = AutoModel(model="iic/speech_eres2netv2_sv_zh-cn_16k-common")
res = model.generate(input="audio.wav")
embedding = res[0]["spk_embedding"] # shape: [1, 192]
Usage (with ASR + speaker diarization):
model = AutoModel(
model="paraformer-zh",
vad_model="fsmn-vad",
spk_model="iic/speech_eres2netv2_sv_zh-cn_16k-common",
)
res = model.generate(input="audio.wav")
Tested end-to-end: ModelScope download + embedding extraction verified.
New files:
- funasr/models/eres2net/eres2netv2.py (network architecture)
- funasr/models/eres2net/model.py (FunASR wrapper with inference)
- tests_models/test_eres2netv2.py
- examples/industrial_data_pretraining/eres2netv2_sv/demo.py
- examples/industrial_data_pretraining/eres2netv2_sv/demo_sv.py
Add GLMASR wrapper class integrating GLM-ASR-Nano-2512 (1.5B) into
FunASR. Uses HuggingFace transformers AutoModel + AutoProcessor with
trust_remote_code. Supports 17 languages with dialect and low-volume
speech optimization.
Usage:
from funasr import AutoModel
model = AutoModel(model="zai-org/GLM-ASR-Nano-2512", hub="hf", device="cuda:0")
res = model.generate(input="audio.wav")
# ModelScope (Chinese users)
model = AutoModel(model="ZhipuAI/GLM-ASR-Nano-2512", hub="ms", device="cuda:0")
Tested end-to-end on CPU with Chinese and English audio.
New files:
- funasr/models/glm_asr/model.py
- funasr/models/glm_asr/__init__.py
- tests_models/test_glm_asr.py
- examples/industrial_data_pretraining/glm_asr/demo.py
- examples/industrial_data_pretraining/glm_asr/demo_ms.py
Note: requires transformers>=5.0.0 (pip install git+https://github.com/huggingface/transformers)
- Add Qwen3-ASR (0.6B/1.7B) to model zoo table in README.md and
README_zh.md with links to HuggingFace and ModelScope
- Add news entry for Qwen3-ASR release
- Add example scripts:
- examples/industrial_data_pretraining/qwen3_asr/demo.py (HuggingFace)
- examples/industrial_data_pretraining/qwen3_asr/demo_ms.py (ModelScope)
- Convert dict-format timestamps to list-format for downstream compatibility
- Fix spk_embedding to concatenate all chunk embeddings from sv_chunk
- Handle timestamps/timestamp key difference in vad_segment mode
- Auto fallback to vad_segment mode when punc_model is missing
- Add demo_spk.py example and test script
- Update README/README_zh with news and usage demo
* docs: Fix syntax error in real-time ASR example (Issue #2720)
Added documentation to fix syntax error in real-time speech recognition example.
* docs: Add implementation guide for syntax error fix (Issue #2720)
Added a section detailing files needing updates for the total_chunk_num calculation syntax error, including examples and testing instructions.
* fix: Correct total_chunk_num syntax error in paraformer_streaming/demo.py
* Correct total_chunk_num calculation in demo.py
Fix calculation of total_chunk_num for speech processing.