diff --git a/docs/community_growth_20k.md b/docs/community_growth_20k.md index e2993c618..815e83711 100644 --- a/docs/community_growth_20k.md +++ b/docs/community_growth_20k.md @@ -363,11 +363,11 @@ Paste the Markdown output into launch notes, weekly community updates, or releas - [x] Update PyPI release description if needed. On 2026-07-23, the live PyPI `funasr 1.3.26` page was audited: its long description already comes from `README.md` and includes the current deployment-routing markers `OpenAI-compatible`, `/v1/audio/transcriptions`, `vllm`, `runtime-llamacpp-v0.1.8`, `GGUF`, and `funasr==1.3.26`. The package summary was prepared for the next PyPI publish by updating `setup.py` to `OpenAI-compatible speech recognition toolkit with WebSocket streaming, vLLM acceleration, and llama.cpp/GGUF edge runtime`, plus discovery keywords for `openai-compatible`, `websocket`, `vllm`, `gguf`, and `llama-cpp`; the currently published PyPI metadata remains `1.3.26` until the next weekly release upload. - [ ] Update Hugging Face organization/model cards. The `FunAudioLLM/Fun-ASR-MLT-Nano-2512` README update is complete: HF PR [#5](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512/discussions/5) merged commit `3dd802bfb8a05dadc440c9d9fc84ecfc1e15c0ff`, and a 2026-07-23 live Hub download confirmed `main` now includes `python -m pip install -U "funasr>=1.3.26"` before optional demo-repo setup. Prepared README patches for `FunAudioLLM/Fun-ASR-Nano-2512` and `FunAudioLLM/SenseVoiceSmall` would add the same `funasr>=1.3.26` install floor, but the current `langgz` token still cannot write those model cards: direct upload fails with `403 Forbidden: pass create_pr=1`, and the Hub's suggested `--create-pr` path also fails at `preupload/main?create_pr=1` with `403 Forbidden: Authorization error`. Retry after model-card preupload/write permission is granted on those two repos. - [ ] Update ModelScope model cards and demos. On 2026-07-23, `scripts/sync_modelscope_model_cards.py` was added to generate and optionally upload current ModelScope README updates for `FunAudioLLM/Fun-ASR-Nano-2512` (`README.md`, `README_zh.md`) and `iic/SenseVoiceSmall` (`README.md`). The prepared cards add `python -m pip install -U "funasr>=1.3.26" modelscope` and `torch.cuda.is_available()` CUDA-wheel verification guidance, matching the clean H100 quickstart evidence. Prepared files are under `/cpfs_speech/user/zhifu.gzf/.cache/funasr-ops/modelscope-card-sync-20260723/`. A live upload attempt with the existing 32-byte `.modelscope/credentials/session` failed: SDK uploads returned HTTP 400 from the ModelScope LFS batch API, and CLI upload reported `No credentials found`; the remaining blocker is a real ModelScope access token from `https://modelscope.cn/my/myaccesstoken`. Do not mark complete until those three ModelScope README files are uploaded and re-downloaded from the live model cards. -- [x] Update homepage hero and docs entry points. On 2026-07-23, the live homepage entry points were audited and added to the public website contract. [`https://www.funasr.com/`](https://www.funasr.com/) visibly leads with the Chinese industrial speech-recognition hero, links `/donors.html`, and exposes the OpenAI-compatible `/v1/audio/transcriptions` and `vLLM` deployment path. [`https://www.funasr.com/en/`](https://www.funasr.com/en/) exposes `Industrial Speech Recognition`, `OpenAI-compatible`, `/v1/audio/transcriptions`, and `vLLM`. `scripts/check_funasr_website_static.py` now patrols both homepages plus the ecosystem, donor, CLI tutorial, llama.cpp landing, and llama.cpp blog pages; the live check prints `funasr.com static page contract passed for 11 pages`. +- [x] Update homepage hero and docs entry points. On 2026-07-23, the live homepage entry points were audited and added to the public website contract. [`https://www.funasr.com/`](https://www.funasr.com/) visibly leads with the Chinese industrial speech-recognition hero, links `/donors.html`, and exposes the OpenAI-compatible `/v1/audio/transcriptions` and `vLLM` deployment path. [`https://www.funasr.com/en/`](https://www.funasr.com/en/) exposes `Industrial Speech Recognition`, `OpenAI-compatible`, `/v1/audio/transcriptions`, and `vLLM`. The bilingual launch guide at `funasr-v1-3-26-openai-vllm-llama-cpp.html` adds one owned conversion path from the blog's existing traffic to `funasr==1.3.26`, the OpenAI-compatible API, the H100-validated vLLM path, `runtime-llamacpp-v0.1.8`, and all four ecosystem repositories. `scripts/check_funasr_website_static.py` now patrols both homepages plus the ecosystem, donor, CLI tutorial, llama.cpp landing, llama.cpp blog, and bilingual v1.3.26 launch pages; the live check prints `funasr.com static page contract passed for 13 pages`. ### Week 4: Distribution and feedback -- [x] Share the release in relevant developer communities. On 2026-07-23, GitHub Discussion [`modelscope/FunASR#3376`](https://github.com/modelscope/FunASR/discussions/3376) was published in the `Announcements` category with the title `FunASR v1.3.26: OpenAI-compatible ASR deployment, vLLM, and llama.cpp runtime`. It routes readers to `funasr==1.3.26`, `/v1/audio/transcriptions`, WebSocket realtime examples, `docs/vllm_guide.md`, the H100 vLLM smoke evidence, `runtime-llamacpp-v0.1.8`, troubleshooting docs, and asks real app users to share hardware, model path, latency, and deployment friction. +- [x] Share the release in relevant developer communities. On 2026-07-23, GitHub Discussion [`modelscope/FunASR#3376`](https://github.com/modelscope/FunASR/discussions/3376) was published in the `Announcements` category with the title `FunASR v1.3.26: OpenAI-compatible ASR deployment, vLLM, and llama.cpp runtime`. It routes readers to `funasr==1.3.26`, `/v1/audio/transcriptions`, WebSocket realtime examples, `docs/vllm_guide.md`, the H100 vLLM smoke evidence, `runtime-llamacpp-v0.1.8`, troubleshooting docs, and asks real app users to share hardware, model path, latency, and deployment friction. The same release story is now published on the owned website in Chinese and English at [`/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html`](https://www.funasr.com/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html) and [`/en/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html`](https://www.funasr.com/en/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html), with featured entry points on both blog indexes and direct links to all four repositories. - [x] Pin a GitHub discussion for the release. On 2026-07-23, [`modelscope/FunASR#3376`](https://github.com/modelscope/FunASR/discussions/3376) was pinned through the repository's authenticated Discussions admin UI. GitHub returned `Discussion has successfully been pinned`, and the admin controls now expose `Edit pinned discussion` and `Unpin discussion`; the `v1.3.26` OpenAI-compatible ASR, vLLM, and llama.cpp release story is therefore visible at the top of the public Discussions page. - [x] Triage all new issues within 48 hours. On 2026-07-23, all four repositories were patrolled with the GitHub token on `ind-gpu8`: `modelscope/FunASR`, `FunAudioLLM/Fun-ASR`, `FunAudioLLM/SenseVoice`, and `modelscope/FunClip` all had `0` open pull requests; Fun-ASR, SenseVoice, and FunClip had `0` open issues. The only open FunASR issues were already triaged: #3302 is labeled `question` + `needs feedback` and is waiting for the reporter to retest the merged hotword/postprocess fix, while #3104 is labeled `enhancement` + `needs maintainer decision` and is waiting on release-scope confirmation for RL training code. No unlabelled or unowned open issue remained in the 48-hour window. - [x] Convert top 3 support questions into docs. On 2026-07-23, the latest 80 FunASR issues were triaged into three repeat support blockers: install / hub / model-id selection (#3321, #3045, #3042, #2973, #2976), llama.cpp / GGUF / CUDA-Vulkan runtime packages (#3298, #3297, #3296, #3289, #3243), and realtime / VAD / vLLM / server output behavior (#3101, #3109, #3038, #3031, #2968, #2965). `docs/troubleshooting.md` and `docs/troubleshooting_zh.md` now start with a Top support questions section that maps those three issue clusters to the existing install, model-download, OpenAI-compatible server, WebSocket, and llama.cpp / GGUF FAQ anchors. diff --git a/scripts/check_funasr_website_static.py b/scripts/check_funasr_website_static.py index 98e83bede..87dc37230 100755 --- a/scripts/check_funasr_website_static.py +++ b/scripts/check_funasr_website_static.py @@ -59,12 +59,36 @@ PAGE_CONTRACTS: dict[str, PageContract] = { forbidden=("16K+",), ), f"{BASE_URL}/donors.html": PageContract( - required=("捐赠金额用于购买服务器与", "www.funasr.com", "域名"), - visible_required=("捐赠金额用于购买服务器与", "www.funasr.com", "域名"), + required=( + "捐赠资金用于社区基础设施建设", + "购买和维护服务器", + "购买、续费和维护", + "www.funasr.com", + "域名", + ), + visible_required=( + "捐赠资金用于社区基础设施建设", + "购买和维护服务器", + "购买、续费和维护", + "www.funasr.com", + "域名", + ), ), f"{BASE_URL}/en/donors.html": PageContract( - required=("Donations helped purchase servers", "www.funasr.com", "domain"), - visible_required=("Donations helped purchase servers", "www.funasr.com", "domain"), + required=( + "Donations fund community infrastructure", + "server purchase and maintenance", + "purchase, renewal, and maintenance", + "www.funasr.com", + "domain", + ), + visible_required=( + "Donations fund community infrastructure", + "server purchase and maintenance", + "purchase, renewal, and maintenance", + "www.funasr.com", + "domain", + ), ), f"{BASE_URL}/blog/funasr-cli-transcribe-command-line.html": PageContract( required=("推荐 funasr ≥ 1.3.26", "/donors.html"), @@ -104,6 +128,34 @@ PAGE_CONTRACTS: dict[str, PageContract] = { ), forbidden=("runtime-llamacpp-v0.1.1",), ), + f"{BASE_URL}/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html": PageContract( + required=( + "funasr==1.3.26", + "/v1/audio/transcriptions", + "RTFx 340", + "runtime-llamacpp-v0.1.8", + "https://github.com/modelscope/FunASR", + "https://github.com/FunAudioLLM/Fun-ASR", + "https://github.com/FunAudioLLM/SenseVoice", + "https://github.com/modelscope/FunClip", + "/donors.html", + ), + forbidden=("funasr==1.3.10", "runtime-llamacpp-v0.1.1"), + ), + f"{BASE_URL}/en/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html": PageContract( + required=( + "funasr==1.3.26", + "/v1/audio/transcriptions", + "RTFx 340", + "runtime-llamacpp-v0.1.8", + "https://github.com/modelscope/FunASR", + "https://github.com/FunAudioLLM/Fun-ASR", + "https://github.com/FunAudioLLM/SenseVoice", + "https://github.com/modelscope/FunClip", + "/en/donors.html", + ), + forbidden=("funasr==1.3.10", "runtime-llamacpp-v0.1.1"), + ), } diff --git a/tests/test_check_funasr_website_static.py b/tests/test_check_funasr_website_static.py index 792999dad..9da1cbbe5 100644 --- a/tests/test_check_funasr_website_static.py +++ b/tests/test_check_funasr_website_static.py @@ -47,10 +47,13 @@ def test_website_contract_accepts_current_public_copy():
54.3K stars
""", "https://www.funasr.com/donors.html": """ - 捐赠金额用于购买服务器与 www.funasr.com 域名,帮助官网和社区资料持续在线。 + 捐赠资金用于社区基础设施建设,包括购买和维护服务器,以及购买、续费和维护 + www.funasr.com 域名。 """, "https://www.funasr.com/en/donors.html": """ - Donations helped purchase servers and the www.funasr.com domain. + Donations fund community infrastructure, including server purchase and maintenance, + as well as the purchase, renewal, and maintenance of the + www.funasr.com domain. """, "https://www.funasr.com/blog/funasr-cli-transcribe-command-line.html": """ pip install -U funasr # 推荐 funasr ≥ 1.3.26 @@ -81,6 +84,28 @@ def test_website_contract_accepts_current_public_copy(): Vulkan / CUDA Thanks """, + "https://www.funasr.com/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html": """ + funasr==1.3.26 + /v1/audio/transcriptions + RTFx 340 + runtime-llamacpp-v0.1.8 + https://github.com/modelscope/FunASR + https://github.com/FunAudioLLM/Fun-ASR + https://github.com/FunAudioLLM/SenseVoice + https://github.com/modelscope/FunClip + 功德榜 + """, + "https://www.funasr.com/en/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html": """ + funasr==1.3.26 + /v1/audio/transcriptions + RTFx 340 + runtime-llamacpp-v0.1.8 + https://github.com/modelscope/FunASR + https://github.com/FunAudioLLM/Fun-ASR + https://github.com/FunAudioLLM/SenseVoice + https://github.com/modelscope/FunClip + Thanks + """, } assert checker.validate_pages(pages) == [] @@ -93,6 +118,19 @@ def test_website_contract_includes_homepage_entrypoints(): assert "https://www.funasr.com/en/" in checker.PAGE_CONTRACTS +def test_website_contract_includes_v1326_launch_articles(): + checker = _load_module() + + assert ( + "https://www.funasr.com/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html" + in checker.PAGE_CONTRACTS + ) + assert ( + "https://www.funasr.com/en/blog/funasr-v1-3-26-openai-vllm-llama-cpp.html" + in checker.PAGE_CONTRACTS + ) + + def test_website_contract_reports_stale_runtime_and_star_copy(): checker = _load_module() @@ -127,13 +165,13 @@ def test_website_contract_requires_visible_donor_usage_copy(): } pages["https://www.funasr.com/donors.html"] = """ - + FunASR 社区功德榜 """ pages["https://www.funasr.com/en/donors.html"] = """ - + FunASR Community Thanks """ @@ -142,12 +180,12 @@ def test_website_contract_requires_visible_donor_usage_copy(): assert any( "donors.html" in failure - and "visible text missing `捐赠金额用于购买服务器与`" in failure + and "visible text missing `购买和维护服务器`" in failure for failure in failures ) assert any( "en/donors.html" in failure - and "visible text missing `Donations helped purchase servers`" in failure + and "visible text missing `server purchase and maintenance`" in failure for failure in failures ) diff --git a/tests/test_growth_plan_doc.py b/tests/test_growth_plan_doc.py index c6cd49bb1..088421c27 100644 --- a/tests/test_growth_plan_doc.py +++ b/tests/test_growth_plan_doc.py @@ -355,7 +355,8 @@ def test_growth_plan_records_homepage_entrypoint_completion(): "`/v1/audio/transcriptions`", "`vLLM`", "`/donors.html`", - "funasr.com static page contract passed for 11 pages", + "funasr.com static page contract passed for 13 pages", + "funasr-v1-3-26-openai-vllm-llama-cpp.html", ] for marker in required_markers: assert marker in text