mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
Merge pull request #3501 from modelscope/codex/docs-mlx-ecosystem-20260817
docs: publish MLX Audio Fun-ASR integration
This commit is contained in:
@@ -39,6 +39,7 @@ These integrations are community-maintained. Their release cadence, hardware sup
|
||||
| Project | What is integrated | Start here |
|
||||
|---|---|---|
|
||||
| [Xinference](https://github.com/xorbitsai/inference) | Built-in audio model specifications for SenseVoiceSmall, Fun-ASR-Nano-2512, and Fun-ASR-MLT-Nano-2512 through Xinference's unified inference API. | [Audio model specifications](https://github.com/xorbitsai/inference/blob/main/xinference/model/audio/model_spec.json) and the FunASR 1.3 compatibility update in merged [#5140](https://github.com/xorbitsai/inference/pull/5140). |
|
||||
| [MLX Audio](https://github.com/Blaizzy/mlx-audio) | Apple Silicon-native Fun-ASR-Nano conversion and transcription through Python, CLI, and the OpenAI-compatible `POST /v1/audio/transcriptions` endpoint, including language hints and hotwords/context. The current public checkpoint path is transcription-only: it emits no timestamps, and VAD or diarization must run separately. | [Fun-ASR-Nano model guide](https://github.com/Blaizzy/mlx-audio/blob/main/docs/models/stt/fun-asr-nano.md), [server guide](https://github.com/Blaizzy/mlx-audio/blob/main/docs/guides/web-ui-api-server.md), and merged hotword support [#885](https://github.com/Blaizzy/mlx-audio/pull/885). |
|
||||
| [Optimum Intel](https://github.com/huggingface/optimum-intel) | OpenVINO export and inference support for Fun-ASR models through Hugging Face Optimum Intel, including FunASR-specific modeling and ASR/export/quantization coverage. | [FunASR OpenVINO modeling](https://github.com/huggingface/optimum-intel/blob/main/optimum/intel/openvino/modeling_funasr.py), [supported models docs](https://github.com/huggingface/optimum-intel/blob/main/docs/source/openvino/models.mdx), and merged [#1801](https://github.com/huggingface/optimum-intel/pull/1801). |
|
||||
| [OpenVINO Notebooks](https://github.com/openvinotoolkit/openvino_notebooks) | Official OpenVINO tutorial material for FunASR-Nano, including helper code and NPU device fixes for running the notebook on Intel acceleration paths. | [FunASR-Nano notebook](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/funasr-nano), [OpenVINO FunASR helper](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/funasr-nano/ov_funasr_helper.py), merged [#3497](https://github.com/openvinotoolkit/openvino_notebooks/pull/3497), and NPU fix [#3517](https://github.com/openvinotoolkit/openvino_notebooks/pull/3517). |
|
||||
| [SGLang Omni](https://github.com/sgl-project/sglang-omni) | A multi-stage pipeline runtime for omni models with built-in Fun-ASR model support, OpenAI-compatible serving, cookbook docs, benchmark tasks, and formatted stream-output tests. | [Fun-ASR cookbook](https://github.com/sgl-project/sglang-omni/blob/main/docs/cookbook/fun_asr.md), [Fun-ASR model runtime](https://github.com/sgl-project/sglang-omni/tree/main/sglang_omni/models/fun_asr), merged [#1078](https://github.com/sgl-project/sglang-omni/pull/1078), and merged review-fix [#1079](https://github.com/sgl-project/sglang-omni/pull/1079). |
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
| 项目 | 已集成能力 | 从这里开始 |
|
||||
|---|---|---|
|
||||
| [Xinference](https://github.com/xorbitsai/inference) | 通过 Xinference 统一推理 API 提供 SenseVoiceSmall、Fun-ASR-Nano-2512 和 Fun-ASR-MLT-Nano-2512 内置音频模型规格。 | [音频模型规格](https://github.com/xorbitsai/inference/blob/main/xinference/model/audio/model_spec.json) 和已合并 [#5140](https://github.com/xorbitsai/inference/pull/5140) 中的 FunASR 1.3 兼容性更新。 |
|
||||
| [MLX Audio](https://github.com/Blaizzy/mlx-audio) | 面向 Apple Silicon 的原生 MLX Fun-ASR-Nano 转换与转写路径,覆盖 Python、CLI 和 OpenAI 兼容的 `POST /v1/audio/transcriptions`,支持语种提示与 hotwords/context。当前公开 checkpoint 路径仅转写、无时间戳;VAD 与说话人分离需要在外部完成。 | [Fun-ASR-Nano 模型指南](https://github.com/Blaizzy/mlx-audio/blob/main/docs/models/stt/fun-asr-nano.md)、[服务端指南](https://github.com/Blaizzy/mlx-audio/blob/main/docs/guides/web-ui-api-server.md) 和 hotword 支持已合并 [#885](https://github.com/Blaizzy/mlx-audio/pull/885)。 |
|
||||
| [Optimum Intel](https://github.com/huggingface/optimum-intel) | 通过 Hugging Face Optimum Intel 支持 Fun-ASR 模型的 OpenVINO 导出与推理,包括 FunASR 专用 modeling 代码以及 ASR、export、quantization 覆盖。 | [FunASR OpenVINO modeling](https://github.com/huggingface/optimum-intel/blob/main/optimum/intel/openvino/modeling_funasr.py)、[支持模型文档](https://github.com/huggingface/optimum-intel/blob/main/docs/source/openvino/models.mdx) 和已合并 [#1801](https://github.com/huggingface/optimum-intel/pull/1801)。 |
|
||||
| [OpenVINO Notebooks](https://github.com/openvinotoolkit/openvino_notebooks) | OpenVINO 官方 FunASR-Nano 教程资料,包含 helper 代码和 NPU device 修复,方便用户在 Intel 加速路径上运行 notebook。 | [FunASR-Nano notebook](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/funasr-nano)、[OpenVINO FunASR helper](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/funasr-nano/ov_funasr_helper.py)、已合并 [#3497](https://github.com/openvinotoolkit/openvino_notebooks/pull/3497) 和 NPU 修复 [#3517](https://github.com/openvinotoolkit/openvino_notebooks/pull/3517)。 |
|
||||
| [SGLang Omni](https://github.com/sgl-project/sglang-omni) | 面向 omni models 的 multi-stage pipeline runtime,已内置 Fun-ASR 模型支持、OpenAI 兼容服务、cookbook 文档、benchmark 任务和格式化后的 stream-output 测试。 | [Fun-ASR cookbook](https://github.com/sgl-project/sglang-omni/blob/main/docs/cookbook/fun_asr.md)、[Fun-ASR 模型 runtime](https://github.com/sgl-project/sglang-omni/tree/main/sglang_omni/models/fun_asr)、已合并 [#1078](https://github.com/sgl-project/sglang-omni/pull/1078) 和 review-fix 已合并 [#1079](https://github.com/sgl-project/sglang-omni/pull/1079)。 |
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"css/index.1682178c.css": "b5f6034ce886c25773928c114e4290d1c491a3d081677b488810198efd76b4e1",
|
||||
"decoder.js": "f2023a28036b1ff58e5bdabbb72ea427f8faaf60e89acd78ff183c313bdb0a2c",
|
||||
"donors.html": "eec6b789b29c27d372925ae0ad3e13d4c6e62978b3c38c4da9e3aec129f10934",
|
||||
"ecosystem.html": "35c5507fc3cabb519aaa657208e187c44e323f3115befab11af262afa836abbf",
|
||||
"ecosystem.html": "ae547554ccffe30436109c95313250f908826ee4c51494a5856e4f0dd0cc37aa",
|
||||
"en/blog/cantonese-speech-recognition.html": "b9bd146198206f781c37f341c370a690dc83cd7163334e34b4e7f65e69af8ff2",
|
||||
"en/blog/chinese-speech-recognition.html": "16b68bd2a1122236c580c62275002ae2c0875ca14e32686e88d3b5ccfa9f56ef",
|
||||
"en/blog/fun-asr-nano-guide.html": "1746c708bd0606188de4266d8255984dd9e14634af33c54ad65a5f05b767be1b",
|
||||
@@ -71,7 +71,7 @@
|
||||
"en/blog/voice-activity-detection-python.html": "d12f5d0f4ae07c3434f6188d12f5603b8abb9578413b79133668638d1c5e18a7",
|
||||
"en/blog/which-funasr-model.html": "1207180aa929a3aa51db136c1098f4edc8f07405e2b56fe033998bf996f8ec7f",
|
||||
"en/donors.html": "eacb7f9434b1b29e13e9b0175bb9680556ee72ab4dbd155e68f9c912eb0212b1",
|
||||
"en/ecosystem.html": "93e688e4c7274a06e3bae0c9aef60251419fa1bb7c72352ea74607fde69c883d",
|
||||
"en/ecosystem.html": "9e761043c8e20fa7d876edb4a83592edd1bb4c74e8a88a6bf58cd19d04624965",
|
||||
"en/index.html": "d86effc3bf4d218eabd465cbbe026f62c98dd50110ddd58251d9d271a64882a2",
|
||||
"en/llama-cpp.html": "dbfbd125ebbf07f7d923c91b122818f8b09484ce54c1e80eba66a89d22dfb5b4",
|
||||
"en/models.html": "321a63caace107d5ce6d470948c2f5954f2d8e25306d8227b4a85ec3663ad49e",
|
||||
|
||||
@@ -354,6 +354,12 @@ footer a{color:#60a5fa}
|
||||
<div><span class="card-tag">Fun-ASR-Nano</span><span class="card-tag">C++ / GGML</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-title"><a href="https://github.com/Blaizzy/mlx-audio">MLX Audio</a></div>
|
||||
<div class="card-stars">7.7K+ stars</div>
|
||||
<div class="card-desc">面向 Apple Silicon 的原生 MLX 音频运行时。主分支已提供 <a href="https://github.com/Blaizzy/mlx-audio/blob/main/docs/models/stt/fun-asr-nano.md">Fun-ASR-Nano 模型转换、Python/CLI 与 OpenAI 兼容转写</a>,并在 <a href="https://github.com/Blaizzy/mlx-audio/pull/885">#885</a> 合并统一 hotwords/context 支持。当前路径仅转写、无时间戳,VAD 与说话人分离需外置;模型范围见 <a href="/go/fun-asr">Fun-ASR 仓库</a>。</div>
|
||||
<div><span class="card-tag">Apple Silicon</span><span class="card-tag">Fun-ASR-Nano</span><span class="card-tag">OpenAI 兼容</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-title"><a href="https://github.com/RapidAI/RapidASR">RapidASR</a></div>
|
||||
<div class="card-stars">608 stars</div>
|
||||
<div class="card-desc">跨平台 ASR 推理库,基于 ONNX Runtime 和 FunASR。开箱即用,支持中英文混合识别。</div>
|
||||
|
||||
@@ -355,6 +355,12 @@ footer a{color:#60a5fa}
|
||||
<div><span class="card-tag">Fun-ASR-Nano</span><span class="card-tag">C++ / GGML</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-title"><a href="https://github.com/Blaizzy/mlx-audio">MLX Audio</a></div>
|
||||
<div class="card-stars">7.7K+ stars</div>
|
||||
<div class="card-desc">An Apple Silicon-native MLX audio runtime. Main now documents <a href="https://github.com/Blaizzy/mlx-audio/blob/main/docs/models/stt/fun-asr-nano.md">Fun-ASR-Nano conversion, Python/CLI, and OpenAI-compatible transcription</a>, with uniform hotwords/context support merged in <a href="https://github.com/Blaizzy/mlx-audio/pull/885">#885</a>. This path is transcription-only with no timestamps; VAD and diarization remain external. See the model scope in the <a href="/go/fun-asr">Fun-ASR repository</a>.</div>
|
||||
<div><span class="card-tag">Apple Silicon</span><span class="card-tag">Fun-ASR-Nano</span><span class="card-tag">OpenAI-compat</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-title"><a href="https://github.com/RapidAI/RapidASR">RapidASR</a></div>
|
||||
<div class="card-stars">608 stars</div>
|
||||
<div class="card-desc">Cross-platform ASR inference library based on ONNX Runtime and FunASR. Ready to use, supports Chinese-English mixed recognition.</div>
|
||||
|
||||
@@ -194,6 +194,35 @@ for (const viewport of [
|
||||
});
|
||||
}
|
||||
|
||||
for (const viewport of [
|
||||
{ name: 'mobile', width: 390, height: 844 },
|
||||
{ name: 'desktop', width: 1440, height: 900 },
|
||||
]) {
|
||||
test(`MLX Audio ecosystem entry is stable at ${viewport.name}`, async ({ page }, testInfo) => {
|
||||
await page.setViewportSize(viewport);
|
||||
|
||||
for (const route of ['/ecosystem.html', '/en/ecosystem.html']) {
|
||||
await page.goto(route);
|
||||
const card = page.locator('.card').filter({ hasText: 'MLX Audio' });
|
||||
|
||||
await expect(card).toHaveCount(1);
|
||||
await expect(card.locator('.card-tag', { hasText: 'Fun-ASR-Nano' })).toBeVisible();
|
||||
await expect(card.locator('a[href="https://github.com/Blaizzy/mlx-audio/pull/885"]')).toBeVisible();
|
||||
await expect(card.locator('a[href="/go/fun-asr"]')).toBeVisible();
|
||||
|
||||
const layout = await page.evaluate(() => ({
|
||||
overflow: document.documentElement.scrollWidth - document.documentElement.clientWidth,
|
||||
}));
|
||||
expect(layout.overflow).toBeLessThanOrEqual(1);
|
||||
}
|
||||
|
||||
await page.screenshot({
|
||||
path: testInfo.outputPath(`mlx-audio-ecosystem-${viewport.name}.png`),
|
||||
fullPage: true,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
test('reduced motion disables smooth scrolling', async ({ page }) => {
|
||||
await page.emulateMedia({ reducedMotion: 'reduce' });
|
||||
await page.goto('/en/');
|
||||
|
||||
@@ -113,6 +113,46 @@ def test_english_navigation_uses_language_peer():
|
||||
assert soup.select_one('[data-language-peer]')['href'] == '/blog/example.html'
|
||||
|
||||
|
||||
def test_mlx_audio_ecosystem_entry_is_merged_attributed_and_bounded():
|
||||
pages = {
|
||||
'zh': LEGACY / 'ecosystem.html',
|
||||
'en': LEGACY / 'en' / 'ecosystem.html',
|
||||
}
|
||||
required_links = {
|
||||
'https://github.com/Blaizzy/mlx-audio',
|
||||
'https://github.com/Blaizzy/mlx-audio/blob/main/docs/models/stt/fun-asr-nano.md',
|
||||
'https://github.com/Blaizzy/mlx-audio/pull/885',
|
||||
'/go/fun-asr',
|
||||
}
|
||||
|
||||
for language, path in pages.items():
|
||||
soup = BeautifulSoup(path.read_text(encoding='utf-8'), 'html.parser')
|
||||
card = next(
|
||||
item
|
||||
for item in soup.select('.card')
|
||||
if item.select_one('.card-title').get_text(' ', strip=True) == 'MLX Audio'
|
||||
)
|
||||
text = card.get_text(' ', strip=True)
|
||||
hrefs = {link.get('href') for link in card.select('a[href]')}
|
||||
|
||||
assert required_links <= hrefs
|
||||
assert 'Apple Silicon' in text
|
||||
assert 'Fun-ASR-Nano' in text
|
||||
assert 'OpenAI' in text
|
||||
assert ('仅转写' in text) if language == 'zh' else ('transcription-only' in text)
|
||||
assert ('无时间戳' in text) if language == 'zh' else ('no timestamps' in text)
|
||||
|
||||
community_docs = {
|
||||
'en': Path(__file__).resolve().parents[3] / 'docs' / 'community_projects.md',
|
||||
'zh': Path(__file__).resolve().parents[3] / 'docs' / 'community_projects_zh.md',
|
||||
}
|
||||
for text_path in community_docs.values():
|
||||
text = text_path.read_text(encoding='utf-8')
|
||||
assert '[MLX Audio](https://github.com/Blaizzy/mlx-audio)' in text
|
||||
assert 'docs/models/stt/fun-asr-nano.md' in text
|
||||
assert 'https://github.com/Blaizzy/mlx-audio/pull/885' in text
|
||||
|
||||
|
||||
def test_v140_release_pages_are_bilingual_indexed_and_precise():
|
||||
slug = 'funasr-v1-4-0-pypi-release.html'
|
||||
pages = {
|
||||
|
||||
Reference in New Issue
Block a user