feat: add funasr_asr_python local FunASR (SenseVoice) ASR extension#2191
feat: add funasr_asr_python local FunASR (SenseVoice) ASR extension#2191LauraGPT wants to merge 1 commit into
Conversation
ede91cf to
43cbedc
Compare
|
CI note for reviewers: the only failing check is not a code/test failure. I inspected So this check is blocked by the review action's permission policy for external contributors, not by the FunASR extension code. The PR remains |
|
Fresh FunASR/SenseVoice-side validation recheck (2026-07-07 UTC):
Caveat: my bare checkout does not include installed/materialized |
|
I checked the only failing check on this PR ( The job exits before doing a review because the workflow sees the PR actor with read-only repository permission: So the current red check is a Claude review workflow permission issue on |
Adds a
funasr_asr_pythonASR extension: a local, self-hosted speech-to-text backend powered by FunASR (SenseVoice / Fun-ASR-Nano / Paraformer). It mirrors the existingwhisper_stt_pythonextension, swapping faster-whisper for a local FunASR model — strong on Chinese / Cantonese / Japanese / Korean, runs on CPU or CUDA, no API key.What it does
FunASRExtension(AsyncASRBaseExtension)(vendorfunasr), structured exactly likeWhisperSTTExtension.FunASRClientbuffers 16-bit PCM, converts to float32, runsAutoModel.generate(...)off the event loop, and emitsASRResultviarich_transcription_postprocess. Default modeliic/SenseVoiceSmall(auto language); swap toFunAudioLLM/Fun-ASR-Nano-2512on GPU via config.funasris the only added dependency.Testing
FunASRClientwas verified end-to-end locally (16 kHz 16-bit PCM → FunASR → transcript via the result callback). All files passastsyntax checks and the JSON manifests validate.ten_runtime/ten_ai_baseare not on PyPI, so the full in-framework wiring can't be imported standalone — the extension faithfully mirrors the workingwhisper_stt_python, and I'd appreciate CI / a maintainer confirming the framework integration. Happy to adjust.