From de205e3d5022d807dbde4ea55f7d764ae7573fe3 Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Tue, 21 Jul 2026 17:57:39 +0200 Subject: [PATCH 1/8] QVAC-22367 fix[transcription-parakeet]: bound long-audio memory via windowed encoder Consume parakeet-cpp 2026-07-21#0, which slides the offline conformer encoder over long inputs in overlapping windows instead of running the whole file through a single O(T_enc^2) attention graph. The batch `transcribe` path previously exhausted memory on multi-hour audio (a ~90 min file peaked at ~100 GB and was SIGKILLed); `transcribeStream` was already bounded and is unchanged. No addon code change is needed -- the engine auto-selects the windowed path once the input exceeds one window, so short/typical files keep the identical single-pass output. WIP validation wiring (drop once the registry port merges): - vcpkg-overlays/parakeet-cpp mirrors the registry PR's port verbatim (fork REF + real fork-tarball SHA512); - vcpkg-configuration.json lists the overlay; - vcpkg.json bumps the parakeet-cpp version>= floors to 2026-07-21 and pins the exact version via overrides. --- packages/transcription-parakeet/.gitignore | 1 + packages/transcription-parakeet/CHANGELOG.md | 13 ++- .../vcpkg-configuration.json | 3 + .../parakeet-cpp/portfile.cmake | 91 +++++++++++++++++++ .../vcpkg-overlays/parakeet-cpp/vcpkg.json | 82 +++++++++++++++++ packages/transcription-parakeet/vcpkg.json | 13 ++- 6 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake create mode 100644 packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json diff --git a/packages/transcription-parakeet/.gitignore b/packages/transcription-parakeet/.gitignore index 1696b4b7f7..338be1f311 100644 --- a/packages/transcription-parakeet/.gitignore +++ b/packages/transcription-parakeet/.gitignore @@ -22,6 +22,7 @@ Makefile !CMakeLists.txt !cmake/*.cmake !vcpkg/**/*.cmake +!vcpkg-overlays/**/*.cmake compile_commands.json .vscode/ .idea/ diff --git a/packages/transcription-parakeet/CHANGELOG.md b/packages/transcription-parakeet/CHANGELOG.md index 64238d2330..ee684ada4c 100644 --- a/packages/transcription-parakeet/CHANGELOG.md +++ b/packages/transcription-parakeet/CHANGELOG.md @@ -5,7 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.10.1] - 2026-07-20 +## [Unreleased] + +### Fixed + +- Long audio no longer crashes or exhausts memory during offline transcription. + The batch `transcribe` path ran the Parakeet encoder over the entire input in + one pass, whose self-attention grows with the square of the audio length, so + multi-hour files were killed by the OS (a ~90 min file peaked at ~100 GB). The + bundled `parakeet-cpp` (bumped to `2026-07-21#0`) now slides the encoder over + long inputs in overlapping windows with bounded memory; short inputs keep the + identical single-pass path. `transcribeStream` was already bounded and is + unchanged (QVAC-22367). ### Changed diff --git a/packages/transcription-parakeet/vcpkg-configuration.json b/packages/transcription-parakeet/vcpkg-configuration.json index 04e7630640..1eaea06a53 100644 --- a/packages/transcription-parakeet/vcpkg-configuration.json +++ b/packages/transcription-parakeet/vcpkg-configuration.json @@ -15,5 +15,8 @@ "spirv-headers" ] } + ], + "overlay-ports": [ + "vcpkg-overlays/parakeet-cpp" ] } diff --git a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake new file mode 100644 index 0000000000..e37fb90675 --- /dev/null +++ b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake @@ -0,0 +1,91 @@ +# parakeet-cpp: NVIDIA Parakeet ASR + Sortformer diarization in pure C++/ggml. +# Sourced from the parakeet-cpp/ subfolder of tetherto/qvac-ext-lib-whisper.cpp; +# consumes the ggml-speech port. +# +# QVAC-22367: bound offline-transcription memory on long audio. transcribe_samples +# / transcribe_samples_stream previously ran the conformer encoder over the whole +# input in a single graph (O(T_enc^2) self-attention), OOMing on multi-hour files +# (~100 GB for a 90 min file, SIGKILL). This pin slides the encoder over the audio +# in overlapping windows and trims the shared context at the interior seams; +# inputs that fit one window keep the bit-identical single-pass path. Layered on +# top of master ecac5bb7 (PR #85, EOU RNN-T decoder as ggml graphs on GPU). +# Requires ggml-speech >= 2026-07-15 (unchanged from the previous pin). +# +# WIP: REPO/REF/HEAD_REF point at the Zbig9000 fork branch pending the upstream +# PR merge (SHA512 is the hash of that fork tarball). NOTE: master has since +# moved parakeet-cpp/ to engines/parakeet/ (reorg PR #95); this pin deliberately +# stays on the pre-reorg ecac5bb7 line so the bugfix does not also adopt the +# layout migration. On upstream merge, repoint REPO -> tetherto, REF -> the merge +# commit, HEAD_REF -> master, update SOURCE_PATH to engines/parakeet if the fix +# lands on the reorged tree, and recompute SHA512. + +set(VCPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES enabled) +set(VCPKG_BUILD_TYPE release) + +vcpkg_from_github( + OUT_SOURCE_PATH WHISPER_CPP_SRC + REPO Zbig9000/qvac-ext-lib-whisper.cpp + REF 963b28db7601c827df1cc8ad17e903a802864c3e + SHA512 34b157a031c42af95ef50eb05707ed90d5806f97a2f349c23e952bfce6e1a0586df236fb55b9c1194ee8204083bb6cd5d5b71dfc62a727b43ba5f456bad098d4 + HEAD_REF QVAC-22367-parakeet-long-audio +) + +set(SOURCE_PATH "${WHISPER_CPP_SRC}/parakeet-cpp") +if (NOT EXISTS "${SOURCE_PATH}/CMakeLists.txt") + message(FATAL_ERROR + "parakeet-cpp: ${SOURCE_PATH}/CMakeLists.txt missing; the parakeet-cpp/ " + "subfolder layout in qvac-ext-lib-whisper.cpp may have changed.") +endif() + +set(GGML_METAL OFF) +set(GGML_VULKAN OFF) +set(GGML_CUDA OFF) +set(GGML_OPENCL OFF) +if("metal" IN_LIST FEATURES) + set(GGML_METAL ON) +endif() +if("vulkan" IN_LIST FEATURES) + set(GGML_VULKAN ON) +endif() +if("cuda" IN_LIST FEATURES) + set(GGML_CUDA ON) +endif() +if("opencl" IN_LIST FEATURES) + set(GGML_OPENCL ON) +endif() + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE + OPTIONS + -DPARAKEET_BUILD_LIBRARY=ON + -DPARAKEET_BUILD_EXECUTABLES=OFF + -DPARAKEET_BUILD_TESTS=OFF + -DPARAKEET_BUILD_EXAMPLES=OFF + -DPARAKEET_INSTALL=ON + -DPARAKEET_USE_SYSTEM_GGML=ON + -DBUILD_SHARED_LIBS=OFF + -DGGML_NATIVE=OFF + -DGGML_OPENMP=OFF + -DPARAKEET_OPENMP=OFF + -DGGML_CCACHE=OFF + -DPARAKEET_CCACHE=OFF + -DGGML_METAL=${GGML_METAL} + -DGGML_VULKAN=${GGML_VULKAN} + -DGGML_CUDA=${GGML_CUDA} + -DGGML_OPENCL=${GGML_OPENCL} +) + +vcpkg_cmake_install() + +vcpkg_cmake_config_fixup(PACKAGE_NAME parakeet-cpp CONFIG_PATH share/parakeet-cpp) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") + +if (VCPKG_LIBRARY_LINKAGE MATCHES "static") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin") +endif() + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json new file mode 100644 index 0000000000..62369becc0 --- /dev/null +++ b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json @@ -0,0 +1,82 @@ +{ + "name": "parakeet-cpp", + "version-date": "2026-07-21", + "port-version": 0, + "description": "Parakeet (NVIDIA FastConformer ASR + Sortformer diarization) inference in pure C++/ggml. Ships CTC, TDT, EOU and Sortformer engines under one Engine umbrella, plus the cross-engine StreamEvent API (VadStateChanged / EndOfTurn). Sourced from tetherto/qvac-ext-lib-whisper.cpp parakeet-cpp/ subfolder; consumes the ggml-speech port. This pin (QVAC-22367) bounds offline-transcription memory on long audio: transcribe_samples / transcribe_samples_stream used to run the conformer encoder over the whole input in one graph (O(T_enc^2) self-attention), OOMing on multi-hour files (~100 GB for 90 min); the encoder now slides over the audio in overlapping windows with context trimmed at the seams, while inputs that fit one window keep the bit-identical single-pass path. Layered on master ecac5bb7 (PR #85, EOU RNN-T decoder as ggml graphs on GPU: span-batched joint, persistent LSTM/pred state and full-window enc-projection on device, on-device argmax and reset; RTX 4000 Vulkan EOU RTF 0.0052 -> 0.0031). Earlier pins: master 2e2f4d5 (PR #87, CPU repack of quantized encoder GEMM weights) and df54e37 (PR #83, on-device TDT predictor multi-layer state).", + "homepage": "https://github.com/tetherto/qvac-ext-lib-whisper.cpp/tree/master/parakeet-cpp", + "license": "MIT", + "dependencies": [ + { + "name": "ggml-speech", + "version>=": "2026-07-15" + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "default-features": [ + { + "name": "metal", + "platform": "osx | ios" + }, + { + "name": "opencl", + "platform": "android" + }, + { + "name": "vulkan", + "platform": "windows | linux | android" + } + ], + "features": { + "cuda": { + "description": "Enable CUDA GPU acceleration", + "dependencies": [ + { + "name": "ggml-speech", + "features": [ + "cuda" + ] + } + ] + }, + "metal": { + "description": "Enable Metal GPU acceleration (macOS / iOS)", + "dependencies": [ + { + "name": "ggml-speech", + "features": [ + "metal" + ] + } + ] + }, + "opencl": { + "description": "Enable OpenCL GPU acceleration (Android / Adreno)", + "dependencies": [ + { + "name": "ggml-speech", + "features": [ + "opencl" + ] + } + ] + }, + "vulkan": { + "description": "Enable Vulkan GPU acceleration", + "dependencies": [ + { + "name": "ggml-speech", + "features": [ + "vulkan" + ] + } + ] + } + } +} diff --git a/packages/transcription-parakeet/vcpkg.json b/packages/transcription-parakeet/vcpkg.json index 7bb3e2d0aa..9e9acfcea2 100644 --- a/packages/transcription-parakeet/vcpkg.json +++ b/packages/transcription-parakeet/vcpkg.json @@ -4,19 +4,19 @@ "dependencies": [ { "name": "parakeet-cpp", - "version>=": "2026-07-13#2", + "version>=": "2026-07-21", "features": ["metal"], "platform": "osx | ios" }, { "name": "parakeet-cpp", - "version>=": "2026-07-13#2", + "version>=": "2026-07-21", "features": ["vulkan", "opencl"], "platform": "android" }, { "name": "parakeet-cpp", - "version>=": "2026-07-13#2", + "version>=": "2026-07-21", "features": ["vulkan"], "platform": "!(osx | ios | android)" }, @@ -37,6 +37,13 @@ "host": true } ], + "overrides": [ + { + "name": "parakeet-cpp", + "version": "2026-07-21", + "port-version": 0 + } + ], "features": { "tests": { "description": "Build tests", From ed3a0e1d61c0dd81afdd4437c68b974258283857 Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Wed, 22 Jul 2026 15:24:44 +0200 Subject: [PATCH 2/8] QVAC-22367 doc[transcription-parakeet]: drop ticket ref from CHANGELOG entry Address review: remove the trailing "(QVAC-22367)" from the [Unreleased] entry. The CHANGELOG documents consumer-facing changes only, not tracker ticket ids. --- packages/transcription-parakeet/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/transcription-parakeet/CHANGELOG.md b/packages/transcription-parakeet/CHANGELOG.md index ee684ada4c..0cf4e416e0 100644 --- a/packages/transcription-parakeet/CHANGELOG.md +++ b/packages/transcription-parakeet/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 bundled `parakeet-cpp` (bumped to `2026-07-21#0`) now slides the encoder over long inputs in overlapping windows with bounded memory; short inputs keep the identical single-pass path. `transcribeStream` was already bounded and is - unchanged (QVAC-22367). + unchanged. ### Changed From 9913d2e1a15c702d11b259a2e43bb10a0978a5c2 Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Wed, 22 Jul 2026 16:20:11 +0200 Subject: [PATCH 3/8] QVAC-22367 chore[transcription-parakeet]: resync overlay to review-fixed port Mirror the registry PR's parakeet-cpp port after the review fixups: repoint the overlay to fork commit e5f22556 (global CMVN, model-free seam tests, fail-loud append), update SHA512, and drop the ticket identifier from the port header/description. Overlay stays byte-identical to the registry port. --- .../vcpkg-overlays/parakeet-cpp/portfile.cmake | 17 +++++++++-------- .../vcpkg-overlays/parakeet-cpp/vcpkg.json | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake index e37fb90675..e139960afd 100644 --- a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake +++ b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake @@ -2,14 +2,15 @@ # Sourced from the parakeet-cpp/ subfolder of tetherto/qvac-ext-lib-whisper.cpp; # consumes the ggml-speech port. # -# QVAC-22367: bound offline-transcription memory on long audio. transcribe_samples +# Long-audio memory fix: bound offline-transcription memory. transcribe_samples # / transcribe_samples_stream previously ran the conformer encoder over the whole # input in a single graph (O(T_enc^2) self-attention), OOMing on multi-hour files -# (~100 GB for a 90 min file, SIGKILL). This pin slides the encoder over the audio -# in overlapping windows and trims the shared context at the interior seams; -# inputs that fit one window keep the bit-identical single-pass path. Layered on -# top of master ecac5bb7 (PR #85, EOU RNN-T decoder as ggml graphs on GPU). -# Requires ggml-speech >= 2026-07-15 (unchanged from the previous pin). +# (~100 GB for a 90 min file, SIGKILL). This pin computes the mel once (global +# CMVN) and slides the encoder over it in overlapping windows, trimming the +# shared context at the interior seams; inputs that fit one window keep the +# bit-identical single-pass path. Layered on top of master ecac5bb7 (PR #85, EOU +# RNN-T decoder as ggml graphs on GPU). Requires ggml-speech >= 2026-07-15 +# (unchanged from the previous pin). # # WIP: REPO/REF/HEAD_REF point at the Zbig9000 fork branch pending the upstream # PR merge (SHA512 is the hash of that fork tarball). NOTE: master has since @@ -25,8 +26,8 @@ set(VCPKG_BUILD_TYPE release) vcpkg_from_github( OUT_SOURCE_PATH WHISPER_CPP_SRC REPO Zbig9000/qvac-ext-lib-whisper.cpp - REF 963b28db7601c827df1cc8ad17e903a802864c3e - SHA512 34b157a031c42af95ef50eb05707ed90d5806f97a2f349c23e952bfce6e1a0586df236fb55b9c1194ee8204083bb6cd5d5b71dfc62a727b43ba5f456bad098d4 + REF e5f22556bffb791be0c230281edb8e1a06564ee4 + SHA512 894078f9e6f96e95193d28552100b29b03e077358bb1aa8a8f4d694dcd78fe85ca863c680cd36560a4cab6d2d9f1eb1d49161be4f320a3bbcd7c5f4baac2e8d1 HEAD_REF QVAC-22367-parakeet-long-audio ) diff --git a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json index 62369becc0..4813f06e34 100644 --- a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json +++ b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json @@ -2,7 +2,7 @@ "name": "parakeet-cpp", "version-date": "2026-07-21", "port-version": 0, - "description": "Parakeet (NVIDIA FastConformer ASR + Sortformer diarization) inference in pure C++/ggml. Ships CTC, TDT, EOU and Sortformer engines under one Engine umbrella, plus the cross-engine StreamEvent API (VadStateChanged / EndOfTurn). Sourced from tetherto/qvac-ext-lib-whisper.cpp parakeet-cpp/ subfolder; consumes the ggml-speech port. This pin (QVAC-22367) bounds offline-transcription memory on long audio: transcribe_samples / transcribe_samples_stream used to run the conformer encoder over the whole input in one graph (O(T_enc^2) self-attention), OOMing on multi-hour files (~100 GB for 90 min); the encoder now slides over the audio in overlapping windows with context trimmed at the seams, while inputs that fit one window keep the bit-identical single-pass path. Layered on master ecac5bb7 (PR #85, EOU RNN-T decoder as ggml graphs on GPU: span-batched joint, persistent LSTM/pred state and full-window enc-projection on device, on-device argmax and reset; RTX 4000 Vulkan EOU RTF 0.0052 -> 0.0031). Earlier pins: master 2e2f4d5 (PR #87, CPU repack of quantized encoder GEMM weights) and df54e37 (PR #83, on-device TDT predictor multi-layer state).", + "description": "Parakeet (NVIDIA FastConformer ASR + Sortformer diarization) inference in pure C++/ggml. Ships CTC, TDT, EOU and Sortformer engines under one Engine umbrella, plus the cross-engine StreamEvent API (VadStateChanged / EndOfTurn). Sourced from tetherto/qvac-ext-lib-whisper.cpp parakeet-cpp/ subfolder; consumes the ggml-speech port. This pin bounds offline-transcription memory on long audio: transcribe_samples / transcribe_samples_stream used to run the conformer encoder over the whole input in one graph (O(T_enc^2) self-attention), OOMing on multi-hour files (~100 GB for 90 min); the encoder now computes the mel once (global CMVN) and slides over it in overlapping windows with context trimmed at the seams, while inputs that fit one window keep the bit-identical single-pass path. Layered on master ecac5bb7 (PR #85, EOU RNN-T decoder as ggml graphs on GPU: span-batched joint, persistent LSTM/pred state and full-window enc-projection on device, on-device argmax and reset; RTX 4000 Vulkan EOU RTF 0.0052 -> 0.0031). Earlier pins: master 2e2f4d5 (PR #87, CPU repack of quantized encoder GEMM weights) and df54e37 (PR #83, on-device TDT predictor multi-layer state).", "homepage": "https://github.com/tetherto/qvac-ext-lib-whisper.cpp/tree/master/parakeet-cpp", "license": "MIT", "dependencies": [ From 967485f31c3a44d3f59c36d7ff2eac2166da9542 Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Wed, 22 Jul 2026 16:44:07 +0200 Subject: [PATCH 4/8] QVAC-22367 chore[transcription-parakeet]: resolve parakeet-cpp from our fork registry (CI) Point the addon's default-registry at the Zbig9000 fork of qvac-registry-vcpkg (branch QVAC-22367-bump-parakeet-cpp @ 9838379), whose parakeet-cpp port pins our qvac-ext-lib-whisper.cpp fork branch (engines/parakeet @ e58ff4b0). This is what makes the addon CI actually build and test our long-audio lib changes -- the default tetherto registry (and a local overlay) resolves the unmodified upstream lib, so CI wouldn't exercise our fix. Drops the WIP vcpkg-overlays/parakeet-cpp (the fork registry now provides the port). WIP wiring: on upstream merge of the source + registry PRs, revert default-registry to tetherto and keep the version>= / overrides pin. --- .../vcpkg-configuration.json | 7 +- .../parakeet-cpp/portfile.cmake | 92 ------------------- .../vcpkg-overlays/parakeet-cpp/vcpkg.json | 82 ----------------- 3 files changed, 2 insertions(+), 179 deletions(-) delete mode 100644 packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake delete mode 100644 packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json diff --git a/packages/transcription-parakeet/vcpkg-configuration.json b/packages/transcription-parakeet/vcpkg-configuration.json index 1eaea06a53..3431993024 100644 --- a/packages/transcription-parakeet/vcpkg-configuration.json +++ b/packages/transcription-parakeet/vcpkg-configuration.json @@ -1,8 +1,8 @@ { "default-registry": { "kind": "git", - "baseline": "74d2dfd03d1c2c0767bac6d892ec43a2a0e29c10", - "repository": "https://github.com/tetherto/qvac-registry-vcpkg.git" + "baseline": "96f3c44d4b4ad68395f09103b2a91013baf36ef0", + "repository": "https://github.com/Zbig9000/qvac-registry-vcpkg.git" }, "registries": [ { @@ -15,8 +15,5 @@ "spirv-headers" ] } - ], - "overlay-ports": [ - "vcpkg-overlays/parakeet-cpp" ] } diff --git a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake deleted file mode 100644 index e139960afd..0000000000 --- a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/portfile.cmake +++ /dev/null @@ -1,92 +0,0 @@ -# parakeet-cpp: NVIDIA Parakeet ASR + Sortformer diarization in pure C++/ggml. -# Sourced from the parakeet-cpp/ subfolder of tetherto/qvac-ext-lib-whisper.cpp; -# consumes the ggml-speech port. -# -# Long-audio memory fix: bound offline-transcription memory. transcribe_samples -# / transcribe_samples_stream previously ran the conformer encoder over the whole -# input in a single graph (O(T_enc^2) self-attention), OOMing on multi-hour files -# (~100 GB for a 90 min file, SIGKILL). This pin computes the mel once (global -# CMVN) and slides the encoder over it in overlapping windows, trimming the -# shared context at the interior seams; inputs that fit one window keep the -# bit-identical single-pass path. Layered on top of master ecac5bb7 (PR #85, EOU -# RNN-T decoder as ggml graphs on GPU). Requires ggml-speech >= 2026-07-15 -# (unchanged from the previous pin). -# -# WIP: REPO/REF/HEAD_REF point at the Zbig9000 fork branch pending the upstream -# PR merge (SHA512 is the hash of that fork tarball). NOTE: master has since -# moved parakeet-cpp/ to engines/parakeet/ (reorg PR #95); this pin deliberately -# stays on the pre-reorg ecac5bb7 line so the bugfix does not also adopt the -# layout migration. On upstream merge, repoint REPO -> tetherto, REF -> the merge -# commit, HEAD_REF -> master, update SOURCE_PATH to engines/parakeet if the fix -# lands on the reorged tree, and recompute SHA512. - -set(VCPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES enabled) -set(VCPKG_BUILD_TYPE release) - -vcpkg_from_github( - OUT_SOURCE_PATH WHISPER_CPP_SRC - REPO Zbig9000/qvac-ext-lib-whisper.cpp - REF e5f22556bffb791be0c230281edb8e1a06564ee4 - SHA512 894078f9e6f96e95193d28552100b29b03e077358bb1aa8a8f4d694dcd78fe85ca863c680cd36560a4cab6d2d9f1eb1d49161be4f320a3bbcd7c5f4baac2e8d1 - HEAD_REF QVAC-22367-parakeet-long-audio -) - -set(SOURCE_PATH "${WHISPER_CPP_SRC}/parakeet-cpp") -if (NOT EXISTS "${SOURCE_PATH}/CMakeLists.txt") - message(FATAL_ERROR - "parakeet-cpp: ${SOURCE_PATH}/CMakeLists.txt missing; the parakeet-cpp/ " - "subfolder layout in qvac-ext-lib-whisper.cpp may have changed.") -endif() - -set(GGML_METAL OFF) -set(GGML_VULKAN OFF) -set(GGML_CUDA OFF) -set(GGML_OPENCL OFF) -if("metal" IN_LIST FEATURES) - set(GGML_METAL ON) -endif() -if("vulkan" IN_LIST FEATURES) - set(GGML_VULKAN ON) -endif() -if("cuda" IN_LIST FEATURES) - set(GGML_CUDA ON) -endif() -if("opencl" IN_LIST FEATURES) - set(GGML_OPENCL ON) -endif() - -vcpkg_cmake_configure( - SOURCE_PATH "${SOURCE_PATH}" - DISABLE_PARALLEL_CONFIGURE - OPTIONS - -DPARAKEET_BUILD_LIBRARY=ON - -DPARAKEET_BUILD_EXECUTABLES=OFF - -DPARAKEET_BUILD_TESTS=OFF - -DPARAKEET_BUILD_EXAMPLES=OFF - -DPARAKEET_INSTALL=ON - -DPARAKEET_USE_SYSTEM_GGML=ON - -DBUILD_SHARED_LIBS=OFF - -DGGML_NATIVE=OFF - -DGGML_OPENMP=OFF - -DPARAKEET_OPENMP=OFF - -DGGML_CCACHE=OFF - -DPARAKEET_CCACHE=OFF - -DGGML_METAL=${GGML_METAL} - -DGGML_VULKAN=${GGML_VULKAN} - -DGGML_CUDA=${GGML_CUDA} - -DGGML_OPENCL=${GGML_OPENCL} -) - -vcpkg_cmake_install() - -vcpkg_cmake_config_fixup(PACKAGE_NAME parakeet-cpp CONFIG_PATH share/parakeet-cpp) - -file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") -file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") - -if (VCPKG_LIBRARY_LINKAGE MATCHES "static") - file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin") - file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin") -endif() - -vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json b/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json deleted file mode 100644 index 4813f06e34..0000000000 --- a/packages/transcription-parakeet/vcpkg-overlays/parakeet-cpp/vcpkg.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "parakeet-cpp", - "version-date": "2026-07-21", - "port-version": 0, - "description": "Parakeet (NVIDIA FastConformer ASR + Sortformer diarization) inference in pure C++/ggml. Ships CTC, TDT, EOU and Sortformer engines under one Engine umbrella, plus the cross-engine StreamEvent API (VadStateChanged / EndOfTurn). Sourced from tetherto/qvac-ext-lib-whisper.cpp parakeet-cpp/ subfolder; consumes the ggml-speech port. This pin bounds offline-transcription memory on long audio: transcribe_samples / transcribe_samples_stream used to run the conformer encoder over the whole input in one graph (O(T_enc^2) self-attention), OOMing on multi-hour files (~100 GB for 90 min); the encoder now computes the mel once (global CMVN) and slides over it in overlapping windows with context trimmed at the seams, while inputs that fit one window keep the bit-identical single-pass path. Layered on master ecac5bb7 (PR #85, EOU RNN-T decoder as ggml graphs on GPU: span-batched joint, persistent LSTM/pred state and full-window enc-projection on device, on-device argmax and reset; RTX 4000 Vulkan EOU RTF 0.0052 -> 0.0031). Earlier pins: master 2e2f4d5 (PR #87, CPU repack of quantized encoder GEMM weights) and df54e37 (PR #83, on-device TDT predictor multi-layer state).", - "homepage": "https://github.com/tetherto/qvac-ext-lib-whisper.cpp/tree/master/parakeet-cpp", - "license": "MIT", - "dependencies": [ - { - "name": "ggml-speech", - "version>=": "2026-07-15" - }, - { - "name": "vcpkg-cmake", - "host": true - }, - { - "name": "vcpkg-cmake-config", - "host": true - } - ], - "default-features": [ - { - "name": "metal", - "platform": "osx | ios" - }, - { - "name": "opencl", - "platform": "android" - }, - { - "name": "vulkan", - "platform": "windows | linux | android" - } - ], - "features": { - "cuda": { - "description": "Enable CUDA GPU acceleration", - "dependencies": [ - { - "name": "ggml-speech", - "features": [ - "cuda" - ] - } - ] - }, - "metal": { - "description": "Enable Metal GPU acceleration (macOS / iOS)", - "dependencies": [ - { - "name": "ggml-speech", - "features": [ - "metal" - ] - } - ] - }, - "opencl": { - "description": "Enable OpenCL GPU acceleration (Android / Adreno)", - "dependencies": [ - { - "name": "ggml-speech", - "features": [ - "opencl" - ] - } - ] - }, - "vulkan": { - "description": "Enable Vulkan GPU acceleration", - "dependencies": [ - { - "name": "ggml-speech", - "features": [ - "vulkan" - ] - } - ] - } - } -} From b8dd108efba4e93e6b45b33a715510e9d5bed7dc Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Wed, 22 Jul 2026 18:17:12 +0200 Subject: [PATCH 5/8] test[transcription-parakeet]: make sortformer-streaming-alias teardown Bare-safe The teardown used `delete process.env[key]`, which throws on Bare's process.env proxy (deleteProperty trap returns false) and aborts the whole integration process (exit 134) whenever QVAC_TEST_GGUF_SORTFORMERSTREAMING isn't already set in the environment. Wrap the unset in try/catch so cleanup is best-effort; the test assertions are unchanged. --- .../integration/sortformer-streaming-alias.test.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/transcription-parakeet/test/integration/sortformer-streaming-alias.test.js b/packages/transcription-parakeet/test/integration/sortformer-streaming-alias.test.js index fe51c844b3..d6c6163dd3 100644 --- a/packages/transcription-parakeet/test/integration/sortformer-streaming-alias.test.js +++ b/packages/transcription-parakeet/test/integration/sortformer-streaming-alias.test.js @@ -62,8 +62,15 @@ test('ensureGgufForType(sortformer-streaming) resolves via the canonical env-key process.env[envKey] = sentinel t.teardown(() => { - if (previous === undefined) delete process.env[envKey] - else process.env[envKey] = previous + // Bare's process.env proxy rejects `delete` (deleteProperty returns false), + // which would abort the whole test process; best-effort unset instead. + if (previous === undefined) { + try { + delete process.env[envKey] + } catch (_) {} + } else { + process.env[envKey] = previous + } try { fs.unlinkSync(sentinel) } catch (_) {} From 9a91909458f542a03f3ad6737d7d3a550b883c4b Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Wed, 22 Jul 2026 19:19:03 +0200 Subject: [PATCH 6/8] QVAC-22367 chore[transcription-parakeet]: point fork-registry baseline at merged-upstream port Follow the registry PR after it was repointed to the merged upstream commit (tetherto/qvac-ext-lib-whisper.cpp#101, engines/parakeet). default-registry baseline -> 5a4aa57, whose parakeet-cpp 2026-07-21#0 port now builds from the merged upstream master (88b690c0) instead of the fork branch. Still resolving from the fork registry until the registry PR merges; once it does, switch default-registry back to tetherto and keep the version>= / overrides pin. --- packages/transcription-parakeet/vcpkg-configuration.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/transcription-parakeet/vcpkg-configuration.json b/packages/transcription-parakeet/vcpkg-configuration.json index 3431993024..c14af9ff63 100644 --- a/packages/transcription-parakeet/vcpkg-configuration.json +++ b/packages/transcription-parakeet/vcpkg-configuration.json @@ -1,7 +1,7 @@ { "default-registry": { "kind": "git", - "baseline": "96f3c44d4b4ad68395f09103b2a91013baf36ef0", + "baseline": "5a4aa574d892eb2cf74902444b27ff35a0d9aff2", "repository": "https://github.com/Zbig9000/qvac-registry-vcpkg.git" }, "registries": [ From 9619fc3e16068fd6364a183019038679380dc3b8 Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Wed, 22 Jul 2026 19:43:38 +0200 Subject: [PATCH 7/8] QVAC-22367 chore[transcription-parakeet]: consume parakeet-cpp 2026-07-21#0 from tetherto registry Registry PR #254 merged, so drop the WIP fork registry and go back to the canonical tetherto registry: - default-registry -> tetherto/qvac-registry-vcpkg @ 7c3dde3 (the #254 merge commit; minimal baseline that carries parakeet-cpp 2026-07-21#0). - pin qvac-lib-inference-addon-cpp to 1.2.4 via overrides so the baseline bump (needed only to expose the new parakeet-cpp) does not incidentally pull the 1.3.0 that #256 made the new default; keeps this PR's dep set equal to main plus the parakeet fix. parakeet-cpp resolves to 2026-07-21#0 (version>= + override), which builds from the merged upstream engines/parakeet (tetherto whisper #101). --- packages/transcription-parakeet/vcpkg-configuration.json | 4 ++-- packages/transcription-parakeet/vcpkg.json | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/transcription-parakeet/vcpkg-configuration.json b/packages/transcription-parakeet/vcpkg-configuration.json index c14af9ff63..68a073297f 100644 --- a/packages/transcription-parakeet/vcpkg-configuration.json +++ b/packages/transcription-parakeet/vcpkg-configuration.json @@ -1,8 +1,8 @@ { "default-registry": { "kind": "git", - "baseline": "5a4aa574d892eb2cf74902444b27ff35a0d9aff2", - "repository": "https://github.com/Zbig9000/qvac-registry-vcpkg.git" + "baseline": "7c3dde3bb2d5707b6c3bb1faa3717749194f5671", + "repository": "https://github.com/tetherto/qvac-registry-vcpkg.git" }, "registries": [ { diff --git a/packages/transcription-parakeet/vcpkg.json b/packages/transcription-parakeet/vcpkg.json index 9e9acfcea2..5dddae0acb 100644 --- a/packages/transcription-parakeet/vcpkg.json +++ b/packages/transcription-parakeet/vcpkg.json @@ -42,6 +42,10 @@ "name": "parakeet-cpp", "version": "2026-07-21", "port-version": 0 + }, + { + "name": "qvac-lib-inference-addon-cpp", + "version": "1.2.4" } ], "features": { From b40080a71ae90558b89eadcdd534b9363fc5a5f0 Mon Sep 17 00:00:00 2001 From: Zbigniew Herman Date: Thu, 23 Jul 2026 10:24:34 +0200 Subject: [PATCH 8/8] QVAC-22367 review[transcription-parakeet]: drop baseline bump + overrides, restore 0.10.1 changelog Address review feedback on #3379: - vcpkg-configuration.json: restore the registry baseline to main's 74d2dfd. The version>= floor alone pulls parakeet-cpp 2026-07-21#0 from the tetherto registry HEAD (the baseline only sets defaults for unconstrained ports), so no baseline bump is needed now that registry #254 is merged. - vcpkg.json: drop the parakeet-cpp / qvac-lib-inference-addon-cpp overrides. The version>= floors resolve both to their intended versions on their own (parakeet-cpp 2026-07-21#0 and qvac-lib-inference-addon-cpp 1.2.4). - CHANGELOG.md: keep the [0.10.1] - 2026-07-20 section and place the new [Unreleased] entry above it instead of overwriting it. - .gitignore: drop the vcpkg-overlays allowlist line (no overlay is used). --- packages/transcription-parakeet/.gitignore | 1 - packages/transcription-parakeet/CHANGELOG.md | 2 ++ .../transcription-parakeet/vcpkg-configuration.json | 2 +- packages/transcription-parakeet/vcpkg.json | 11 ----------- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/packages/transcription-parakeet/.gitignore b/packages/transcription-parakeet/.gitignore index 338be1f311..1696b4b7f7 100644 --- a/packages/transcription-parakeet/.gitignore +++ b/packages/transcription-parakeet/.gitignore @@ -22,7 +22,6 @@ Makefile !CMakeLists.txt !cmake/*.cmake !vcpkg/**/*.cmake -!vcpkg-overlays/**/*.cmake compile_commands.json .vscode/ .idea/ diff --git a/packages/transcription-parakeet/CHANGELOG.md b/packages/transcription-parakeet/CHANGELOG.md index 0cf4e416e0..9014219f34 100644 --- a/packages/transcription-parakeet/CHANGELOG.md +++ b/packages/transcription-parakeet/CHANGELOG.md @@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 identical single-pass path. `transcribeStream` was already bounded and is unchanged. +## [0.10.1] - 2026-07-20 + ### Changed - Migrated the published JavaScript wrapper to generated TypeScript sources and added declarations for the supported `./parakeet` subpath export, while preserving the existing CommonJS runtime API. diff --git a/packages/transcription-parakeet/vcpkg-configuration.json b/packages/transcription-parakeet/vcpkg-configuration.json index 68a073297f..04e7630640 100644 --- a/packages/transcription-parakeet/vcpkg-configuration.json +++ b/packages/transcription-parakeet/vcpkg-configuration.json @@ -1,7 +1,7 @@ { "default-registry": { "kind": "git", - "baseline": "7c3dde3bb2d5707b6c3bb1faa3717749194f5671", + "baseline": "74d2dfd03d1c2c0767bac6d892ec43a2a0e29c10", "repository": "https://github.com/tetherto/qvac-registry-vcpkg.git" }, "registries": [ diff --git a/packages/transcription-parakeet/vcpkg.json b/packages/transcription-parakeet/vcpkg.json index 5dddae0acb..475e856077 100644 --- a/packages/transcription-parakeet/vcpkg.json +++ b/packages/transcription-parakeet/vcpkg.json @@ -37,17 +37,6 @@ "host": true } ], - "overrides": [ - { - "name": "parakeet-cpp", - "version": "2026-07-21", - "port-version": 0 - }, - { - "name": "qvac-lib-inference-addon-cpp", - "version": "1.2.4" - } - ], "features": { "tests": { "description": "Build tests",