|
1 | 1 | { |
2 | 2 | "schema_version": 1, |
3 | | - "verified": "2026-08-11", |
| 3 | + "verified": "2026-08-13", |
4 | 4 | "deployments": [ |
5 | 5 | { |
6 | 6 | "id": "vllm", |
|
244 | 244 | "workloads": ["edge", "batch", "private-api"], |
245 | 245 | "hardware": ["cpu", "nvidia-gpu", "desktop-edge-gpu"], |
246 | 246 | "priorities": ["portability", "compatibility"], |
247 | | - "models": ["Fun-ASR-Nano-2512"], |
| 247 | + "models": ["Fun-ASR-Nano-2512", "SenseVoice-Small"], |
248 | 248 | "operating_systems": ["Linux", "macOS", "Windows"], |
249 | | - "interfaces": ["CLI", "OpenAI-compatible HTTP"], |
250 | | - "tested": {"funasr": "Fun-ASR-Nano-2512", "runtime": "audio.cpp@1778b23a", "verified": "2026-07-30"}, |
| 249 | + "interfaces": ["CLI", "OpenAI-compatible HTTP", "Buffered streaming CLI/SSE"], |
| 250 | + "tested": {"funasr": "Fun-ASR-Nano-2512 + SenseVoice-Small", "runtime": "audio.cpp@1778b23a + SenseVoice candidate@b748ca5", "verified": "2026-08-13"}, |
251 | 251 | "commands": { |
252 | 252 | "install": [ |
253 | 253 | "git clone https://github.com/0xShug0/audio.cpp.git && cd audio.cpp", |
254 | | - "bash scripts/build_linux.sh --backend cpu --model-set custom --models fun_asr_nano --target audiocpp_cli --target audiocpp_server", |
255 | | - "python3 tools/model_manager_v2.py install fun_asr_nano" |
| 254 | + "git checkout b748ca509adc16c15aff44f76456fd47b257c933", |
| 255 | + "bash scripts/build_linux.sh --backend cpu --model-set custom --models fun_asr_nano,sense_asr --target audiocpp_cli --target audiocpp_server", |
| 256 | + "python3 tools/model_manager_v2.py install fun_asr_nano", |
| 257 | + "python3 tools/model_manager_v2.py install sensevoice_small_q8" |
256 | 258 | ], |
257 | 259 | "launch": [ |
258 | 260 | "build/linux-cpu-release/bin/audiocpp_cli --task asr --family fun_asr_nano --model models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf --backend cpu --audio speech.wav --text-out transcript.txt", |
259 | | - "printf '%s\\n' '{\"host\":\"127.0.0.1\",\"port\":8080,\"backend\":\"cpu\",\"threads\":4,\"lazy_load\":true,\"models\":[{\"id\":\"fun-asr-nano\",\"family\":\"fun_asr_nano\",\"path\":\"models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf\",\"task\":\"asr\",\"mode\":\"offline\"}]}' > server.json", |
| 261 | + "build/linux-cpu-release/bin/audiocpp_cli --task asr --family sense_asr --model models/SenseVoice-Small-GGUF/sensevoice-small-q8-audiocpp-v1.gguf --backend cpu --audio speech.wav --text-out sensevoice.txt", |
| 262 | + "build/linux-cpu-release/bin/audiocpp_cli --task asr --family sense_asr --model models/SenseVoice-Small-GGUF/sensevoice-small-q8-audiocpp-v1.gguf --backend cpu --mode streaming --audio - --request-option audio_chunk_duration_sec=5 --request-option audio_chunk_mode=none < 16k_s16.pcm", |
| 263 | + "printf '%s\\n' '{\"host\":\"127.0.0.1\",\"port\":8080,\"backend\":\"cpu\",\"threads\":4,\"lazy_load\":true,\"models\":[{\"id\":\"fun-asr-nano\",\"family\":\"fun_asr_nano\",\"path\":\"models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf\",\"task\":\"asr\",\"mode\":\"offline\"},{\"id\":\"sense-asr\",\"family\":\"sense_asr\",\"path\":\"models/SenseVoice-Small-GGUF/sensevoice-small-q8-audiocpp-v1.gguf\",\"task\":\"asr\",\"mode\":\"streaming\"}]}' > server.json", |
260 | 264 | "build/linux-cpu-release/bin/audiocpp_server --config server.json" |
261 | 265 | ], |
262 | 266 | "health": [ |
263 | 267 | "curl -fsS http://127.0.0.1:8080/health", |
264 | 268 | "curl -fsS http://127.0.0.1:8080/v1/models" |
265 | 269 | ], |
266 | 270 | "smoke": [ |
267 | | - "curl -fsS http://127.0.0.1:8080/v1/audio/transcriptions -F model=fun-asr-nano -F language=auto -F file=@speech.wav" |
| 271 | + "curl -fsS http://127.0.0.1:8080/v1/audio/transcriptions -F model=fun-asr-nano -F language=auto -F file=@speech.wav", |
| 272 | + "curl -fsS http://127.0.0.1:8080/v1/audio/transcriptions -F model=sense-asr -F language=auto -F file=@speech.wav" |
268 | 273 | ] |
269 | 274 | }, |
270 | 275 | "evidence": [ |
271 | 276 | {"label": "audio.cpp Fun-ASR-Nano guide", "url": "https://github.com/0xShug0/audio.cpp/blob/1778b23a5f6a4951c788e4bb0e7baa04f20012a2/docs/models/fun_asr_nano.md"}, |
272 | 277 | {"label": "merged implementation", "url": "https://github.com/0xShug0/audio.cpp/pull/155"}, |
273 | | - {"label": "pinned GGUF package", "url": "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512-GGUF/tree/ce72677f84900f0dc57f498ace253bfb3c9155b6"} |
| 278 | + {"label": "pinned Fun-ASR-Nano GGUF package", "url": "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512-GGUF/tree/ce72677f84900f0dc57f498ace253bfb3c9155b6"}, |
| 279 | + {"label": "SenseVoice candidate implementation (6/6 CI)", "url": "https://github.com/0xShug0/audio.cpp/pull/219"}, |
| 280 | + {"label": "pinned SenseVoice GGUF package (SHA-256 4dedf169f625437fb336f2959674f399819729a765e184128c0e25a6e16ff0ec)", "url": "https://huggingface.co/FunAudioLLM/SenseVoiceSmall-GGUF-audiocpp/tree/5c3fcfe748a8714216bc135476d5863084fddb72"} |
274 | 281 | ], |
275 | 282 | "benchmarks": [ |
276 | 283 | { |
|
285 | 292 | "qualification": "Single-sample parity smoke, not a capacity benchmark. Reproduce on target hardware with production audio and concurrency.", |
286 | 293 | "source": "https://github.com/0xShug0/audio.cpp/blob/1778b23a5f6a4951c788e4bb0e7baa04f20012a2/docs/models/fun_asr_nano.md", |
287 | 294 | "verified": "2026-07-29" |
| 295 | + }, |
| 296 | + { |
| 297 | + "model": "SenseVoice-Small Q8_0 GGUF candidate", |
| 298 | + "runtime": "audio.cpp native sense_asr candidate b748ca5", |
| 299 | + "hardware": "CPU; validation host details are not a cross-hardware benchmark contract", |
| 300 | + "workload": "Offline Chinese transcription plus buffered streaming partials", |
| 301 | + "audio": "Known 16 kHz reference WAV and PCM stream", |
| 302 | + "settings": "Standalone schema-v1 Q8_0 GGUF; CPU backend; two-second streaming windows during validation", |
| 303 | + "timing_scope": "Functional parity and loader validation; no capacity claim", |
| 304 | + "result": "919 tensors loaded without sidecar overrides; transcript 开饭时间早上9点至下午5点。; GGUF SHA-256 4dedf169f625437fb336f2959674f399819729a765e184128c0e25a6e16ff0ec", |
| 305 | + "qualification": "Candidate PR with all six official CI jobs passing; pin the exact commit until upstream merges it.", |
| 306 | + "source": "https://github.com/0xShug0/audio.cpp/pull/219", |
| 307 | + "verified": "2026-08-13" |
288 | 308 | } |
289 | 309 | ], |
290 | 310 | "translations": { |
291 | 311 | "zh": { |
292 | | - "name": "audio.cpp 原生 Fun-ASR-Nano", |
293 | | - "summary": "用原生 C++ / GGML 在 CPU 或 CUDA 上运行 Fun-ASR-Nano Q8_0,并提供 CLI 与兼容 OpenAI 的本地转写服务。", |
294 | | - "fit": ["不希望安装 Python 推理环境", "桌面、边缘与离线批量转写", "需要兼容 OpenAI 的本地音频接口"], |
295 | | - "not_fit": ["需要实时流式结果或时间戳", "需要 Fun-ASR-Nano 之外的 FunASR 模型", "尚未在目标硬件完成容量与准确率复测的公网服务"], |
296 | | - "selection_reason": "原生 GGML、Q8_0 模型和统一 CLI/HTTP 接口适合低依赖的离线 Fun-ASR-Nano 部署。", |
297 | | - "primary_limitation": "当前只输出离线转写文本,不暴露 streaming 或 timestamps;其他模型家族仍应选择对应 FunASR 运行时。", |
| 312 | + "name": "audio.cpp 原生 Fun-ASR-Nano 与 SenseVoice", |
| 313 | + "summary": "用原生 C++ / GGML 在 CPU 或 GPU 上运行 Fun-ASR-Nano 与 SenseVoice Q8,并提供离线 CLI、兼容 OpenAI 的本地接口和 SenseVoice 缓冲流式结果。", |
| 314 | + "fit": ["不希望安装 Python 推理环境", "桌面、边缘、离线批量与低依赖私有部署", "需要兼容 OpenAI 的本地音频接口或 SenseVoice 多语言流式 partial"], |
| 315 | + "not_fit": ["需要词级时间戳或严格低延迟在线流式", "不接受固定候选提交的生产环境", "尚未在目标硬件完成容量与准确率复测的公网服务"], |
| 316 | + "selection_reason": "稳定的 Fun-ASR-Nano 路径与候选 SenseVoice 路径共用原生 GGML、Q8 模型及 CLI/HTTP 接口,适合低依赖部署。", |
| 317 | + "primary_limitation": "Fun-ASR-Nano 已合并稳定;SenseVoice 仍是固定到 b748ca5 的候选 PR,虽已通过 6/6 CI,但合并前不应跟随浮动分支;当前两条路径都不提供词级 timestamps。", |
298 | 318 | "status_label": "社区验证", |
299 | | - "operations": ["固定 audio.cpp 提交与 GGUF revision", "先用已知 WAV 核对 transcript 再接业务流量", "分别记录冷启动、预热 RTF、内存与并发队列"], |
| 319 | + "operations": ["分别固定稳定 Nano 提交、SenseVoice 候选提交与 GGUF revision", "先用已知 WAV 核对两种模型的 transcript 再接业务流量", "分别记录冷启动、预热 RTF、内存、流式窗口与并发队列"], |
300 | 320 | "security": ["服务默认绑定 127.0.0.1 或可信内网", "在反向代理限制上传大小、MIME、认证与并发", "只加载经过 SHA-256 校验的 GGUF 和配置"], |
301 | | - "troubleshooting": ["先用 CPU + Q8_0 路径排除 CUDA 环境问题", "构建 backend 必须与运行参数一致", "输入异常时先核对 WAV、单声道和 16 kHz 转换路径"] |
| 321 | + "troubleshooting": ["先用 CPU + Q8_0 路径排除 GPU 环境问题", "构建 backend 必须与运行参数一致", "SenseVoice 输入异常时先核对 schema-v1 GGUF revision、WAV 或 16 kHz 单声道 PCM"] |
302 | 322 | }, |
303 | 323 | "en": { |
304 | | - "name": "audio.cpp native Fun-ASR-Nano", |
305 | | - "summary": "Run Fun-ASR-Nano Q8_0 with native C++ and GGML on CPU or CUDA, using a CLI or local OpenAI-compatible transcription service.", |
306 | | - "fit": ["No Python inference environment", "Desktop, edge, and offline batch transcription", "A local OpenAI-compatible audio endpoint is required"], |
307 | | - "not_fit": ["Realtime streaming results or timestamps", "FunASR model families other than Fun-ASR-Nano", "Internet-facing service before capacity and accuracy tests on target hardware"], |
308 | | - "selection_reason": "Native GGML, Q8_0 weights, and shared CLI/HTTP surfaces fit low-dependency offline Fun-ASR-Nano deployment.", |
309 | | - "primary_limitation": "The current path returns offline transcript text only and exposes neither streaming nor timestamps; use the corresponding FunASR runtime for other model families.", |
| 324 | + "name": "audio.cpp native Fun-ASR-Nano and SenseVoice", |
| 325 | + "summary": "Run Fun-ASR-Nano and SenseVoice Q8 with native C++ and GGML on CPU or GPU, using offline CLI, a local OpenAI-compatible API, and buffered SenseVoice streaming results.", |
| 326 | + "fit": ["No Python inference environment", "Desktop, edge, offline batch, and low-dependency private deployment", "A local OpenAI-compatible endpoint or multilingual SenseVoice streaming partials are required"], |
| 327 | + "not_fit": ["Word-level timestamps or strict low-latency online streaming", "Production environments that cannot pin a candidate commit", "Internet-facing service before capacity and accuracy tests on target hardware"], |
| 328 | + "selection_reason": "The stable Fun-ASR-Nano path and candidate SenseVoice path share native GGML, Q8 weights, and CLI/HTTP surfaces for low-dependency deployment.", |
| 329 | + "primary_limitation": "Fun-ASR-Nano is merged and stable; SenseVoice remains a candidate pinned to b748ca5. Its 6/6 CI is green, but do not track a floating branch before merge. Neither path currently provides word-level timestamps.", |
310 | 330 | "status_label": "Community verified", |
311 | | - "operations": ["Pin the audio.cpp commit and GGUF revision", "Verify a known WAV transcript before business traffic", "Measure cold start, warm RTF, memory, and concurrent queueing separately"], |
| 331 | + "operations": ["Pin the stable Nano commit, SenseVoice candidate commit, and both GGUF revisions", "Verify known WAV transcripts with both models before business traffic", "Measure cold start, warm RTF, memory, streaming windows, and concurrent queueing separately"], |
312 | 332 | "security": ["Bind the service to 127.0.0.1 or a trusted private network", "Enforce upload size, MIME, authentication, and concurrency at the proxy", "Load only GGUF and configuration files verified with SHA-256"], |
313 | | - "troubleshooting": ["Start with CPU and Q8_0 to isolate CUDA setup", "Match the compiled backend to the runtime argument", "For input failures, verify WAV decoding, mono conversion, and 16 kHz resampling"] |
| 333 | + "troubleshooting": ["Start with CPU and Q8_0 to isolate GPU setup", "Match the compiled backend to the runtime argument", "For SenseVoice input failures, verify the schema-v1 GGUF revision plus WAV or 16 kHz mono PCM"] |
314 | 334 | } |
315 | 335 | } |
316 | 336 | }, |
|
0 commit comments