Files
orca/pnpm-workspace.yaml
Kelvin Amoaba 0b8e94aa5c feat(speech): run GGUF models on transcribe-cpp with a CPU fallback (#39326)
* feat(speech): run GGUF models on transcribe-cpp, falling back to the CPU

The speech host child can now load a second engine. A model whose files
are GGUF runs on transcribe-cpp (Metal on Apple silicon, Vulkan on
Windows and Linux, CPU otherwise); everything else stays on sherpa-onnx,
which remains the only engine on Intel Macs.

A GPU that fails to load, errors, stalls for 25 s or crashes the process
moves the dictation to a CPU-only process (TRANSCRIBE_BACKENDS=cpu) that
replays the audio the GPU had not decoded yet, so no words are lost or
repeated. A GPU that crashed or would not load is remembered per
transcribe-cpp version and OS release, and voice.speechGpu = 'off' keeps
it on the CPU.

Packaging copies transcribe-cpp, koffi and the target's native package
into resources/node_modules outside asar, fails when a target's package
is missing, and ships the MSVC runtime beside transcribe.dll on Windows.

No catalog model is GGUF yet, so nothing runs on transcribe-cpp until
the catalog change that follows.

* fix(speech): keep the speech queue running after a failed task, and drop audio frames after a discard

* fix(speech): keep the engine's file reads off the main thread's hot paths

The engine lookup and the GPU failure marker are read once per process
instead of on every dictation start and mobile catalog request, the marker
is written asynchronously, and the child reads the hotwords file with
fs/promises. The baseline moves the existing engine presence checks from
stt-worker-paths to the shared package table and adds the once-per-process
marker reads.
2026-11-09 16:37:03 +00:00

144 lines
5.5 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Exclude mobile’s independent workspace/lockfile: recursive discovery causes ERR_PNPM_UNUSED_PATCH.
# Explicit registry/security workspaces avoid file:-dependency relinks, whose virtual-store churn
# raced Windows node-gyp and removed @vscode/windows-process-tree’s binding.gyp mid-rebuild.
packages:
- native/windows-registry
- native/windows-security
- src/packages/*
minimumReleaseAge: 4320
# Preserve the existing exception for the explicitly selected Bun 1.4.4 release.
minimumReleaseAgeExclude:
# Security fix for compressed-request crashes (GHSA-27r3-jxmh-p828).
- 'body-parser@2.4.0'
- 'bun@1.4.4'
- '@oven/bun-darwin-aarch64@1.4.4'
- '@oven/bun-darwin-x64@1.4.4'
- '@oven/bun-freebsd-aarch64@1.4.4'
- '@oven/bun-freebsd-x64@1.4.4'
- '@oven/bun-linux-aarch64-android@1.4.4'
- '@oven/bun-linux-aarch64-musl@1.4.4'
- '@oven/bun-linux-aarch64@1.4.4'
- '@oven/bun-linux-x64-android@1.4.4'
- '@oven/bun-linux-x64-musl@1.4.4'
- '@oven/bun-linux-x64@1.4.4'
- '@oven/bun-windows-aarch64@1.4.4'
- '@oven/bun-windows-x64@1.4.4'
shamefullyHoist: true
# Enables pnpm's global virtual store outside CI; under config/ because the repo root only admits
# allowlisted entries.
pnpmfile: config/pnpmfile.cjs
# Orca resolves the user’s Claude CLI via pathToClaudeCodeExecutable; exclude SDK’s ~95 MB/platform
# bundled CLIs so that override stays mandatory.
ignoredOptionalDependencies:
- '@anthropic-ai/claude-agent-sdk-darwin-arm64'
- '@anthropic-ai/claude-agent-sdk-darwin-x64'
- '@anthropic-ai/claude-agent-sdk-linux-arm64'
- '@anthropic-ai/claude-agent-sdk-linux-arm64-musl'
- '@anthropic-ai/claude-agent-sdk-linux-x64'
- '@anthropic-ai/claude-agent-sdk-linux-x64-musl'
- '@anthropic-ai/claude-agent-sdk-win32-arm64'
- '@anthropic-ai/claude-agent-sdk-win32-x64'
# Development and test jobs need only their host. Cross-target packaging opts in
# with pnpm install:release (or explicit pnpm install --os / --cpu targets).
supportedArchitectures:
os:
- current
cpu:
- current
allowBuilds:
# Its postinstall only hardlinks the platform binary over the JS launcher.
'@ast-grep/cli': true
'@parcel/watcher': true
'@swc/core': false
'@vscode/windows-process-tree': false
agent-browser: false
bun: true
cpu-features: true
electron-winstaller: false
esbuild: true
# Its install script only rebuilds when no @koromix/koffi-<platform> prebuilt is installed.
koffi: false
msw: false
node-pty: true
ssh2: false
'@orca/windows-registry': false
'@orca/windows-security': false
# Link @types/<peer> beside peer dependents (e.g. React/lucide) for global-virtual-store resolution.
addMissingPeerTypes: true
# Published declarations import undeclared deps; hoisting hid missing types/jest-dom augmentation,
# but the global virtual store requires explicit package dependencies.
packageExtensions:
'@testing-library/jest-dom':
dependencies:
'@types/aria-query': ^5.0.1
peerDependencies:
vitest: '*'
peerDependenciesMeta:
vitest:
optional: true
'@tiptap/extension-list':
dependencies:
prosemirror-model: ^1.0.0
# electron-vite reads electron/package.json and the binary path at build and dev time.
electron-vite:
peerDependencies:
electron: '*'
electron-updater:
peerDependencies:
electron: '*'
peerDependenciesMeta:
electron:
optional: true
mermaid:
dependencies:
'@iconify/types': ^2.0.0
'@types/d3-selection': ^3.0.0
type-fest: ^5.0.0
playwright-core:
peerDependencies:
electron: '*'
peerDependenciesMeta:
electron:
optional: true
remark-parse:
dependencies:
vfile: ^6.0.0
overrides:
hono@>=4.12.4 <4.13.11: 4.13.11
dompurify@<3.4.17: 3.4.17
# Upstream markdown/math packages still require the vulnerable 0.16 line.
katex@>=0.11.0 <0.18.2: 0.18.10
patchedDependencies:
'@xterm/addon-image@0.10.0-beta.331': config/patches/@xterm__addon-image@0.10.0-beta.331.patch
node-pty@1.1.0: config/patches/node-pty@1.1.0.patch
'@xterm/addon-ligatures@0.11.0-beta.330': config/patches/@xterm__addon-ligatures@0.11.0-beta.330.patch
'@xterm/addon-webgl@0.20.0-beta.329': config/patches/@xterm__addon-webgl@0.20.0-beta.329.patch
'@xterm/addon-search@0.17.0-beta.330': config/patches/@xterm__addon-search@0.17.0-beta.330.patch
'@xterm/addon-serialize@0.15.0-beta.330': config/patches/@xterm__addon-serialize@0.15.0-beta.330.patch
'@xterm/xterm@6.1.0-beta.336': config/patches/@xterm__xterm@6.1.0-beta.336.patch
lint-staged@16.4.0: config/patches/lint-staged@16.4.0.patch
'@vscode/windows-process-tree@0.8.0': config/patches/@vscode__windows-process-tree@0.8.0.patch
i18next-cli@1.74.2: config/patches/i18next-cli@1.74.2.patch
ws@8.22.0: config/patches/ws@8.22.0.patch
oxlint-plugin-anti-slop@0.1.2: config/patches/oxlint-plugin-anti-slop@0.1.2.patch
monaco-editor@0.55.1: config/patches/monaco-editor@0.55.1.patch
sprintf-js@1.1.3: config/patches/sprintf-js@1.1.3.patch
'@tiptap/extension-list@3.31.3': config/patches/@tiptap__extension-list@3.31.3.patch
'@tiptap/markdown@3.31.3': config/patches/@tiptap__markdown@3.31.3.patch
vitest@5.0.5: config/patches/vitest@5.0.5.patch
pdfjs-dist@6.3.289: config/patches/pdfjs-dist@6.3.289.patch
prosemirror-view@1.42.3: config/patches/prosemirror-view@1.42.3.patch
glob@13.0.6: config/patches/glob@13.0.6.patch
minimatch@9.0.9: config/patches/minimatch@9.0.9.patch
minimatch@10.2.5: config/patches/minimatch@10.2.5.patch
minimatch@10.2.6: config/patches/minimatch@10.2.6.patch