From 7b74892b4d3bf0480c7b50ef752450fb1b4ebef6 Mon Sep 17 00:00:00 2001
From: LauraGPT <18321252+LauraGPT@users.noreply.github.com>
Date: Fri, 18 Sep 2026 06:23:31 +0000
Subject: [PATCH 1/2] Publish FunASR 1.4.16 site guide
Signed-off-by: LauraGPT <18321252+LauraGPT@users.noreply.github.com>
---
.../product-site/content/legacy-manifest.json | 8 +--
web-pages/product-site/data/blog.json | 13 +++++
...unasr-v1-4-16-submodel-device-release.html | 51 ++++++++++++++++++
web-pages/product-site/legacy/blog/index.html | 1 +
...unasr-v1-4-16-submodel-device-release.html | 51 ++++++++++++++++++
.../product-site/legacy/en/blog/index.html | 1 +
web-pages/product-site/legacy/sitemap.xml | 2 +
web-pages/product-site/tests/test_legacy.py | 53 +++++++++++++++++++
8 files changed, 177 insertions(+), 3 deletions(-)
create mode 100644 web-pages/product-site/legacy/blog/funasr-v1-4-16-submodel-device-release.html
create mode 100644 web-pages/product-site/legacy/en/blog/funasr-v1-4-16-submodel-device-release.html
diff --git a/web-pages/product-site/content/legacy-manifest.json b/web-pages/product-site/content/legacy-manifest.json
index d15f8a36c..c89cc092c 100644
--- a/web-pages/product-site/content/legacy-manifest.json
+++ b/web-pages/product-site/content/legacy-manifest.json
@@ -24,6 +24,7 @@
"blog/funasr-v1-3-28-realtime-websocket-subtitles.html": "46a8d4c310e7f76da632d558d057484f48b345d9616873e1416fc68fcb9e9633",
"blog/funasr-v1-4-0-pypi-release.html": "b5d05ac559435837caf2c3ea2531b581541d283bbecd7c4f3c1d367a2fe81c38",
"blog/funasr-v1-4-14-portable-source-release.html": "d3724b2f5236ff30b1a409d2eed0b488bca75d6b448fca029c848c6dc605987c",
+ "blog/funasr-v1-4-16-submodel-device-release.html": "0d7d4f899246cd1f751ccb97bbbf6953cb60718ca1db03920996754731a4adad",
"blog/funasr-v1-4-3-pypi-release.html": "6bd73c114653a12e0f8078c4cc7cc89f44cff53f106e12c79b7e6b78b36d922f",
"blog/funasr-v1-4-5-pypi-llama-cpp-release.html": "14ab5d23f09f61f6bbeb924796e3be9ab53ce87cac5c968322f625c789ae3a8b",
"blog/funasr-vs-faster-whisper-chinese.html": "bfe9bb8017be80c7e7f4587726f43f6064f1dc4c65e39788f836fdfb0c9789f7",
@@ -31,7 +32,7 @@
"blog/funclip-v2-1-0-video-clipping-release.html": "88f6c44e5332d1746c4db0fc97d755ef82f12e46d8f1c1c0ad9351152ff9dfc1",
"blog/funclip-v2-2-0-moss-speaker-clipping.html": "db4ee351aefc1cb6997ed36b624cbc7e2527d81665635bd6169550d782a2e145",
"blog/generate-subtitles-srt-vtt-from-audio-video.html": "0f38a121c9f8f1c9f9fb3de5276ba422cb899094b2077085814e577c636ffb48",
- "blog/index.html": "bd04951ed11b340a6786c7b38a25beace6554f7269274c2d25d4228ebaaf2a0e",
+ "blog/index.html": "5be19287f692f4278d80174b8f0ebae765e65d1174341d3a0a7c4347ae4d0b58",
"blog/japanese-speech-recognition.html": "399f5ce84e68ac00854bdf70b52b1cde6795efca7c800fd6492035a37a7c1b68",
"blog/lightweight-speech-recognition-cpu.html": "d6270066222ed5baef0df108e6a4155f4a87bb5482169f23f218794d371f3281",
"blog/meeting-transcript-acceptance.html": "8173b3049ca707bdac46013748bc0ca7d9576ebf6f7ff6db6c940a833b12e4a9",
@@ -66,6 +67,7 @@
"en/blog/funasr-v1-3-28-realtime-websocket-subtitles.html": "233534cb4306387f1a9a695886a5f515679dff591d04b90827f41a668d7f7ada",
"en/blog/funasr-v1-4-0-pypi-release.html": "76fce7c27ad057d160236541369fa6c6d9f143ad03754fd3269ff2c4e32908f9",
"en/blog/funasr-v1-4-14-portable-source-release.html": "95e97ea540a017fe5e2fcd14cf39c73244469ab6c81dfb42f22ee0631d8e3bf2",
+ "en/blog/funasr-v1-4-16-submodel-device-release.html": "13fdb875229adff4d22c27ab05b2351baf46bec307c4dac4521b59cd26bbaa79",
"en/blog/funasr-v1-4-3-pypi-release.html": "b9007b4e74de38a4a7a38ef6f3659336c16c2159d454f290e7e702a4d59cc4d5",
"en/blog/funasr-v1-4-5-pypi-llama-cpp-release.html": "b5944d0d3dc7f845d6e8de155958ded3f0196571a65c9e11b5b01a7f9ea7ed6b",
"en/blog/funasr-vs-faster-whisper-chinese.html": "abf31d3827dfba9b31ccd4e76229de9e4bfff00ab8bcee33bd718c88249630f4",
@@ -73,7 +75,7 @@
"en/blog/funclip-v2-1-0-video-clipping-release.html": "229baf59adf2c3290541d9b3c8a6243992406ba84b712714e9d14599205cb1d4",
"en/blog/funclip-v2-2-0-moss-speaker-clipping.html": "115f7dd0963754ed75c6022bb8ceb8ddf83b0391b1ba215af32358b2568c240a",
"en/blog/generate-subtitles-srt-vtt-from-audio-video.html": "937777559f43f5722994cf32da8f13196eae3a04d1488c1948d66291ee904d32",
- "en/blog/index.html": "fe18072fb67da6b9cc274fa26b8dabc5854c426a9a38210bb2317219e8123900",
+ "en/blog/index.html": "fa1cc01da835325a0d43e9715f227fa38d9ea1caeba0c9e1f17b989eb65a9684",
"en/blog/japanese-speech-recognition.html": "c476adcc2be1ed7c19e2345cc91b8ee6a0e04efd794b9b6476dd5d9b3a2c8b04",
"en/blog/lightweight-speech-recognition-cpu.html": "0e02c0e0853b12613d32c250f593c05c2052f18231207b63ee01d6e6600a86f7",
"en/blog/meeting-transcript-acceptance.html": "ffc6eb2329267515bb367f21bb2d1c0523ff90d3f02b2e734ae41f78b02d0515",
@@ -120,7 +122,7 @@
"models.html": "fd4179a53735b8e034a1ee8e79fb78c6c66b6a6205c7124fcef7f4e0aaf92437",
"quickstart.html": "a543bf07c2cfc9a69ef3831f15c9e9d3e571a826a73cf7e4bdc8e9eb7b910254",
"robots.txt": "1305b0f680b3e9f73b01301dc474423230dffab85731a379a694f30c73c07f2d",
- "sitemap.xml": "1fc88be1d337d7fac6acf0dd61e6b3416f6808f5d6e8fc0006fb9b15cba6e039",
+ "sitemap.xml": "c855b97c31f76e5de5cc78c2450a180c230b4f34334927ac5dcc754f4b07e18a",
"static/liveplayer/liveplayer-component.min.js": "ea10fda35574cc3a77a3e7187095467d1a409009a2d39690051d33d0e7055d30",
"static/liveplayer/liveplayer-lib.min.js": "ad67b4e1188c586ec218674a6db9968daf71ed4fbc262258f061c1f931d54250",
"static/offline/index.html": "868781c621ddabe5d3f088d6b739e0c08e6cdc150587af6515cc323852018e62",
diff --git a/web-pages/product-site/data/blog.json b/web-pages/product-site/data/blog.json
index a504812ed..270e0f26f 100644
--- a/web-pages/product-site/data/blog.json
+++ b/web-pages/product-site/data/blog.json
@@ -204,6 +204,19 @@
"summary": ""
}
},
+ {
+ "slug": "funasr-v1-4-16-submodel-device-release",
+ "category": "releases",
+ "reviewed": true,
+ "zh": {
+ "title": "v1.4.16:混合设备子模型修复",
+ "summary": "保持 VAD、标点和说话人子模型的显式设备配置,并补齐原生 Transformers 指南。"
+ },
+ "en": {
+ "title": "v1.4.16: Mixed-device submodel fix",
+ "summary": "Preserve explicit VAD, punctuation, and speaker placement, with tested native Transformers guides."
+ }
+ },
{
"slug": "funasr-v1-4-3-pypi-release",
"category": "releases",
diff --git a/web-pages/product-site/legacy/blog/funasr-v1-4-16-submodel-device-release.html b/web-pages/product-site/legacy/blog/funasr-v1-4-16-submodel-device-release.html
new file mode 100644
index 000000000..f691f7698
--- /dev/null
+++ b/web-pages/product-site/legacy/blog/funasr-v1-4-16-submodel-device-release.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+ FunASR v1.4.16:混合设备子模型与原生 Transformers 指南 | FunASR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
FunASR v1.4.16:混合设备子模型与原生 Transformers 指南
+
2026-09-18 · FunASR 正式发布
+
+
v1.4.16 让显式配置的 VAD、标点和说话人 submodel 在重复推理与运行时覆盖之间保持各自设备,并补齐标点行为和原生 Transformers 接入文档。
+
安装
+
python -m pip install -U "funasr==1.4.16"
+
公开包位于 PyPI 1.4.16 。wheel SHA-256 为 f95943f6a8111349a1b08907363b048a49e9cb9caa1e3afd8c92970d08bf450d,sdist SHA-256 为 1e2f8e3887fbc4b164cce40f73bf1324907da6ab59d1e8bf2add827f534c69e7。
+
这次修复什么
+
vad_kwargs、punc_kwargs 与 spk_kwargs 的显式设备放置在重复调用中保持稳定。运行时 device 覆盖不再改写已加载模型或调用方持有的子模型配置。 说话人推理使用说话人模型自身配置;中英文指南说明何时需要 CT-Transformer 标点后处理,以及如何验证原生 Transformers 路径。
+
设备回归由 CPU 权重替身与模拟加速器可用性验证;它覆盖配置传播、回退和重复调用,但不是 CUDA、MPS 或 NPU 性能认证。
+
签名源码与可校验资产
+
签名标签 v1.4.16 精确指向 904cd18681b8083de5e1039bd0ecebc4f49ede60。Release 恰有 12 个资产:两个 Python 制品、九个来自 runtime-llamacpp-v0.2.6 的独立版本运行时,以及一份清单。
+
Python:funasr-1.4.16-py3-none-any.whl、funasr-1.4.16.tar.gz Linux:funasr-llamacpp-linux-arm64.tar.gz、funasr-llamacpp-linux-x64.tar.gz、funasr-llamacpp-linux-x64-avx2.tar.gz、funasr-llamacpp-linux-x64-vulkan.tar.gz macOS:funasr-llamacpp-macos-arm64.tar.gz Windows:funasr-llamacpp-windows-x64.zip、funasr-llamacpp-windows-x64-avx2.zip、funasr-llamacpp-windows-x64-cuda.zip、funasr-llamacpp-windows-x64-vulkan.zip 校验:SHA256SUMS
+
九个原生运行时未携带本次 Python 修复;请先用清单校验,再在目标硬件和真实音频上验收。
+
+
+
+
+
diff --git a/web-pages/product-site/legacy/blog/index.html b/web-pages/product-site/legacy/blog/index.html
index c2f5acba1..267f89eaa 100644
--- a/web-pages/product-site/legacy/blog/index.html
+++ b/web-pages/product-site/legacy/blog/index.html
@@ -49,6 +49,7 @@
+
diff --git a/web-pages/product-site/legacy/en/blog/funasr-v1-4-16-submodel-device-release.html b/web-pages/product-site/legacy/en/blog/funasr-v1-4-16-submodel-device-release.html
new file mode 100644
index 000000000..ac78087da
--- /dev/null
+++ b/web-pages/product-site/legacy/en/blog/funasr-v1-4-16-submodel-device-release.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+ FunASR v1.4.16: Mixed-device Submodels and Native Transformers Guides | FunASR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
FunASR v1.4.16: Mixed-device Submodels and Native Transformers Guides
+
September 18, 2026 · Stable FunASR release
+
+
v1.4.16 keeps explicitly configured VAD, punctuation, and speaker submodels on their own devices across repeated inference and runtime overrides, while adding clearer punctuation and native Transformers guidance.
+
Install
+
python -m pip install -U "funasr==1.4.16"
+
The public distributions are on PyPI 1.4.16 . The wheel SHA-256 is f95943f6a8111349a1b08907363b048a49e9cb9caa1e3afd8c92970d08bf450d; the sdist SHA-256 is 1e2f8e3887fbc4b164cce40f73bf1324907da6ab59d1e8bf2add827f534c69e7.
+
What changed
+
Explicit device placement in vad_kwargs, punc_kwargs, and spk_kwargs stays stable across repeated calls. Runtime device overrides no longer mutate loaded models or caller-owned submodel configuration. Speaker inference uses its own model configuration; English and Chinese guides explain when CT-Transformer punctuation postprocessing is needed and how to validate native Transformers paths.
+
Device regressions use CPU-resident stand-in weights and mocked accelerator availability. They cover propagation, fallback, and repeated calls; they are not CUDA, MPS, or NPU performance certification.
+
Signed source and verifiable assets
+
The signed v1.4.16 tag resolves exactly to 904cd18681b8083de5e1039bd0ecebc4f49ede60. The Release has exactly 12 assets: two Python distributions, nine independently versioned runtimes from runtime-llamacpp-v0.2.6 , and one manifest.
+
Python: funasr-1.4.16-py3-none-any.whl, funasr-1.4.16.tar.gz Linux: funasr-llamacpp-linux-arm64.tar.gz, funasr-llamacpp-linux-x64.tar.gz, funasr-llamacpp-linux-x64-avx2.tar.gz, funasr-llamacpp-linux-x64-vulkan.tar.gz macOS: funasr-llamacpp-macos-arm64.tar.gz Windows: funasr-llamacpp-windows-x64.zip, funasr-llamacpp-windows-x64-avx2.zip, funasr-llamacpp-windows-x64-cuda.zip, funasr-llamacpp-windows-x64-vulkan.zip Verification: SHA256SUMS
+
The nine native runtimes do not contain this Python fix. Verify the manifest first, then validate on target hardware with representative audio.
+
+
+
+
+
diff --git a/web-pages/product-site/legacy/en/blog/index.html b/web-pages/product-site/legacy/en/blog/index.html
index c7de746e1..205911b80 100644
--- a/web-pages/product-site/legacy/en/blog/index.html
+++ b/web-pages/product-site/legacy/en/blog/index.html
@@ -49,6 +49,7 @@
+
2026-09-09 · Application engineering HTTP 200 is not a usable transcript: a meeting-audio acceptance checklist Separate words, anonymous speakers, timestamps and tail coverage. Start with a tested Python checker without mistaking structural validity for quality.
September 4, 2026 · Stable release FunASR v1.4.14: Portable Source Archives, MOSS Discovery, and Ten Runtimes Portable Git archives and source installs, clearer MOSS service discovery, plus PyPI packages, ten runtimes, and SHA-256 checksums.
August 28, 2026 · Stable release FunASR v1.4.5: Lighter Python Inference and Nine llama.cpp Runtimes No hard torchaudio dependency in the default install, optional kaldi-native-fbank, plus PyPI packages, nine runtimes, and SHA-256 checksums.
August 21, 2026 · Stable release FunASR v1.4.3: Optional Silero VAD and Fixed-K Speaker Clustering Millisecond Silero VAD segments, lower-memory clustering for large known-speaker workloads, and 12 SHA-256-addressed release assets.
July 31, 2026 · Stable release FunASR v1.4.0: Complete PyPI Packages and Safer AutoModel Arguments SenseVoice and RWKV-BAT package-data fixes, an early vda_model typo guard, and 12 SHA-256-addressed release assets.
diff --git a/web-pages/product-site/legacy/sitemap.xml b/web-pages/product-site/legacy/sitemap.xml
index 533bfc1b4..107af554b 100644
--- a/web-pages/product-site/legacy/sitemap.xml
+++ b/web-pages/product-site/legacy/sitemap.xml
@@ -16,6 +16,8 @@
https://www.funasr.com/en/blog/funclip-v2-2-0-moss-speaker-clipping.html 2026-08-31 0.9 monthly
https://www.funasr.com/blog/funasr-v1-4-14-portable-source-release.html 2026-09-04 0.9 monthly
https://www.funasr.com/en/blog/funasr-v1-4-14-portable-source-release.html 2026-09-04 0.9 monthly
+ https://www.funasr.com/blog/funasr-v1-4-16-submodel-device-release.html 2026-09-18 0.9 monthly
+ https://www.funasr.com/en/blog/funasr-v1-4-16-submodel-device-release.html 2026-09-18 0.9 monthly
https://www.funasr.com/blog/funasr-v1-4-5-pypi-llama-cpp-release.html 2026-08-28 0.9 monthly
https://www.funasr.com/en/blog/funasr-v1-4-5-pypi-llama-cpp-release.html 2026-08-28 0.9 monthly
https://www.funasr.com/blog/funasr-v1-4-0-pypi-release.html 2026-07-31 0.9 monthly
diff --git a/web-pages/product-site/tests/test_legacy.py b/web-pages/product-site/tests/test_legacy.py
index 17d37d003..20778c30b 100644
--- a/web-pages/product-site/tests/test_legacy.py
+++ b/web-pages/product-site/tests/test_legacy.py
@@ -339,6 +339,59 @@ def test_v140_release_pages_are_bilingual_indexed_and_precise():
assert f'https://www.funasr.com/en/blog/{slug}' in sitemap
+def test_v1416_release_pages_are_bilingual_indexed_and_precise():
+ slug = 'funasr-v1-4-16-submodel-device-release.html'
+ pages = {
+ 'zh': LEGACY / 'blog' / slug,
+ 'en': LEGACY / 'en' / 'blog' / slug,
+ }
+ release_assets = {
+ 'SHA256SUMS',
+ 'funasr-1.4.16-py3-none-any.whl',
+ 'funasr-1.4.16.tar.gz',
+ 'funasr-llamacpp-linux-arm64.tar.gz',
+ 'funasr-llamacpp-linux-x64-avx2.tar.gz',
+ 'funasr-llamacpp-linux-x64-vulkan.tar.gz',
+ 'funasr-llamacpp-linux-x64.tar.gz',
+ 'funasr-llamacpp-macos-arm64.tar.gz',
+ 'funasr-llamacpp-windows-x64-avx2.zip',
+ 'funasr-llamacpp-windows-x64-cuda.zip',
+ 'funasr-llamacpp-windows-x64-vulkan.zip',
+ 'funasr-llamacpp-windows-x64.zip',
+ }
+
+ for language, path in pages.items():
+ text = path.read_text(encoding='utf-8')
+ soup = BeautifulSoup(text, 'html.parser')
+ assert 'funasr==1.4.16' in text
+ assert '904cd18681b8083de5e1039bd0ecebc4f49ede60' in text
+ assert 'f95943f6a8111349a1b08907363b048a49e9cb9caa1e3afd8c92970d08bf450d' in text
+ assert '1e2f8e3887fbc4b164cce40f73bf1324907da6ab59d1e8bf2add827f534c69e7' in text
+ assert 'https://pypi.org/project/funasr/1.4.16/' in text
+ assert 'https://github.com/modelscope/FunASR/releases/tag/v1.4.16' in text
+ assert 'submodel' in text.lower()
+ assert 'blackwell' not in text.lower()
+ asset_codes = {
+ code.get_text(strip=True)
+ for code in soup.select('code')
+ if code.get_text(strip=True).startswith(('funasr-', 'SHA256SUMS'))
+ }
+ assert asset_codes == release_assets
+ expected_route = f'/{"" if language == "zh" else "en/"}blog/{slug}'
+ assert soup.select_one('link[rel="canonical"]')['href'].endswith(expected_route)
+ peer_route = f'/{"en/" if language == "zh" else ""}blog/{slug}'
+ peer_language = 'en' if language == 'zh' else 'zh'
+ assert soup.select_one(f'link[rel="alternate"][hreflang="{peer_language}"]')['href'].endswith(peer_route)
+
+ zh_index = (LEGACY / 'blog' / 'index.html').read_text(encoding='utf-8')
+ en_index = (LEGACY / 'en' / 'blog' / 'index.html').read_text(encoding='utf-8')
+ sitemap = (LEGACY / 'sitemap.xml').read_text(encoding='utf-8')
+ assert f'/blog/{slug}' in zh_index
+ assert f'/en/blog/{slug}' in en_index
+ assert f'https://www.funasr.com/blog/{slug}' in sitemap
+ assert f'https://www.funasr.com/en/blog/{slug}' in sitemap
+
+
def test_v145_release_pages_are_bilingual_indexed_and_operational():
slug = 'funasr-v1-4-5-pypi-llama-cpp-release.html'
pages = {
From 26ee780034506b5ed3ca406b755c592597ca609e Mon Sep 17 00:00:00 2001
From: LauraGPT <18321252+LauraGPT@users.noreply.github.com>
Date: Fri, 18 Sep 2026 06:43:06 +0000
Subject: [PATCH 2/2] Update release archive browser contract
Signed-off-by: LauraGPT <18321252+LauraGPT@users.noreply.github.com>
---
web-pages/product-site/tests/browser/blog-editorial.spec.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web-pages/product-site/tests/browser/blog-editorial.spec.ts b/web-pages/product-site/tests/browser/blog-editorial.spec.ts
index ff675a83d..586657b2f 100644
--- a/web-pages/product-site/tests/browser/blog-editorial.spec.ts
+++ b/web-pages/product-site/tests/browser/blog-editorial.spec.ts
@@ -78,7 +78,7 @@ for (const prefix of ['', 'en/']) {
}
await page.locator(`[data-blog-more] a[href="/${prefix}blog/archive/"]`).click();
const archive = page.locator('[data-blog-view="archive"]');
- await expect(archive.locator('[data-blog-story]')).toHaveCount(36);
+ await expect(archive.locator('[data-blog-story]')).toHaveCount(37);
await page.screenshot({ path: testInfo.outputPath('archive.png') });
await archive.locator(`a[href="/${prefix}blog/self-hosted-deepgram-assemblyai-alternative.html"]`).click();
await expect(page.locator('article h1')).toBeVisible();