Commit Graph
285 Commits
Author SHA1 Message Date
LauraGPT 1db8168392 chore(release): prepare 1.4.9
Signed-off-by: LauraGPT <[email protected]>
2026-08-30 14:29:58 +00:00
LauraGPT 25b1245e9c fix(realtime): preserve long segment tails
Signed-off-by: LauraGPT <[email protected]>
2026-08-30 13:37:44 +00:00
zhifu gao e5a1f4b115 Merge pull request #3554 from John6666cat/fix/paraformer-timestamp-padding
fix(paraformer): trim timestamp predictor padding per sample
2026-08-30 19:53:26 +08:00
zhifu gao 062b51d654 Merge pull request #3553 from John6666cat/fix/auto-model-pred-timestamp
fix(auto-model): preserve explicit timestamp and speaker text
2026-08-30 19:52:56 +08:00
John6666 b2fb22d1ad fix(paraformer): trim timestamp predictor padding per sample
Signed-off-by: John6666 <[email protected]>
2026-08-30 20:50:42 +09:00
LauraGPT fa64d48b2c fix(subtitles): preserve timestamp word boundaries
Signed-off-by: LauraGPT <[email protected]>
2026-08-30 11:45:25 +00:00
John6666 391fb2b513 fix(auto-model): preserve explicit timestamp and speaker text
Signed-off-by: John6666 <[email protected]>
2026-08-30 20:42:55 +09:00
LauraGPT b0cdfaa4a9 fix(subtitles): split overlong source cues
Signed-off-by: LauraGPT <[email protected]>
2026-08-30 09:33:49 +00:00
LauraGPT e80c9f6042 chore(release): prepare 1.4.8
Signed-off-by: LauraGPT <[email protected]>
2026-08-30 05:40:09 +00:00
LauraGPT d6ee34ea92 feat(moss): support long vLLM transcriptions
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 22:10:12 +00:00
LauraGPT 93a11f8ba6 docs: refresh repository roadmap and issue boundaries
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 19:48:59 +00:00
LauraGPT 14e154ad2a feat(moss): support vLLM diarized responses
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 19:19:25 +00:00
zhifu gao f0c5b4a149 fix(download): preserve snapshot errors (#3565)
Related to #3523.

Signed-off-by: LauraGPT <[email protected]>
2026-08-30 02:36:45 +08:00
zhifu gao 00dd1a54e0 chore(release): prepare 1.4.7 (#3564)
Signed-off-by: LauraGPT <[email protected]>
2026-08-30 02:17:26 +08:00
LauraGPT b64f1d617e docs(moss): sync AutoModel deployment matrices
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 17:58:31 +00:00
LauraGPT 4bccc3a091 perf(realtime): add opt-in decode profiling
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 17:23:30 +00:00
LauraGPT db959d3010 fix(cli): repack tiny-gap subtitle boundaries
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 17:15:20 +00:00
LauraGPT b8bd680578 test(release): track current llama.cpp runtime
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 16:48:59 +00:00
LauraGPT 9fc7b30cab feat(moss): add AutoModel runtime adapter
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 15:53:24 +00:00
LauraGPT 73410e6866 docs(ecosystem): add MOSS diarization deployment path
Signed-off-by: LauraGPT <[email protected]>
2026-08-29 14:10:07 +00:00
zhifu gao 159f67b154 chore(release): prepare 1.4.6 (#3549)
Publish the realtime keepalive, empty timestamp segment, and readable subtitle fixes with the verified llama.cpp v0.2.3 nine-platform runtime matrix.

Signed-off-by: LauraGPT <[email protected]>
2026-08-29 09:23:49 +08:00
LauraGPT 88a553e709 fix(realtime): avoid false keepalive timeouts under load
Signed-off-by: LauraGPT <[email protected]>
2026-08-28 14:26:58 +00:00
LauraGPT d5e0eeefd1 feat(cli): group readable subtitle cues
Signed-off-by: LauraGPT <[email protected]>
2026-08-28 14:17:41 +00:00
LauraGPTandAmir Fathi 0a90cb5ca1 fix: guard empty English timestamp segments
Avoid indexing empty sentence buffers when punctuation and timestamp entries outnumber split words, and add regression coverage for whitespace-only input.

Co-authored-by: Amir Fathi <[email protected]>
Signed-off-by: LauraGPT <[email protected]>
2026-08-28 13:41:27 +00:00
zhifu gao 67d6d88084 test(site): sync GPT-SoVITS public fixture (#3538)
Synchronize the bilingual current-public fixtures, evidence assertion, and valid English fixture with the GPT-SoVITS #2824 contract. Source commit was signed and carried a DCO trailer; focused and related contract tests passed.
2026-08-28 11:27:32 +08:00
zhifu gao 4df59cc153 chore(release): prepare 1.4.5 (#3534)
Publish the optional-torchaudio inference path, pin the verified nine-platform llama.cpp runtime matrix, and document the protected exact-main publication gate.

Signed-off-by: LauraGPT <[email protected]>
2026-08-28 00:59:31 +08:00
zhifu gaoandLauraGPT b454f9b7d6 docs: publish llama.cpp runtime v0.2.1 downloads (#3532)
Signed-off-by: LauraGPT <[email protected]>
Co-authored-by: LauraGPT <[email protected]>
2026-08-27 17:32:44 +08:00
li-lizhe ae5c4ccdec Remove hard torchaudio dependency for inference; add kaldi-native-fbank fbank backend (#3526)
* Remove hard torchaudio dependency for inference; add kaldi-native-fbank fbank backend

Make torchaudio an optional dependency for the inference path so FunASR
can run on Ascend NPU (aarch64) servers, where no matching torchaudio
wheel exists (Huawei's Ascend torch is version-decoupled from the PyTorch
upstream release line).

- Add funasr/utils/fbank.py: an fbank shim that delegates to
  torchaudio.compliance.kaldi when torchaudio is installed, otherwise
  falls back to kaldi-native-fbank (a torch-free C++ library with aarch64
  wheels). Options and frame-shift API are mapped to torchaudio semantics
  so outputs are equivalent.
- Switch funasr/frontends/wav_frontend.py, funasr/utils/speaker_utils.py
  and funasr/models/campplus/utils.py to the shim.
- Make the torchaudio import optional in funasr/utils/load_utils.py
  (resampler falls back to librosa).

No device-specific branching is introduced — a pure backend fallback that
also benefits CPU-only and other accelerator platforms.

Verified end-to-end on Ascend 910B (npu:0) with torchaudio absent:
paraformer-large loads and infers correctly, RTF ~0.016 (~60x realtime).

* Make torchaudio import optional in paraformer_v2, fun_asr_nano and dataset preprocessors

Follow-up to the inference-path change: make the remaining top-level
torchaudio imports optional so these modules import cleanly when
torchaudio is not installed (e.g. on Ascend NPU servers).

- funasr/models/paraformer_v2_community/model.py
- funasr/models/fun_asr_nano/tools/utils.py
- funasr/datasets/audio_datasets/preprocessor.py
- funasr/datasets/llm_datasets/preprocessor.py

Functions that still require torchaudio (forced_align, Resample) degrade
to a clear error only when called, rather than a hard import failure.

* Address review: declare knf extra, harden fbank fallback and torchaudio guards

Respond to maintainer review feedback.

- Declare kaldi-native-fbank as an optional 'knf' extra in setup.py; the
  fbank module now raises an actionable ImportError only when fbank() is
  actually called with neither torchaudio nor kaldi-native-fbank installed
  (previously it failed at import time with a bare ModuleNotFoundError).
- Harden the fbank fallback contract: handle the channel argument explicitly
  and reject torchaudio-only options (subtract_mean, min_duration, VTLN
  warping, non-default blackman_coeff) with NotImplementedError instead of
  silently dropping them via **kwargs.
- Add a shared guard funasr/utils/torchaudio_compat.py and use it for
  resampling, forced alignment and speed perturbation so a missing torchaudio
  fails loudly instead of returning a silently wrong result (empty alignment).
- Add regression tests (tests/test_torchaudio_optional.py) that import the
  affected modules with torchaudio absent.
2026-08-27 00:23:11 +08:00
zhifu gao b2915020b2 chore(release): prepare 1.4.4 (#3530)
Prepare the FunASR 1.4.4 hotfix release with realtime WebSocket concurrency batching, PyTorch AMP compatibility, and correct runtime-binding exceptions.

Signed-off-by: LauraGPT <[email protected]>
2026-08-26 23:36:15 +08:00
zhifu gao 55daa5a193 fix(realtime): batch concurrent websocket decoding (#3529)
Fix the realtime WebSocket concurrency regression by removing the process-wide session lock and batching compatible vLLM decode requests. Isolate per-session VAD runtime state while sharing encoder weights, keep batch failures contained, and document reproducible concurrency benchmarks.

Fixes #3528

Signed-off-by: LauraGPT <[email protected]>
2026-08-26 23:30:20 +08:00
谢翊凡 9413d7d768 fix: use torch.amp via compatibility shim (#3518)
Use the non-deprecated torch.amp APIs when available while preserving the torch.cuda.amp fallback and legacy autocast argument semantics on older PyTorch releases.
2026-08-26 20:10:53 +08:00
zhifu gao eedd4e22d1 chore(release): prepare 1.4.3 (#3519)
Release FunASR 1.4.3 with the optional Silero VAD adapter and scalable fixed-K diarization clustering.\n\nSigned-off-by: zhifu gao <[email protected]>
2026-08-21 11:39:49 +08:00
tandede 9dbf3e1c08 fix(diarization): scale clustering with known speaker counts 2026-08-20 01:15:55 +08:00
zhifu gaoandLauraGPT 16c31c0109 ops(growth): track SGLang Fun-ASR CI gate (#3510)
Signed-off-by: LauraGPT <[email protected]>
Co-authored-by: LauraGPT <[email protected]>
2026-08-17 09:44:30 +08:00
zhifu gaoandLauraGPT 4a58b27293 docs(growth): record four-repo homepage routing (#3509)
Signed-off-by: LauraGPT <[email protected]>
Co-authored-by: LauraGPT <[email protected]>
2026-08-17 09:28:47 +08:00
LauraGPT b4018dacae test: track current llama.cpp runtime contract
Signed-off-by: LauraGPT <[email protected]>
2026-08-17 00:46:25 +00:00
LauraGPT e8ea59a02c fix(vad): preserve Silero ONNX CPU inputs 2026-08-14 07:35:21 +00:00
LauraGPT 419674e544 fix(vad): keep Silero inputs on the model device 2026-08-14 07:32:23 +00:00
wuhongsheng 22920822a2 feat(vad): add Silero VAD adapter 2026-08-14 11:13:32 +08:00
LauraGPT 8c08e2636b chore: prepare FunASR 1.4.2 release
Signed-off-by: LauraGPT <[email protected]>
2026-08-11 18:23:20 +00:00
zhifu gao 62b784b2b9 docs: surface llama.cpp runtime v0.2.0 (#3484)
Signed-off-by: LauraGPT <[email protected]>
2026-08-11 14:17:59 +08:00
zhifu gao 680b1b3f10 docs(vllm): clarify official model paths (#3476)
Clarify official and native vLLM model paths. Closes #3475.
2026-08-05 16:23:20 +08:00
zhifu gaoandzhifu gao ea21a7e53a test(site): refresh ecosystem contract (#3474)
Signed-off-by: zhifu gao <[email protected]>
Co-authored-by: zhifu gao <[email protected]>
2026-08-05 15:09:27 +08:00
May 112b80fa0b fix(train): initialize DeepSpeed mode from resolved config (#3471)
Resolve distributed trainer settings once with top-level precedence and backwards-compatible train_conf fallbacks. Remove consumed mode keys before expanding trainer_conf, reject simultaneous FSDP and DeepSpeed, and cover the behavior with focused tests.
2026-08-05 11:35:53 +08:00
zhifu gao 6829ba7845 fix(auto-model): align split punctuation tokens (#3469)
Preserve subtitle segmentation when punctuation token boundaries split a timestamped ASR word.

Signed-off-by: LauraGPT <[email protected]>
2026-08-04 14:27:55 +08:00
LauraGPT 7a974018c2 chore: prepare FunASR 1.4.1 release
Signed-off-by: LauraGPT <[email protected]>
2026-08-04 02:23:14 +00:00
zhifu gao 187dc73f08 fix: route paraformer-en to the English HF model (#3466)
Route the Hugging Face paraformer-en alias to the official English checkpoint and keep the behavior covered by a regression test.
2026-08-04 10:06:33 +08:00
zhifu gaoandLauraGPT 6408aaa96d feat(runtime): add SenseVoice TensorRT deployment (#3463)
Co-authored-by: LauraGPT <[email protected]>
2026-08-04 02:22:57 +08:00
张思远 (ZhangSiYuan)andClaude a2a9f67cb4 test(nano): make LoRA tests deterministic (#3459)
The tests merged in #3456 were flaky: the state-dict round-trip test draws from
the unseeded global RNG, and the merged vs unmerged fp32 forwards can differ by
~4e-5 (different op orderings), above torch.allclose's default 1e-5 rtol. The
test failed on roughly one in three full-file runs.

- Seed the RNG per test so every test is reproducible.
- Compare merge/unmerge at a fp32-appropriate rtol=1e-3. A genuinely broken
  merge differs by the full adapter term (O(1-10)), not ~1e-5, so the tolerance
  is still discriminating (verified: a 'mark merged but don't fold' bug yields
  max_abs_diff ~12).
- Add test_mark_only_lora_as_trainable_keeps_adapters_trainable, which exercises
  the lora_only=true flow (mark_only_lora_as_trainable in train.py/train_ds.py)
  that the previous reply described but did not actually test.

Verified: 8/8 pass, stable across repeated runs; the full nano set is 35 passed.

Co-authored-by: Claude <[email protected]>
2026-08-03 15:24:08 +08:00
张思远 (ZhangSiYuan)andClaude 0738581f4b feat(nano): support LoRA finetuning of the Qwen3 LLM (#3456)
* feat(nano): support LoRA finetuning of the Qwen3 LLM

The FunASR-Nano model config already declares llm_conf.use_lora and
llm_conf.lora_conf (r/lora_alpha/lora_dropout/target_modules), but nothing
consumed them: use_lora was silently ignored and training fell back to the
full-parameter LLM path. Wire it up:

- When llm_conf.use_lora is true, replace the LLM target Linear layers
  (default q_proj/v_proj) with lora.Linear adapters, sharing the frozen base
  weight and adding trainable lora_A/lora_B. The adapter params are created in
  the base weight's dtype (bf16), so the LoRA path does not depend on autocast.
- Pairs with the existing lora_only / mark_only_lora_as_trainable flow in
  train.py / train_ds.py: lora_only=true freezes every non-LoRA parameter for
  pure-LoRA training; lora_only=false + unfrozen encoder/adaptor conf keeps
  them trainable while LoRA-tweaking only the LLM.
- Checkpoints save the full state dict (unchanged base + adapter params), so a
  LoRA run can be resumed or decoded with the same use_lora=true config; for a
  standalone deployment checkpoint, fold with W' = W + alpha/r * B @ A.
- Add lora_finetune.sh and document the recipe in finetune.md / finetune_zh.md.

Validated end-to-end with the real model: 56 adapters injected (28 Qwen3
layers x q_proj+v_proj), optimizer updates only the 112 LoRA params, and a
2-step smoke training run through funasr-train-ds completes and saves a
checkpoint whose lora keys are bf16 and match the base dtype.

Co-Authored-By: Claude <[email protected]>

* test(nano): add offline unit tests for LoRA injection

Drive FunASRNano._apply_lora_to_llm against a tiny fake LLM mirroring the
Qwen3 parameter layout (layers.<i>.self_attn.{q,k,v,o}_proj / mlp.{gate,up,down}_proj).
No model download needed.

Covers the points requested in review:
1. only configured target modules are replaced;
2. the initial output matches the original linear layers (lora_B init zero);
3. base weights stay frozen while lora_A/lora_B are trainable (llm_conf.freeze
   applied before injection, as in the real init path);
4. a non-zero adapter survives a state-dict save/load round trip and train/eval
   transitions (including the eval-merge / train-unmerge convention);
5. the no-matching-target configuration is an explicit no-op with a warning.

Verified honest: on upstream main (no _apply_lora_to_llm) all 7 fail with
AttributeError; with the fix 7/7 pass. Full nano set: 34 passed.

Co-Authored-By: Claude <[email protected]>

---------

Co-authored-by: Claude <[email protected]>
2026-08-03 14:28:02 +08:00