From dbd37d2496048edbe41010e03b34ed3e48d45d85 Mon Sep 17 00:00:00 2001 From: LauraGPT Date: Wed, 29 Jul 2026 19:49:29 +0000 Subject: [PATCH] feat(site): attribute ecosystem repository traffic Signed-off-by: LauraGPT --- web-pages/nginx/conversion-map.conf | 3 +++ .../product-site/content/legacy-manifest.json | 8 ++++---- web-pages/product-site/legacy/ecosystem.html | 2 +- .../product-site/legacy/en/ecosystem.html | 2 +- web-pages/product-site/legacy/en/models.html | 4 ++-- web-pages/product-site/legacy/models.html | 4 ++-- web-pages/product-site/tests/test_output.py | 20 +++++++++++++++++++ .../tests/test_release_scripts.py | 9 +++++++++ 8 files changed, 42 insertions(+), 10 deletions(-) diff --git a/web-pages/nginx/conversion-map.conf b/web-pages/nginx/conversion-map.conf index 6ba5eeadd..a3554f8cd 100644 --- a/web-pages/nginx/conversion-map.conf +++ b/web-pages/nginx/conversion-map.conf @@ -1,6 +1,9 @@ map $uri $funasr_conversion_target { default ""; /go/github https://github.com/modelscope/FunASR; + /go/fun-asr https://github.com/QwenAudio/Fun-ASR; + /go/sensevoice https://github.com/QwenAudio/SenseVoice; + /go/funclip https://github.com/modelscope/FunClip; /go/docs https://github.com/modelscope/FunASR/tree/main/docs; /go/releases https://github.com/modelscope/FunASR/releases; /go/deploy-vllm https://www.funasr.com/deploy/vllm.html; diff --git a/web-pages/product-site/content/legacy-manifest.json b/web-pages/product-site/content/legacy-manifest.json index 28457cfe9..462c34ac8 100644 --- a/web-pages/product-site/content/legacy-manifest.json +++ b/web-pages/product-site/content/legacy-manifest.json @@ -37,7 +37,7 @@ "css/index.1682178c.css": "b5f6034ce886c25773928c114e4290d1c491a3d081677b488810198efd76b4e1", "decoder.js": "f2023a28036b1ff58e5bdabbb72ea427f8faaf60e89acd78ff183c313bdb0a2c", "donors.html": "eec6b789b29c27d372925ae0ad3e13d4c6e62978b3c38c4da9e3aec129f10934", - "ecosystem.html": "1774b107ae9c29dea63889df7fc72ce9f20482c9531c20a93b956e6d1e735c14", + "ecosystem.html": "3b227e085d285018188ac3c2891d8940455f661fa7dcfa3a69ef4c4b12a8a7db", "en/blog/cantonese-speech-recognition.html": "b9bd146198206f781c37f341c370a690dc83cd7163334e34b4e7f65e69af8ff2", "en/blog/chinese-speech-recognition.html": "16b68bd2a1122236c580c62275002ae2c0875ca14e32686e88d3b5ccfa9f56ef", "en/blog/fun-asr-nano-guide.html": "1746c708bd0606188de4266d8255984dd9e14634af33c54ad65a5f05b767be1b", @@ -67,10 +67,10 @@ "en/blog/voice-activity-detection-python.html": "d12f5d0f4ae07c3434f6188d12f5603b8abb9578413b79133668638d1c5e18a7", "en/blog/which-funasr-model.html": "1207180aa929a3aa51db136c1098f4edc8f07405e2b56fe033998bf996f8ec7f", "en/donors.html": "eacb7f9434b1b29e13e9b0175bb9680556ee72ab4dbd155e68f9c912eb0212b1", - "en/ecosystem.html": "ba37210274c38f1a8aa3cee762e866f2dc5fb70c7690d7313d45f40f9274aa43", + "en/ecosystem.html": "e07daf9a241d28b9a25df7d58c693289d61e056cb864faf71095aa6cef7b5b32", "en/index.html": "4950bc2e0b337637300c5bcd45d1820d9636c4f1dab34e0ec8d3443be44bd277", "en/llama-cpp.html": "dbfbd125ebbf07f7d923c91b122818f8b09484ce54c1e80eba66a89d22dfb5b4", - "en/models.html": "07421617d1e56a6b5d239fc683bdf62d6bd9e5ecb0f4f82013ee9929cfd91829", + "en/models.html": "c2add621edc3aa63e6d49587f089ee5ac6c05faf5f68e14fef70a7a5ab443a4d", "en/quickstart.html": "2735cc9e608bfc7860eaa0c0e1242088d98204bca92cfec7ae7923a056f968c4", "en/vs-whisper.html": "1779f98b2eae8579f3694577bc9dda81bd954423b49dd201ff17dcfb5e630ab1", "favicon.ico": "e5edd9f12088fa920b848485c62c72a093f27bfba7b6a46b4e7b63c34eb5126a", @@ -94,7 +94,7 @@ "lang-redirect.js": "e1189080a8e81eb76cf39e0538d0378b6631f5aa87e4679c0fd4fd34d1f6c197", "llama-cpp.html": "892b5c05e3375bcc7cd0af343b629f069d8ec4f372e6470cd830cdf2181a11d5", "logo.png": "ac0ff97f2b0203c3fad4ac5e90231d93e36d98cc8e90d383483de150b0dd0728", - "models.html": "c05da7a2b1aaa7390d0e8d5135ed08646bfb50c357919ad160fd30049eb82364", + "models.html": "2fa557c327c81717e5ae145ae96436168ea51f58301bd7bb6357d4e15686cdfc", "quickstart.html": "90c5f25b428b064be02df11c38d24556ec97f4bc80900398c223424aaa48e7b8", "robots.txt": "1305b0f680b3e9f73b01301dc474423230dffab85731a379a694f30c73c07f2d", "sitemap.xml": "055e1fbf6da8689720eca3ce508b7115dfbb90ebf45cd4cab18d0b13d01aa139", diff --git a/web-pages/product-site/legacy/ecosystem.html b/web-pages/product-site/legacy/ecosystem.html index e5845724c..f0e3c65f2 100644 --- a/web-pages/product-site/legacy/ecosystem.html +++ b/web-pages/product-site/legacy/ecosystem.html @@ -82,7 +82,7 @@

FunASR 生态系统

视频与媒体工具

- +
6K+ stars
基于语音识别的智能视频剪辑。自动生成字幕,支持按关键词和说话人剪辑视频片段。下载 v2.1.0
视频官方
diff --git a/web-pages/product-site/legacy/en/ecosystem.html b/web-pages/product-site/legacy/en/ecosystem.html index 799f8ce96..903b23977 100644 --- a/web-pages/product-site/legacy/en/ecosystem.html +++ b/web-pages/product-site/legacy/en/ecosystem.html @@ -83,7 +83,7 @@

FunASR Ecosystem

Video & Media Tools

- +
6K+ stars
ASR-powered video clipping. Automatic subtitles, keyword and speaker-based clip extraction. Download v2.1.0
VideoOfficial
diff --git a/web-pages/product-site/legacy/en/models.html b/web-pages/product-site/legacy/en/models.html index dfd20ecd8..0472a07db 100644 --- a/web-pages/product-site/legacy/en/models.html +++ b/web-pages/product-site/legacy/en/models.html @@ -87,7 +87,7 @@

ASR Models

Fun-ASR-Nano ⭐ Flagship / default
-
800M params · LLM-based (SenseVoice encoder + Qwen3-0.6B) · GitHub · HuggingFace
+
800M params · LLM-based (SenseVoice encoder + Qwen3-0.6B) · GitHub · HuggingFace
Next-generation LLM-based ASR model. Combines SenseVoice's audio encoder with Qwen3-0.6B language model for superior context understanding. Supports vLLM acceleration for high-throughput batch inference and real-time streaming. The released model.pt checkpoint does not provide reliable checkpoint-native character timestamps (issue #106).
vLLM accelerated @@ -122,7 +122,7 @@

When to use

SenseVoice Small
-
234M params · Non-autoregressive · GitHub · HuggingFace
+
234M params · Non-autoregressive · GitHub · HuggingFace
Ultra-fast speech recognition with built-in emotion and audio event detection. Supports 50+ languages including Chinese, English, Japanese, Korean, French, German, and more. Non-autoregressive architecture delivers 170x realtime speed on GPU.
170x realtime diff --git a/web-pages/product-site/legacy/models.html b/web-pages/product-site/legacy/models.html index cb986dbc9..bfa5a97a9 100644 --- a/web-pages/product-site/legacy/models.html +++ b/web-pages/product-site/legacy/models.html @@ -87,7 +87,7 @@

ASR 模型

Fun-ASR-Nano ⭐ 旗舰 / 默认推荐
-
800M 参数 · LLM 架构 (SenseVoice 编码器 + Qwen3-0.6B) · GitHub · HuggingFace
+
800M 参数 · LLM 架构 (SenseVoice 编码器 + Qwen3-0.6B) · GitHub · HuggingFace
新一代 LLM 架构 ASR 模型。融合 SenseVoice 音频编码器与 Qwen3-0.6B 语言模型,具备更强的上下文理解能力。支持 vLLM 加速的高吞吐批量推理与实时流式服务。发布的 model.pt checkpoint 不提供可靠的原生字级时间戳(issue #106)。
vLLM 加速 @@ -122,7 +122,7 @@

适用场景

SenseVoice Small
-
234M 参数 · 非自回归 · GitHub · HuggingFace
+
234M 参数 · 非自回归 · GitHub · HuggingFace
极速语音识别,内置情感和音频事件检测。支持 50+ 语种,包括中文、英文、日文、韩文、法文、德文等。非自回归架构在 GPU 上实现 170 倍实时速度。
170 倍实时 diff --git a/web-pages/product-site/tests/test_output.py b/web-pages/product-site/tests/test_output.py index 7367b7716..fb89b73e8 100644 --- a/web-pages/product-site/tests/test_output.py +++ b/web-pages/product-site/tests/test_output.py @@ -139,6 +139,26 @@ def test_old_llama_routes_point_to_product_pages(built_site): ) +@pytest.mark.parametrize('relative', ('models.html', 'en/models.html')) +def test_model_pages_use_attributed_repository_routes(built_site, relative): + soup = read_soup(built_site / relative) + hrefs = {link.get('href') for link in soup.select('a[href]')} + + assert '/go/fun-asr' in hrefs + assert '/go/sensevoice' in hrefs + assert 'https://github.com/QwenAudio/Fun-ASR' not in hrefs + assert 'https://github.com/QwenAudio/SenseVoice' not in hrefs + + +@pytest.mark.parametrize('relative', ('ecosystem.html', 'en/ecosystem.html')) +def test_ecosystem_pages_use_attributed_funclip_route(built_site, relative): + soup = read_soup(built_site / relative) + hrefs = {link.get('href') for link in soup.select('a[href]')} + + assert '/go/funclip' in hrefs + assert 'https://github.com/modelscope/FunClip' not in hrefs + + @pytest.mark.parametrize('relative', ('ecosystem.html', 'en/ecosystem.html')) def test_ecosystem_surfaces_orca_sensevoice_desktop_integration(built_site, relative): soup = read_soup(built_site / relative) diff --git a/web-pages/product-site/tests/test_release_scripts.py b/web-pages/product-site/tests/test_release_scripts.py index 3abbba13d..01fc03cdd 100644 --- a/web-pages/product-site/tests/test_release_scripts.py +++ b/web-pages/product-site/tests/test_release_scripts.py @@ -13,11 +13,19 @@ NGINX_CONFIG = REPO_ROOT / 'web-pages' / 'nginx' / 'funasr.com.conf' EXPECTED_FIXED_ROUTES = { '/go/github', + '/go/fun-asr', + '/go/sensevoice', + '/go/funclip', '/go/docs', '/go/releases', '/go/deploy-vllm', '/go/deploy-llama-cpp', } +EXPECTED_REPOSITORY_ROUTES = { + '/go/fun-asr': 'https://github.com/QwenAudio/Fun-ASR', + '/go/sensevoice': 'https://github.com/QwenAudio/SenseVoice', + '/go/funclip': 'https://github.com/modelscope/FunClip', +} def executable(path: Path, body: str) -> Path: @@ -120,6 +128,7 @@ def test_conversion_map_contains_only_fixed_redirects(): routes[route] = target assert set(routes) == EXPECTED_FIXED_ROUTES + assert EXPECTED_REPOSITORY_ROUTES.items() <= routes.items() assert all( target.startswith('https://github.com/') or target.startswith('https://www.funasr.com/') for target in routes.values()