Skip to content

Merge main into release-whispercpp-0.3.18 - #218

Closed
GustavoA1604 wants to merge 4 commits into
release-whispercpp-0.3.18from
main
Closed

GustavoA1604 wants to merge 4 commits into
release-whispercpp-0.3.18from
main

Conversation

@GustavoA1604

Copy link
Copy Markdown
Contributor

No description provided.

sharmaraju352 and others added 4 commits February 10, 2026 11:12
…163)

The WDIO config for Device Farm had double-escaped quotes (\\" instead
of \") in the UiSelector and iOS predicate strings. This caused a
SyntaxError on Device Farm: "missing ) after argument list".

The original repo uses single-escaped quotes which work correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>
* update whisper cpp prebuild workflow

* update whisper cpp prebuild workflow
@GustavoA1604
GustavoA1604 requested review from a team as code owners February 10, 2026 15:43
@github-actions

Copy link
Copy Markdown
Contributor

🚫 Release PR validation failed

Package mismatch
Branch targets whispercpp, workflow expects qvac-sdk

Version mismatch
Branch version: 0.3.18
package.json: 0.6.0

Version not incremented
Base: 0.6.0
PR: 0.6.0

Missing CHANGELOG update
File not modified: packages/qvac-sdk/CHANGELOG.md

@github-actions

Copy link
Copy Markdown
Contributor

🚫 Release PR validation failed

Package mismatch
Branch targets whispercpp, workflow expects qvac-cli

Version mismatch
Branch version: 0.3.18
package.json: 0.1.1

Missing CHANGELOG update
File not modified: packages/qvac-cli/CHANGELOG.md

Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request Jun 30, 2026
…ample_rate, 2026-06-30#1)

Keeps the default-registry baseline at 162f8f7c (no global bump per review) and
routes ONLY tts-cpp through a package-scoped registry pinned to the version that
carries QVAC-21483 output_sample_rate (PR tetherto#69, master ce9ee96f). A version>= bump
alone cannot work: baseline 162f8f7c's versions DB only knows tts-cpp <= 2026-06-26,
so it can't resolve 2026-06-30#1.

INTERIM: scoped registry points at the fork (Zbig9000) tetherto#218 branch tip so CI can
resolve now. Before merge, repoint repository -> tetherto/qvac-registry-vcpkg and
baseline -> the registry PR tetherto#218 merge commit.
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request Jun 30, 2026
…to (PR tetherto#218 merged)

tetherto#218 merged to tetherto/qvac-registry-vcpkg main (970e30b4), publishing
tts-cpp 2026-06-30#1 (REF ce9ee96f, output_sample_rate). Swap the interim fork
pin for the tetherto repository + tetherto#218 merge-commit baseline. Default-registry
baseline stays 162f8f7c; only tts-cpp is scoped.
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request Jun 30, 2026
…o tetherto (PR tetherto#218 merged)"

Keep the tts-cpp scoped registry on the interim fork pin
(Zbig9000/qvac-registry-vcpkg @ a8851c4) as it was; the tetherto repoint was
premature. This reverts only the vcpkg-configuration.json scoped-registry
change from 8b13672.
ishanvohra2 added a commit that referenced this pull request Jul 2, 2026
… + SDK (#2879)

* QVAC-16579 feat[api]: wire LavaSR speech enhancement through tts-ggml + SDK

Expose the tts-cpp LavaSR enhancer as opt-in neural bandwidth extension on
the GGML TTS path (Supertonic). The engine output is upsampled to 48 kHz
when an `enhancer` block is supplied.

- SDK schema: `lavasr` enhancer (discriminated union on `type`) with a
  single `enhancerSrc` GGUF; added to chatterbox/supertonic runtime + load
  configs. +8 schema unit tests.
- tts-ggml plugin: resolve `enhancerSrc` -> local GGUF artifact and bind it
  on the Supertonic model.
- @qvac/tts-ggml: accept `enhancer` / `files.lavasrEnhancer`, forward
  `lavasrEnhancerPath` + `enhance` to the addon (index.js + index.d.ts).
- addon: SupertonicConfig/Model load tts_cpp::lavasr::Enhancer and apply it
  after synthesis (batch path); JSAdapter parses the new params.
- example: examples/tts/supertonic-enhanced.ts.
- fix stale ttsSpeed/ttsNumInferenceSteps comment in schemas/plugin.ts.

Chatterbox addon wiring + the denoiser stage are planned follow-ups.
Requires the tts-cpp LavaSR change (qvac-ext-lib-whisper.cpp) via vcpkg.

* QVAC-16579 feat[api]: wire LavaSR enhancer for Chatterbox + fix reported sample rate

- Chatterbox addon: load tts_cpp::lavasr::Enhancer and apply it after
  synthesis on the batch path (streaming enhancement is a follow-up, since
  the enhancer needs the full utterance). JSAdapter parses
  lavasrEnhancerPath/enhance; index.js forwards them; the SDK plugin resolves
  the Chatterbox enhancerSrc -> GGUF artifact.
- AddonJs: report 48 kHz when the enhancer is enabled for either engine. The
  output sample rate is baked into the JS output handlers at instance
  creation, so this also corrects the Supertonic path (which otherwise
  reported the engine's native rate while emitting enhanced 48 kHz PCM).

* QVAC-16579 test[api]: add LavaSR enhancer integration test + chatterbox example

- test/integration/lavasr-enhancer.test.js: Supertonic + enhancer reports
  48 kHz (vs native 44.1 kHz), and the un-enhanced path still reports
  44.1 kHz (backward compat). Gated on the converted enhancer GGUF being
  present; skips cleanly when absent.
- examples/tts/chatterbox-enhanced.ts: Chatterbox + LavaSR enhancement,
  mirroring supertonic-enhanced.ts.

* QVAC-16579 test[api]: unit-test LavaSR enhancer param forwarding (tts-ggml)

Mock-binding unit tests (no native addon) asserting _buildTtsParams()
forwards the enhancer config to the native params for both engines:
- supertonic.inference.test.js: enhancer block, files.lavasrEnhancer,
  enhancerPath alias, enhance:false, and absent (backward compat).
- chatterbox.inference.test.js: enhancer forwards lavasrEnhancerPath +
  enhance; omitted when absent.

* QVAC-16579 review: scope to tts-ggml + address enhancer feedback (GustavoA1604)

Scope this PR to @qvac/tts-ggml only — revert the packages/sdk schema / plugin
/ example changes (SDK loadModel wiring moves to a separate PR).

- Reject the LavaSR enhancer together with Chatterbox native chunk streaming
  (streamChunkTokens > 0) at construction (native validateConfig + index.js),
  with a regression test. The enhancer needs the full utterance, so the combo
  previously emitted un-enhanced 24 kHz audio mislabeled as 48 kHz.
- Throw when enhancer.enhance is true but no GGUF path resolves (was a silent
  no-op); warn when outputSampleRate is set while the enhancer is active
  (output is always 48 kHz).
- index.d.ts: document sampleRate == 48000 when the enhancer is active; config
  headers document the 48 kHz override.
- Add examples (supertonic-enhanced.js, chatterbox-enhanced.js), a
  convert-lavasr-enhancer-to-gguf.py aligned with the tts-cpp one, an
  ensureLavaSREnhancerGguf download helper, README + CHANGELOG entries, and a
  Chatterbox batch enhancer integration test (plus construct-time regression
  tests that run without models).

NOTICE is dependency-generated and unchanged (no new dependency added).

* QVAC-21483 feat[api]: honor outputSampleRate (selectable output frequency)

The @qvac/tts-ggml JS already validated + forwarded outputSampleRate; the addon
now acts on it (it was previously a no-op):

- toEngineOptions forwards outputSampleRate to the tts-cpp engine
  (EngineOptions::output_sample_rate, qvac-ext-lib-whisper.cpp PR #69), which
  resamples (batch once / streaming per-chunk, seam-free) — both engines.
- When the LavaSR enhancer is active the engine keeps its native rate and the
  model resamples the 48 kHz enhanced signal to outputSampleRate afterwards via
  an addon-local Lanczos OutputResampler, so the rate is honored in both modes.
- AddonJs reports the final rate (precedence: outputSampleRate > 48k enhanced >
  native). Removed the now-obsolete "outputSampleRate ignored" warning and the
  stale "ignored while enhancer active" docs.
- Docs (configs + index.d.ts) + CHANGELOG; unit tests (forwarding, range,
  enhancer coexistence) + a gated integration test.

Depends on the engine output_sample_rate field (PR #69) via the vcpkg bump.

* QVAC-16579 refactor[tts-ggml]: simplify LavaSR enhancer config surface

Addresses review on #2879: collapse the enhancer config to one rule — a GGUF
path enables enhancement; there is no separate on/off flag.

- index.js / index.d.ts: drop the `enhance` tri-state (path present => on); a
  future SDK layer gates at runtime by choosing whether to pass the path.
  Reject an unknown `enhancer.type` so a typo can't silently disable it.
- Trim the GGUF path spellings to one canonical key (files.lavasrEnhancer) plus
  enhancer.enhancerPath; drop the files.lavasrEnhancerPath / files.enhancer
  aliases (the latter collided by name with the enhancer options block).
- addon: remove the now-unreachable `enhance` config field + JSAdapter read;
  load / reported sample rate / engine options all key off the GGUF path alone.
- README, CHANGELOG, examples and unit/integration tests updated; drop ticket
  names from docs and code comments.

* QVAC-21482 feat[tts-ggml]: enhancer + Chatterbox native chunk streaming

The LavaSR enhancer was previously rejected together with streamChunkTokens (it
consumes the whole utterance). Support the combination: the addon now runs the
one-shot enhancer over a sliding window with a look-ahead margin + crossfade so
each streamed chunk is bandwidth-extended seam-free, matching the batch result.

- StreamingEnhancer.hpp: header-only stateful feed()/flush() wrapper around an
  injected one-shot enhance transform. Overlap-reprocess with a look-ahead
  margin covering the enhancer's receptive field (~0.34 s at 24 kHz) plus a
  short crossfade; window/commit boundaries snap to the reduced ratio
  denominator so every window's output shares one global grid (exact crossfade
  even for a non-integer outputSampleRate). Bounded memory (drops consumed
  input). No tts-cpp/ggml dependency, so it is unit-testable in isolation.
- ChatterboxModel: thread a StreamingEnhancer through the native-streaming
  chunk callback (raw -> enhance + optional outputSampleRate resample -> WSOLA
  -> emit), fix the duration stat to use the emitted rate, drop the
  construct-time rejection.
- Remove the JS construct-time rejection; update index.d.ts / README /
  CHANGELOG / config docs / example to document the combo and its ~0.34 s
  look-ahead latency.
- Tests: test_streaming_enhancer.cpp asserts streamed == batch for an injected
  shift-invariant transform (incl. a non-integer ratio) and bounded memory;
  flip the JS reject tests to "supported" and add a model-backed
  Chatterbox-streaming-enhancer integration test.

* QVAC-16579 chore[tts-ggml]: pin tts-cpp 2026-06-29 (LavaSR) + registry baseline #212

Advance the tts-ggml native dependency to the LavaSR tts-cpp pin now that
qvac-registry-vcpkg #212 has merged to tetherto main:

- packages/tts-ggml/vcpkg.json: tts-cpp version>= 2026-06-26 -> 2026-06-29
  (qvac-ext-lib-whisper.cpp PR #68, ships tts_cpp::lavasr::Enhancer).
- packages/tts-ggml/vcpkg-configuration.json: default-registry baseline
  162f8f7c -> f04e244701f462c4c8fead7b50bcaffa52c052ac (the #212 merge commit
  on tetherto/qvac-registry-vcpkg), where baseline.json and the version
  database both carry tts-cpp 2026-06-29, so the new pin resolves.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* QVAC-16579 chore[tts-ggml]: bump only tts-cpp version>= to 2026-06-29 (keep registry baseline)

Per review (GustavoA1604): revert the packages/tts-ggml/vcpkg-configuration.json
default-registry baseline to main's value (162f8f7c). The tts-cpp bump is now
carried solely by vcpkg.json (version>= 2026-06-29).

Note: version>= 2026-06-29 does not resolve against baseline 162f8f7c until the
registry baseline contains that version. CI is separately blocked on whisper.cpp
PR #69 (EngineOptions::output_sample_rate), which is not yet in any published
tts-cpp version.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: Use registry tts-cpp mecab port

This commit updates the port version of tts-cpp in tts-ggml addon
and adds integration tests for more languages for wider coverage.

* QVAC-16579 chore[tts-ggml]: pin tts-cpp via scoped registry (output_sample_rate, 2026-06-30#1)

Keeps the default-registry baseline at 162f8f7c (no global bump per review) and
routes ONLY tts-cpp through a package-scoped registry pinned to the version that
carries QVAC-21483 output_sample_rate (PR #69, master ce9ee96f). A version>= bump
alone cannot work: baseline 162f8f7c's versions DB only knows tts-cpp <= 2026-06-26,
so it can't resolve 2026-06-30#1.

INTERIM: scoped registry points at the fork (Zbig9000) #218 branch tip so CI can
resolve now. Before merge, repoint repository -> tetherto/qvac-registry-vcpkg and
baseline -> the registry PR #218 merge commit.

* QVAC-16579 chore[tts-ggml]: repoint tts-cpp scoped registry to tetherto (PR #218 merged)

#218 merged to tetherto/qvac-registry-vcpkg main (970e30b4), publishing
tts-cpp 2026-06-30#1 (REF ce9ee96f, output_sample_rate). Swap the interim fork
pin for the tetherto repository + #218 merge-commit baseline. Default-registry
baseline stays 162f8f7c; only tts-cpp is scoped.

* chore[tts-ggml]: regenerate mobile integration tests + exercise lavasr/output-rate on mobile

Re-ran scripts/generate-mobile-integration-tests.js so integration.auto.cjs
mirrors the new test/integration files (adds runLavasrEnhancerTest and
runOutputSampleRateTest; 12 -> 14 runners; validate-mobile-tests passes).

Also added both runners to the ios + android functional groups in
test-groups.json, since the mobile CI action runs ONLY the runners listed there
-- regenerating alone would not exercise them on device. lavasr-enhancer runs
its always-on construct-time checks on mobile and cleanly skips the model-backed
48 kHz assertions until the enhancer GGUF is provisioned; output-sample-rate uses
the already-provisioned Supertonic model.

* Revert "QVAC-16579 chore[tts-ggml]: repoint tts-cpp scoped registry to tetherto (PR #218 merged)"

Keep the tts-cpp scoped registry on the interim fork pin
(Zbig9000/qvac-registry-vcpkg @ a8851c4) as it was; the tetherto repoint was
premature. This reverts only the vcpkg-configuration.json scoped-registry
change from 8b13672.

* chore[tts-ggml]: revert all vcpkg-configuration.json changes (review)

Per review, vcpkg-configuration.json must not change in this PR: drop the
tts-cpp scoped registry entirely and restore the file byte-identical to main
(default-registry baseline stays 162f8f7c). The tts-cpp bump is expressed only
via vcpkg.json (version>= 2026-06-30#1); advancing the registry baseline so it
resolves is handled separately.

* fix: Revert baseline change

* chore: Update changelog

* fix(tts-ggml): route mecab to microsoft/vcpkg registry

The tts-cpp 2026-06-30#1 pin includes the QVAC-21335 MeCab feature (#72),
which adds a new transitive dependency on `mecab`. `mecab` is a
microsoft/vcpkg port and is not present in the tetherto default registry,
so it must be routed to the microsoft/vcpkg scoped registry (alongside
gtest/vulkan/...). Without this, `bare-make generate` fails with
"the baseline does not contain an entry for port mecab", breaking every
prebuild and the cpp-tests/cpp-lint jobs.

This is a package-routing addition only; it does not bump any baseline.

* fix(tts-ggml): resolve mecab::mecab imported target before find_package(tts-cpp)

tts-cpp (2026-06-30#1) links libmecab as a PRIVATE dep, but since tts-cpp
is a static library the dependency leaks into its exported
INTERFACE_LINK_LIBRARIES as $<LINK_ONLY:mecab::mecab>. tts-cppConfig.cmake
only re-finds ggml/OpenMP (no find_dependency(mecab)), so a downstream
find_package(tts-cpp) sees a dangling mecab::mecab target and CMake
generation fails ("the target was not found").

Call find_package(mecab CONFIG REQUIRED) first so the mecab::mecab imported
target exists when tts-cpp's config loads. mecab is already installed as a
transitive vcpkg dependency of tts-cpp. This is a downstream workaround for
an upstream tts-cpp packaging bug (target leak); it can be dropped once
tts-cpp stops exporting the target.

* style(tts-ggml): apply clang-format to addon sources

Satisfy the cpp-lint clang-format check (git-clang-format against the
merge-base) across the LavaSR/output-sample-rate addon changes:
AddonJs.hpp, JSAdapter.cpp, OutputResampler.hpp, StreamingEnhancer.hpp,
ChatterboxModel.cpp, SupertonicModel.cpp, and test_streaming_enhancer.cpp.
Formatting-only; no behavior change.

* revert(tts-ggml): drop #2879 local mecab hacks; rely on Ishan #2942

#2879's own mecab plumbing (mecab in vcpkg-configuration.json + a
find_package(mecab) in CMakeLists) duplicated Ishan's #2942 and re-touched
vcpkg-configuration.json, which review asked us to leave unchanged. Revert both
so the MeCab support comes solely from #2942 (this PR stacks on it). The
test_streaming_enhancer.cpp test registration stays — it's LavaSR/streaming
work, not a mecab hack.

* chore[tts-ggml]: drop stale runChatterboxJaMecabTest from mobile groups

#2942 removed test/integration/chatterbox-ja-mecab.test.js (its Japanese MeCab
coverage moved into chatterbox-mtl.test.js), so integration.auto.cjs no longer
generates runChatterboxJaMecabTest. Remove the now-dangling reference from the
ios/android functional groups; Japanese coverage stays via runChatterboxMtlTest
(already listed). lavasr + output-rate runners retained.

---------

Co-authored-by: Zbigniew Herman <212399199+Zbig9000@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: ishanvohra2 <your-github-email>
Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>
Co-authored-by: Ishan Vohra <ishanvohra2@gmail.com>
Co-authored-by: Zbig9000 <zbig9000@users.noreply.github.com>
iancris added a commit that referenced this pull request Aug 29, 2026
Rollout Phase B consumer side. Raises the version>= floor to 10297.1.0 in all 7
fabric consumers and releases each package.

  package              version>=            package
  embed-llamacpp       10297.0.0 -> .1.0    0.36.0 -> 0.37.0
  fabric               10297.0.0 -> .1.0    0.9.0  -> 0.10.0
  llm-llamacpp         10297.0.0 -> .1.0    0.47.0 -> 0.48.0
  model-fit            10297.0.0 -> .1.0    0.7.0  -> 0.8.0
  ocr-ggml             10297.0.0 -> .1.0    0.20.0 -> 0.21.0
  translation-nmtcpp   10297.0.0 -> .1.0    0.12.0 -> 0.13.0
  vla-ggml             10297.0.0 -> .1.0    0.23.0 -> 0.24.0

All seven are pre-1.0, so every one takes the minor path. translation-nmtcpp is
included in that: npm still shows latest 10.0.0 from its previous numbering, but
its main line was restarted at 0.x and origin/main is the authority.

v10297.1.0 spans 59 commits over 10297.0.0 — MTP drafter (#210), pipeline-parallel
ACCEL fix (#220), Metal optimisations (#216), Qwen4-Next (#218), fit host-memory
budgeting (#214) and a CUDA build-warning fix (#226).

llm-llamacpp's entry is dated rather than newly written: this PR already carried
the split-mode 'tensor' work under [Unreleased], and that work releases as 0.48.0.
model-fit's mobile-bundling fix does the same as 0.8.0. ocr-ggml and
translation-nmtcpp keep their empty [Unreleased] placeholders, with the dated
entry inserted below.

CI is expected to fail until the registry PR merges — version>= 10297.1.0 cannot
resolve before then. Retrigger afterwards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
iancris added a commit that referenced this pull request Aug 31, 2026
Rollout Phase B consumer side. Raises the version>= floor to 10297.1.0 in all 7
fabric consumers and releases each package.

  package              version>=            package
  embed-llamacpp       10297.0.0 -> .1.0    0.36.0 -> 0.37.0
  fabric               10297.0.0 -> .1.0    0.9.0  -> 0.10.0
  llm-llamacpp         10297.0.0 -> .1.0    0.47.0 -> 0.48.0
  model-fit            10297.0.0 -> .1.0    0.7.0  -> 0.8.0
  ocr-ggml             10297.0.0 -> .1.0    0.20.0 -> 0.21.0
  translation-nmtcpp   10297.0.0 -> .1.0    0.12.0 -> 0.13.0
  vla-ggml             10297.0.0 -> .1.0    0.23.0 -> 0.24.0

All seven are pre-1.0, so every one takes the minor path. translation-nmtcpp is
included in that: npm still shows latest 10.0.0 from its previous numbering, but
its main line was restarted at 0.x and origin/main is the authority.

v10297.1.0 spans 59 commits over 10297.0.0 — MTP drafter (#210), pipeline-parallel
ACCEL fix (#220), Metal optimisations (#216), Qwen4-Next (#218), fit host-memory
budgeting (#214) and a CUDA build-warning fix (#226).

llm-llamacpp's entry is dated rather than newly written: this PR already carried
the split-mode 'tensor' work under [Unreleased], and that work releases as 0.48.0.
model-fit's mobile-bundling fix does the same as 0.8.0. ocr-ggml and
translation-nmtcpp keep their empty [Unreleased] placeholders, with the dated
entry inserted below.

CI is expected to fail until the registry PR merges — version>= 10297.1.0 cannot
resolve before then. Retrigger afterwards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants