From acca7ea07091502480d784cc9e7f273df5e975ad Mon Sep 17 00:00:00 2001 From: zhifu gao Date: Fri, 18 Sep 2026 14:58:31 +0800 Subject: [PATCH] Publish FunASR 1.4.16 bilingual site guide (#3721) Publish bilingual 1.4.16 release pages, catalogue and sitemap entries, and exact release-asset contracts. 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 + .../tests/browser/blog-editorial.spec.ts | 2 +- web-pages/product-site/tests/test_legacy.py | 53 +++++++++++++++++++ 9 files changed, 178 insertions(+), 4 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 指南

+ + FunASR v1.4.16 发布视觉图 +

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 修复;请先用清单校验,再在目标硬件和真实音频上验收。

+

从固定版本和校验清单开始复现。

查看 v1.4.16 的 12 个资产
+
+ + + 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 @@ footer a{color:#94a3b8}
2026-08-31 · FunClip v2.2.0

MOSS 多说话人转写进入 FunClip:从一句话到带说话人的片段

通过经真实双说话人音频验证的 vLLM 路径,把第三方 MOSS 模型的段级时间戳和说话人标签直接用于 SRT 与说话人片段导出。

查看部署与剪辑边界 →
+
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

+ + FunASR v1.4.16 release visual +

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.

+

Start from a pinned version and the checksum manifest.

Open all 12 v1.4.16 assets
+
+ + + 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 @@ footer a{color:#94a3b8}
August 31, 2026 · FunClip v2.2.0

MOSS Multi-Speaker Transcription in FunClip: From One Prompt to Speaker Clips

Use the vLLM path validated on real two-speaker audio to turn the third-party MOSS model's segment timestamps and speaker labels into SRT and speaker-specific clip exports.

Read the deployment and clipping boundaries →
+
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.html2026-08-310.9monthly https://www.funasr.com/blog/funasr-v1-4-14-portable-source-release.html2026-09-040.9monthly https://www.funasr.com/en/blog/funasr-v1-4-14-portable-source-release.html2026-09-040.9monthly + https://www.funasr.com/blog/funasr-v1-4-16-submodel-device-release.html2026-09-180.9monthly + https://www.funasr.com/en/blog/funasr-v1-4-16-submodel-device-release.html2026-09-180.9monthly https://www.funasr.com/blog/funasr-v1-4-5-pypi-llama-cpp-release.html2026-08-280.9monthly https://www.funasr.com/en/blog/funasr-v1-4-5-pypi-llama-cpp-release.html2026-08-280.9monthly https://www.funasr.com/blog/funasr-v1-4-0-pypi-release.html2026-07-310.9monthly 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(); 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 = {