diff --git a/CHANGELOG.md b/CHANGELOG.md index 50cf664..b4d742b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -No unreleased changes. +### Changed + +- Updated the pinned whisper.cpp fork to `rmorse/whisper.cpp` `stream-pcm` at `de8fb5fd` (tag `v1.9.4-dev-stream-pcm`, whisper.cpp `1.9.4-dev`), based on upstream `ggml-org/whisper.cpp` `master` after `v1.9.3`. This picks up upstream releases `v1.8.7` through `v1.9.3` and ggml `0.25.1`. +- Upstream now re-seeds the decoder between calls (ggml-org/whisper.cpp#4025), so temperature-fallback output is deterministic across repeated transcriptions on the same state. +- Upstream now rejects Silero VAD models whose encoder does not have exactly 4 layers (ggml-org/whisper.cpp#4064); loading such a model with `WhisperVadProcessor` now fails at load time. +- On Apple Silicon, upstream's optional ANEForge encoder backend (ggml-org/whisper.cpp#3905) is activated by the `ANEFORGE_ENCODER` and `ANEFORGE_DYLIB` environment variables, which load a dynamic library from the given path when a state is created. It is inactive unless those variables are set. +- NVIDIA Parakeet support is available in the bundled C library but is not yet exposed through the Rust API. +- The new upstream VAD segment and VAD-mapped token timestamp accessors are not exposed: they are only populated by upstream's built-in `whisper_full` VAD, which does not run for per-state transcription (`whisper_full_with_state`, used by this crate; see ggml-org/whisper.cpp#3423). Use the crate's own VAD pipeline instead. ## [0.1.5] - 2026-06-12 diff --git a/Cargo.toml b/Cargo.toml index fadb84e..4f940ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ -# Pinned to whisper.cpp v1.8.6-stream-pcm (fork: rmorse/whisper.cpp, branch: stream-pcm) +# Pinned to whisper.cpp 1.9.4-dev (fork: rmorse/whisper.cpp, branch: stream-pcm, commit de8fb5fd) [workspace] members = ["whisper-cpp-plus-sys", "whisper-cpp-plus", "xtask"] resolver = "2" diff --git a/README.md b/README.md index 8a03ad5..3998e4f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # whisper-cpp-plus -> **Pinned to whisper.cpp v1.8.6-stream-pcm** (fork: [`rmorse/whisper.cpp`](https://github.com/rmorse/whisper.cpp), branch: `stream-pcm`, commit [`ddfe1196`](https://github.com/rmorse/whisper.cpp/commit/ddfe1196ed8e88c670c0c7e3094ed204daf749ac)) +> **Pinned to whisper.cpp 1.9.4-dev** (fork: [`rmorse/whisper.cpp`](https://github.com/rmorse/whisper.cpp), branch: `stream-pcm`, commit [`de8fb5fd`](https://github.com/rmorse/whisper.cpp/commit/de8fb5fda8b25837a2ba0034c8c24223a6fd6c6c), based on upstream `ggml-org/whisper.cpp` `master` after `v1.9.3`) Safe Rust bindings for [whisper.cpp](https://github.com/ggerganov/whisper.cpp) with real-time PCM streaming and VAD support — OpenAI's Whisper speech recognition model. @@ -227,6 +227,8 @@ for (start, end) in segments.get_all_segments() { } ``` +> **Use this crate's VAD, not whisper.cpp's built-in VAD.** Use `WhisperVadProcessor`, `EnhancedWhisperVadProcessor` or `WhisperStreamPcm::with_vad` for voice activity detection. whisper.cpp's built-in `whisper_full` VAD does not run for per-state transcription (`whisper_full_with_state`), which this crate uses for every transcription, so it is intentionally not exposed ([ggml-org/whisper.cpp#3423](https://github.com/ggml-org/whisper.cpp/pull/3423)). + **Enhanced VAD with segment aggregation:** ```rust diff --git a/whisper-cpp-plus-sys/README.md b/whisper-cpp-plus-sys/README.md index 60d0850..c5f73f8 100644 --- a/whisper-cpp-plus-sys/README.md +++ b/whisper-cpp-plus-sys/README.md @@ -1,6 +1,6 @@ # whisper-cpp-plus-sys -> **Pinned to whisper.cpp v1.8.6-stream-pcm** (fork: [`rmorse/whisper.cpp`](https://github.com/rmorse/whisper.cpp), branch: `stream-pcm`, commit [`ddfe1196`](https://github.com/rmorse/whisper.cpp/commit/ddfe1196ed8e88c670c0c7e3094ed204daf749ac)) +> **Pinned to whisper.cpp 1.9.4-dev** (fork: [`rmorse/whisper.cpp`](https://github.com/rmorse/whisper.cpp), branch: `stream-pcm`, commit [`de8fb5fd`](https://github.com/rmorse/whisper.cpp/commit/de8fb5fda8b25837a2ba0034c8c24223a6fd6c6c), based on upstream `ggml-org/whisper.cpp` `master` after `v1.9.3`) Low-level FFI bindings to [whisper.cpp](https://github.com/ggerganov/whisper.cpp) for Rust. diff --git a/whisper-cpp-plus-sys/build.rs b/whisper-cpp-plus-sys/build.rs index ab75ff9..f1b3c78 100644 --- a/whisper-cpp-plus-sys/build.rs +++ b/whisper-cpp-plus-sys/build.rs @@ -4,8 +4,8 @@ use std::path::{Path, PathBuf}; #[path = "cuda_detect.rs"] mod cuda_detect; -/// Pinned commit from rmorse/whisper.cpp (stream-pcm branch, based on v1.8.6) -const WHISPER_CPP_VERSION: &str = "ddfe1196ed8e88c670c0c7e3094ed204daf749ac"; +/// Pinned commit from rmorse/whisper.cpp (stream-pcm branch, whisper.cpp 1.9.4-dev, based on upstream master after v1.9.3) +const WHISPER_CPP_VERSION: &str = "de8fb5fda8b25837a2ba0034c8c24223a6fd6c6c"; const WHISPER_CPP_REPO: &str = "rmorse/whisper.cpp"; fn main() { diff --git a/whisper-cpp-plus-sys/whisper.cpp b/whisper-cpp-plus-sys/whisper.cpp index ddfe119..de8fb5f 160000 --- a/whisper-cpp-plus-sys/whisper.cpp +++ b/whisper-cpp-plus-sys/whisper.cpp @@ -1 +1 @@ -Subproject commit ddfe1196ed8e88c670c0c7e3094ed204daf749ac +Subproject commit de8fb5fda8b25837a2ba0034c8c24223a6fd6c6c diff --git a/whisper-cpp-plus/README.md b/whisper-cpp-plus/README.md index 0a7a03c..c128bc7 100644 --- a/whisper-cpp-plus/README.md +++ b/whisper-cpp-plus/README.md @@ -1,6 +1,6 @@ # whisper-cpp-plus -> **Pinned to whisper.cpp v1.8.6-stream-pcm** (fork: [`rmorse/whisper.cpp`](https://github.com/rmorse/whisper.cpp), branch: `stream-pcm`, commit [`ddfe1196`](https://github.com/rmorse/whisper.cpp/commit/ddfe1196ed8e88c670c0c7e3094ed204daf749ac)) +> **Pinned to whisper.cpp 1.9.4-dev** (fork: [`rmorse/whisper.cpp`](https://github.com/rmorse/whisper.cpp), branch: `stream-pcm`, commit [`de8fb5fd`](https://github.com/rmorse/whisper.cpp/commit/de8fb5fda8b25837a2ba0034c8c24223a6fd6c6c), based on upstream `ggml-org/whisper.cpp` `master` after `v1.9.3`) Safe Rust bindings for [whisper.cpp](https://github.com/ggerganov/whisper.cpp) with **real-time PCM streaming** and VAD support. @@ -110,7 +110,7 @@ whisper-cpp-plus = { version = "0.1.5", features = ["cuda"] } - **Transcription** — `WhisperContext`, `WhisperState`, `FullParams`, `TranscriptionParams` builder - **Streaming** — `WhisperStream` for chunked real-time transcription - **StreamPCM** — `WhisperStreamPcm` for raw PCM input with VAD-driven processing -- **VAD** — `WhisperVadProcessor` for Silero-based voice activity detection +- **VAD** — `WhisperVadProcessor` for Silero-based voice activity detection. Use this (or `WhisperStreamPcm::with_vad` / the enhanced VAD) rather than whisper.cpp's built-in `whisper_full` VAD, which does not run for the per-state transcription this crate uses ([ggml-org/whisper.cpp#3423](https://github.com/ggml-org/whisper.cpp/pull/3423)) - **Enhanced** — Temperature fallback + enhanced VAD aggregation for improved quality - **Quantization** — `WhisperQuantize` for model compression (feature = `quantization`)