Skip to content

Commit 82a4d67

Browse files
authored
docs: fix broken markdown links
Fix stale repository-local Markdown links and add a pytest guard for future docs link regressions.
1 parent 8ca8e03 commit 82a4d67

10 files changed

Lines changed: 73 additions & 13 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ asset is published.
309309
- 2026/07/19: **v1.3.18 on PyPI** — CLI SRT/TSV subtitle output now requests sentence timestamps and loads punctuation when needed, so `funasr audio.wav --output-format srt --output-dir ./subs` writes segmented subtitle cues instead of one full-text block. Install with `python -m pip install -U "funasr==1.3.18"`. [Release ->](https://github.com/modelscope/FunASR/releases/tag/v1.3.18)
310310
- 2026/07/18: **v1.3.16 on PyPI** — client-driven realtime endpoints for Fun-ASR-Nano. Start one WebSocket session, stream PCM, and send `COMMIT` for each utterance without loading server-side VAD; short utterances finalize and timestamps remain monotonic across commits. Install with `pip install --upgrade funasr`, then run `funasr-realtime-server --endpoint-mode client`. [Guide →](examples/industrial_data_pretraining/fun_asr_nano/docs/realtime_demo.md)
311311
- 2026/07/18: **llama.cpp runtime v0.1.7** — prebuilt Windows CUDA package for SenseVoiceSmall (`funasr-llamacpp-windows-x64-cuda.zip`) plus Linux / macOS / Windows CPU packages. Download the GGUF model, then run `llama-funasr-sensevoice ... --backend cuda` on supported NVIDIA GPUs. [Release →](https://github.com/modelscope/FunASR/releases/tag/runtime-llamacpp-v0.1.7)
312-
- 2026/06/20: **llama.cpp / GGUF runtime** — run SenseVoice / Paraformer / Fun-ASR-Nano on CPU & edge as a single self-contained binary (a whisper.cpp-style alternative), built-in FSMN-VAD, no Python at runtime. Prebuilt binaries for Linux / macOS / Windows + **q8 quantized models (~half the size, same accuracy)**. [runtime/llama.cpp/](./runtime/llama.cpp/) · [Releases](../../releases)
312+
- 2026/06/20: **llama.cpp / GGUF runtime** — run SenseVoice / Paraformer / Fun-ASR-Nano on CPU & edge as a single self-contained binary (a whisper.cpp-style alternative), built-in FSMN-VAD, no Python at runtime. Prebuilt binaries for Linux / macOS / Windows + **q8 quantized models (~half the size, same accuracy)**. [runtime/llama.cpp/](./runtime/llama.cpp/) · [Releases](https://github.com/modelscope/FunASR/releases)
313313
- 2026/06/21: **v1.3.12** on PyPI — rolling fixes (qwen3-asr language codes, glm_asr, vLLM repetition_penalty). `pip install --upgrade funasr`
314314
- 2026/05/24: **vLLM Inference Engine** — 2-3x faster LLM decoding for Fun-ASR-Nano. Streaming WebSocket service with VAD + Speaker Diarization. [Guide →](docs/vllm_guide.md) · [Realtime WS tuning →](docs/vllm_guide.md#67-production-concurrency-and-multi-process-deployment) · [API stability checklist →](docs/vllm_guide.md#production-api-stability-checklist)
315315
- 2026/05/24: **Dynamic VAD** — adaptive silence threshold (default on). Short sentences stay intact, long segments get auto-split. [Details →](docs/vllm_guide.md#附录dynamicstreamingvad)

examples/industrial_data_pretraining/monotonic_aligner/README_zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(简体中文|[English](./README.md))
1+
(简体中文|[示例目录](../))
22

33
# 语音识别
44

examples/industrial_data_pretraining/paraformer-zh-spk/README_zh.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(简体中文|[English](./README.md))
1+
(简体中文|[示例目录](../))
22

33
FunASR开源了大量在工业数据上预训练模型,您可以在 [模型许可协议](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)下自由使用、复制、修改和分享FunASR模型,下面列举代表性的模型,更多模型请参考 [模型仓库](https://github.com/modelscope/FunASR/tree/main/model_zoo)
44

@@ -433,4 +433,4 @@ result = model(wav_path)
433433
print(result)
434434
```
435435

436-
更多例子请参考 [样例](https://github.com/modelscope/FunASR/tree/main/runtime/python/onnxruntime)
436+
更多例子请参考 [样例](https://github.com/modelscope/FunASR/tree/main/runtime/python/onnxruntime)

examples/industrial_data_pretraining/paraformer_streaming/README_zh.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(简体中文|[English](./README.md))
1+
(简体中文|[示例目录](../))
22

33
FunASR开源了大量在工业数据上预训练模型,您可以在 [模型许可协议](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)下自由使用、复制、修改和分享FunASR模型,下面列举代表性的模型,更多模型请参考 [模型仓库](https://github.com/modelscope/FunASR/tree/main/model_zoo)
44

@@ -433,4 +433,4 @@ result = model(wav_path)
433433
print(result)
434434
```
435435

436-
更多例子请参考 [样例](https://github.com/modelscope/FunASR/tree/main/runtime/python/onnxruntime)
436+
更多例子请参考 [样例](https://github.com/modelscope/FunASR/tree/main/runtime/python/onnxruntime)

model_zoo/modelscope_models_zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
您可以在本协议的条件下自由使用、复制、修改和分享FunASR模型。在使用、复制、修改和分享FunASR模型时,您应当标明模型来源和作者信息。您应当在[FunASR软件]中保留相关模型的名称。完整的模型许可证请参见 [模型许可协议](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)
77

88
## 模型用法
9-
模型用法参考[文档](funasr/quick_start_zh.md)
9+
模型用法参考[文档](../runtime/quick_start_zh.md)
1010

1111
## 模型仓库
1212
这里我们提供了在不同数据集上预训练的模型。模型和数据集的详细信息可在 [ModelScope](https://www.modelscope.cn/models?page=1&tasks=auto-speech-recognition)中找到.

model_zoo/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Here we provided several pretrained models on different datasets. The details of
1515
#### Paraformer
1616

1717

18-
FunASR has open-sourced a large number of pre-trained models on industrial data. You are free to use, copy, modify, and share FunASR models under the [Model License Agreement](./MODEL_LICENSE). Below are some representative models, for more models please refer to the [Model Zoo]().
18+
FunASR has open-sourced a large number of pre-trained models on industrial data. You are free to use, copy, modify, and share FunASR models under the [Model License Agreement](../MODEL_LICENSE). Below are some representative models, for more models please refer to the [Model Zoo](https://github.com/modelscope/FunASR/tree/main/model_zoo).
1919

2020
(Note: 🤗 represents the Huggingface model zoo link, ⭐ represents the ModelScope model zoo link)
2121

model_zoo/readme_zh.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
您可以在本协议的条件下自由使用、复制、修改和分享FunASR模型。在使用、复制、修改和分享FunASR模型时,您应当标明模型来源和作者信息。您应当在[FunASR软件]中保留相关模型的名称。完整的模型许可证请参见 [模型许可协议](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)
77

88
## 模型用法
9-
模型用法参考[文档](funasr/quick_start_zh.md)
9+
模型用法参考[文档](../runtime/quick_start_zh.md)
1010

1111
## 模型仓库
1212
这里我们提供了在不同数据集上预训练的模型。模型和数据集的详细信息可在 [ModelScope](https://www.modelscope.cn/models?page=1&tasks=auto-speech-recognition)中找到.
@@ -24,4 +24,3 @@
2424
| paraformer-zh-streaming <br> ( [](https://modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online/summary) [🤗]() ) | 语音识别,实时 | 60000小时,中文 | 220M |
2525
| paraformer-zh-streaming-small <br> ( [](https://www.modelscope.cn/models/iic/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online/summary) [🤗]() ) | 语音识别,实时 | 60000小时,中文 | 220M |
2626
| paraformer-en <br> ( [](https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-en-16k-common-vocab10020/summary) [🤗]() ) | 语音识别,非实时 | 50000小时,英文 | 220M |
27-

runtime/docs/aliyun_server_tutorial.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,5 @@
5959

6060
<img src="images/aliyun12.png" width="900"/>
6161

62-
上图表示已经成功申请了云服务器,后续可以根据FunASR runtime-SDK部署文档进行一键部署([点击此处](./SDK_tutorial_cn.md)
63-
62+
上图表示已经成功申请了云服务器,后续可以根据FunASR runtime-SDK部署文档进行一键部署([点击此处](./SDK_tutorial_zh.md)
6463

runtime/grpc/Readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ cd /cfs/user/burkliu/work2023/FunASR/funasr/runtime/grpc
3838
```
3939

4040
### 4. Download paraformer model
41-
get model according to [export_model](../../export/README.md)
41+
get model according to [export_model](../docs/benchmark_onnx_cpp.md)
4242

4343
or run code below as default
4444
```shell
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import re
2+
import urllib.parse
3+
from pathlib import Path
4+
5+
6+
ROOT = Path(__file__).resolve().parents[1]
7+
LINK_PATTERN = re.compile(
8+
r"(?<!!)(?:\[[^\]]*\]\(([^)]+)\)|<a\s+[^>]*href=[\"']([^\"']+)[\"'])",
9+
re.IGNORECASE,
10+
)
11+
SKIP_DIRS = {".git", ".venv", "venv", "node_modules", "site", "third_party"}
12+
13+
14+
def _iter_markdown_files():
15+
for path in ROOT.rglob("*.md"):
16+
if path.is_symlink():
17+
continue
18+
if not any(part in SKIP_DIRS for part in path.parts):
19+
yield path
20+
21+
22+
def _is_external_or_anchor(url):
23+
return url.startswith(
24+
(
25+
"#",
26+
"http://",
27+
"https://",
28+
"mailto:",
29+
"tel:",
30+
"javascript:",
31+
"data:",
32+
)
33+
)
34+
35+
36+
def test_relative_markdown_links_point_to_existing_paths():
37+
missing = []
38+
39+
for markdown_path in _iter_markdown_files():
40+
text = markdown_path.read_text(encoding="utf-8", errors="ignore")
41+
for match in LINK_PATTERN.finditer(text):
42+
raw_url = (match.group(1) or match.group(2) or "").strip()
43+
url = raw_url.split()[0].strip("<>")
44+
if not url:
45+
missing.append(f"{markdown_path.relative_to(ROOT)} -> empty link")
46+
continue
47+
if _is_external_or_anchor(url):
48+
continue
49+
50+
target = urllib.parse.unquote(url.split("#", 1)[0])
51+
if not target:
52+
continue
53+
54+
candidate = (
55+
ROOT / target.lstrip("/")
56+
if target.startswith("/")
57+
else markdown_path.parent / target
58+
)
59+
if not candidate.exists():
60+
missing.append(f"{markdown_path.relative_to(ROOT)} -> {raw_url}")
61+
62+
assert missing == []

0 commit comments

Comments
 (0)