Skip to content

本地模型增加whisper相关模型的支持; 增加qwen3-asr的rust版本, 相比C版本速度更快 - #940

Draft
jimersylee wants to merge 1 commit into
Open-Less:betafrom
jimersylee:feat/local-whisper-provider
Draft

本地模型增加whisper相关模型的支持; 增加qwen3-asr的rust版本, 相比C版本速度更快#940
jimersylee wants to merge 1 commit into
Open-Less:betafrom
jimersylee:feat/local-whisper-provider

Conversation

@jimersylee

@jimersylee jimersylee commented Aug 10, 2026

Copy link
Copy Markdown

feat(local-asr): 支持可选本地 Whisper 与 Qwen3 后端

摘要

让 OpenLess 的本地 ASR 渠道可按操作系统选择合适后端:macOS 可选 Whisper、Qwen3 MLX/Metal 或 Qwen3 C;Linux 使用 Qwen3 C;Windows 保持原有本地方案。

修复 / 新增 / 改进

  • 新增 Whisper Large-v3 Turbo 本地批量解码。
  • 新增 Qwen3-ASR MLX/Metal 与 C/CPU 两个独立渠道。
  • 根据操作系统过滤不支持的渠道,并兼容旧 local-qwen3 配置。
  • 修复 Qwen3 输出开头中文文本可能丢失的问题。
  • 修复 MLX 跨线程推理 stream 与新版 MLX FFT API 兼容问题。
  • 修复本地模型页多个模型同时显示“当前使用”的状态判断。
  • 增加 macOS Metal Toolchain 缺失时的应用内引导。
  • 固定 Qwen3-ASR 与 mlx-c fork 子模块版本,保证补丁可追溯。

兼容

  • 不包含:

    • Windows Qwen3-ASR 支持;Windows 继续使用现有 Foundry / sherpa-onnx 本地渠道。
    • 云端 ASR 协议或渠道行为变更。
  • 对现有用户 / 本地环境 / 构建流程的影响:

    • local-qwen3 配置继续可用:macOS 映射到 MLX,Linux 映射到 C。
    • 已下载的 Qwen3 模型可在 MLX 和 C 后端之间复用,无需重新下载。
    • 首次构建需递归初始化子模块:
git submodule update --init --recursive
  • macOS 使用 MLX 时仍需已安装 Metal Toolchain;应用会提供引导。

测试计划

  • 命令:pnpm test

  • 结果:通过,包含前端构建及 44 项前端检查。

  • 证据路径:openless-all/app/src/pages/settings/ChannelList.test.ts

  • 命令:rustc --edition 2021 --test src/asr_output.rs -o /private/tmp/qwen3-asr-output-test && /private/tmp/qwen3-asr-output-test

  • 结果:通过,验证 Qwen3 输出解析不会吞掉开头文本。

  • 证据路径:openless-all/app/src-tauri/vendor/qwen3-asr-rs/src/asr_output.rs

  • 命令:git diff --check

  • 结果:通过。

  • 证据路径:本 PR 全部差异。

模型下载增加whisper相关的模型

Screenshot 2026-08-10 at 09-40-46 ## 渠道增加qwen3-asr的mlx版本, whisper Screenshot 2026-08-10 at 09-42-00

性能对比

原版qwen3-asr

Screenshot 2026-08-10 at 09-43-34

MacOS的MLX加速版本

Screenshot 2026-08-10 at 09-44-00

@H-Chris233 H-Chris233 self-assigned this Aug 10, 2026
@H-Chris233

Copy link
Copy Markdown
Collaborator

哇!这是一个很奇妙的改进!我会开始着手审查。

@H-Chris233

Copy link
Copy Markdown
Collaborator

审查结论:当前建议暂不合并。审查基于 beta@d9612482cd0bc3

这个 PR 的目标是为本地 ASR 增加 Whisper、Qwen3 MLX/Metal、Qwen3 C 后端,并扩展 Linux 支持、兼容旧配置和修复 Qwen3 中文开头丢字。方向没问题,但目前有两个会阻断构建/发布的 P1:

P1:递归子模块初始化无法成功

PR 要求执行:

git submodule update --init --recursive

但当前依赖图不可递归拉取:

  • 顶层 .gitmodules 使用 [email protected]:jimersylee/qwen3_asr_rs.git,未配置 GitHub SSH 密钥的贡献者无法拉取。
  • 即使手工改成 HTTPS,固定的 qwen3-asr-rs@88f7f4a 内部仍将 mlx-c 指向 ml-explore/mlx-c,而 gitlink 73360af... 只存在于 jimersylee/mlx-c:openless-patches。实际复现为:
    fatal: remote error: upload-pack: not our ref 73360af...

仓库的 Android、Windows、Linux、macOS CI 都使用 submodules: recursive,因此会在构建前失败。建议顶层改 HTTPS,并将嵌套 mlx-c URL 指向真正包含该提交的仓库,或改为上游可达提交。

P1:Intel macOS 发布构建会失败

Cargo.toml 对所有 macOS 架构启用了 qwen3-asr-rs/mlx,但发布矩阵明确包含 x86_64-apple-darwin。固定版本的 MLX 默认 MLX_ENABLE_X64_MAC=OFF,会直接报:

Building for x86_64 on macOS is not supported.

建议把 MLX 依赖、渠道和 UI 限制为 target_arch = "aarch64";Intel Mac 只开放 Qwen3 C/CPU 和 Whisper。若确实要支持 MLX x64 CPU,需要显式配置并加入发布矩阵验证。

P2:旧 local-qwen3 只完成了后端兼容

后端能映射旧 ID,但前端已从 ASR_PRESETSLOCAL_ASR_PROVIDER_IDS 删除旧 ID。现有用户编辑旧渠道时,下拉框没有当前值,并会被误当成云端渠道,显示 API Key、Base URL、Model 字段。

建议增加隐藏兼容 preset/predicate,或加载时按 OS 一次性迁移 provider type。

P2:现有 Qwen3 C 行为被未披露地改成批量解码

local_provider.rs 删除了 transcribe_stream_with_handlerlocal-asr-token 事件。旧 local-qwen3 用户会失去胶囊里的实时中间文本。

若这是明确产品决策,请在 PR 兼容说明中披露并补回归测试;否则建议 C 后端保留原流式路径。

P2:Metal Toolchain 不是“缺失时的应用内引导”

pretauri 在 Toolchain 缺失时会直接阻止应用启动,而 MetalToolchainGuide 又对所有 Mac 无条件显示。真正缺失 Toolchain 的用户只能看到终端错误,看不到应用内引导。

建议实现可传递给前端的运行时探测并按缺失状态显示,或将描述改为“构建期终端引导”。

已验证

  • 前端构建及 44 项检查:通过
  • Qwen3 中文开头解析单测:通过
  • git diff --check:通过
  • 递归子模块初始化:稳定复现失败
  • 当前 GitHub 未报告 PR checks

请优先修复两个 P1,再重新跑完整多平台 CI。

@H-Chris233
H-Chris233 marked this pull request as draft August 10, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants