mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
feat(site): attribute ecosystem repository traffic (#3441)
Route Fun-ASR, SenseVoice, and FunClip repository links through fixed funasr.com conversion endpoints so ecosystem traffic can be measured per repository. Signed-off-by: Zhifu Gao <[email protected]>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -82,7 +82,7 @@ footer a{color:#60a5fa}
|
||||
<h2>视频与媒体工具</h2>
|
||||
<div class="card-grid">
|
||||
<div class="card">
|
||||
<div class="card-title"><a href="https://github.com/modelscope/FunClip">FunClip</a></div>
|
||||
<div class="card-title"><a href="/go/funclip">FunClip</a></div>
|
||||
<div class="card-stars">6K+ stars</div>
|
||||
<div class="card-desc">基于语音识别的智能视频剪辑。自动生成字幕,支持按关键词和说话人剪辑视频片段。<a href="https://github.com/modelscope/FunClip/releases/tag/v2.1.0">下载 v2.1.0</a></div>
|
||||
<div><span class="card-tag">视频</span><span class="card-tag green">官方</span></div>
|
||||
|
||||
@@ -83,7 +83,7 @@ footer a{color:#60a5fa}
|
||||
<h2>Video & Media Tools</h2>
|
||||
<div class="card-grid">
|
||||
<div class="card">
|
||||
<div class="card-title"><a href="https://github.com/modelscope/FunClip">FunClip</a></div>
|
||||
<div class="card-title"><a href="/go/funclip">FunClip</a></div>
|
||||
<div class="card-stars">6K+ stars</div>
|
||||
<div class="card-desc">ASR-powered video clipping. Automatic subtitles, keyword and speaker-based clip extraction. <a href="https://github.com/modelscope/FunClip/releases/tag/v2.1.0">Download v2.1.0</a></div>
|
||||
<div><span class="card-tag">Video</span><span class="card-tag green">Official</span></div>
|
||||
|
||||
@@ -87,7 +87,7 @@ footer a{color:#60a5fa}
|
||||
|
||||
<div class="model-card">
|
||||
<div class="model-name">Fun-ASR-Nano <span class="badge badge-orange">⭐ Flagship / default</span></div>
|
||||
<div class="model-meta">800M params · LLM-based (SenseVoice encoder + Qwen3-0.6B) · <a href="https://github.com/QwenAudio/Fun-ASR">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512">HuggingFace</a></div>
|
||||
<div class="model-meta">800M params · LLM-based (SenseVoice encoder + Qwen3-0.6B) · <a href="/go/fun-asr">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512">HuggingFace</a></div>
|
||||
<div class="model-desc">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 <code>model.pt</code> checkpoint does not provide reliable checkpoint-native character timestamps (<a href="https://github.com/QwenAudio/Fun-ASR/issues/106" target="_blank" rel="noopener">issue #106</a>).</div>
|
||||
<div class="model-features">
|
||||
<span class="badge badge-green">vLLM accelerated</span>
|
||||
@@ -122,7 +122,7 @@ result = model.generate(input="audio.wav")</pre>
|
||||
|
||||
<div class="model-card">
|
||||
<div class="model-name">SenseVoice Small</div>
|
||||
<div class="model-meta">234M params · Non-autoregressive · <a href="https://github.com/QwenAudio/SenseVoice">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/SenseVoiceSmall">HuggingFace</a></div>
|
||||
<div class="model-meta">234M params · Non-autoregressive · <a href="/go/sensevoice">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/SenseVoiceSmall">HuggingFace</a></div>
|
||||
<div class="model-desc">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.</div>
|
||||
<div class="model-features">
|
||||
<span class="badge badge-green">170x realtime</span>
|
||||
|
||||
@@ -87,7 +87,7 @@ footer a{color:#60a5fa}
|
||||
|
||||
<div class="model-card">
|
||||
<div class="model-name">Fun-ASR-Nano <span class="badge badge-orange">⭐ 旗舰 / 默认推荐</span></div>
|
||||
<div class="model-meta">800M 参数 · LLM 架构 (SenseVoice 编码器 + Qwen3-0.6B) · <a href="https://github.com/QwenAudio/Fun-ASR">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512">HuggingFace</a></div>
|
||||
<div class="model-meta">800M 参数 · LLM 架构 (SenseVoice 编码器 + Qwen3-0.6B) · <a href="/go/fun-asr">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512">HuggingFace</a></div>
|
||||
<div class="model-desc">新一代 LLM 架构 ASR 模型。融合 SenseVoice 音频编码器与 Qwen3-0.6B 语言模型,具备更强的上下文理解能力。支持 vLLM 加速的高吞吐批量推理与实时流式服务。发布的 <code>model.pt</code> checkpoint 不提供可靠的原生字级时间戳(<a href="https://github.com/QwenAudio/Fun-ASR/issues/106" target="_blank" rel="noopener">issue #106</a>)。</div>
|
||||
<div class="model-features">
|
||||
<span class="badge badge-green">vLLM 加速</span>
|
||||
@@ -122,7 +122,7 @@ result = model.generate(input="audio.wav")</pre>
|
||||
|
||||
<div class="model-card">
|
||||
<div class="model-name">SenseVoice Small</div>
|
||||
<div class="model-meta">234M 参数 · 非自回归 · <a href="https://github.com/QwenAudio/SenseVoice">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/SenseVoiceSmall">HuggingFace</a></div>
|
||||
<div class="model-meta">234M 参数 · 非自回归 · <a href="/go/sensevoice">GitHub</a> · <a href="https://huggingface.co/FunAudioLLM/SenseVoiceSmall">HuggingFace</a></div>
|
||||
<div class="model-desc">极速语音识别,内置情感和音频事件检测。支持 50+ 语种,包括中文、英文、日文、韩文、法文、德文等。非自回归架构在 GPU 上实现 170 倍实时速度。</div>
|
||||
<div class="model-features">
|
||||
<span class="badge badge-green">170 倍实时</span>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -13,11 +13,19 @@ CONVERSION_MAP = REPO_ROOT / 'web-pages' / 'nginx' / 'conversion-map.conf'
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user