revert: "QVAC-19255 tts-ggml: enable Supertonic GPU via tts-cpp 2026-06-05 (#2473)"#2502
Merged
Zbig9000 merged 6 commits intoJun 10, 2026
Merged
Conversation
…06-05 (tetherto#2473)" This reverts commit 79378e3. @qvac/tts-ggml@0.2.1 crashes on Android at addon load: the Bare worklet aborts with SIGABRT ~1s into bootstrap, which presents as a bootstrap timeout and has failed every Android e2e run since Jun 9 (iOS and desktop are unaffected). Device-farm logcat: AddonError: ADDON_NOT_FOUND: Cannot find addon '.' ... Candidates: - linked:libqvac__tts-ggml.0.2.1.so [cause]: Error: dlopen failed F libc: Fatal signal 6 (SIGABRT) in tid ... (mqt_v_js) Root cause: 0.2.1 bumped tts-cpp 2026-06-03#1 -> 2026-06-05, which pins upstream qvac-ext-lib-whisper.cpp@128dae42 (the QVAC-19254 sched + cpu_backend refactor). That refactor makes direct ggml_backend_is_cpu / ggml_get_type_traits_cpu calls inside the statically-linked tts-cpp lib. On Android the shared ggml-speech vcpkg port builds the CPU backend as runtime-dlopen'd per-microarch MODULE .so variants (GGML_CPU_ALL_VARIANTS =ON + GGML_BACKEND_DL=ON; no static CPU archive), so those two symbols are left UND in libqvac__tts-ggml.*.so with no DT_NEEDED able to resolve them (the CPU variant libs are only dlopen'd lazily inside Engine construction, long after Bare loads the addon). The addon therefore can't be linked and the process aborts. On iOS/desktop the CPU backend is statically linked, so the symbols resolve and there is no crash. This reverts PR tetherto#2473 (the Supertonic GPU enablement) in full and pins tts-cpp back to 2026-06-03#1 -- the last-known-good revision that 0.2.0 shipped and that the team verified green on Android (smoke suite). With tts-cpp reverted, Supertonic is CPU-only again, so the validateConfig / loadLocked useGPU rejection gates, the C++ unit tests, the gpu-smoke integration test, and the README / index.d.ts / examples are all reverted to keep the package internally consistent. Released as 0.2.2 (not a rollback to 0.2.0): the broken 0.2.1 dev build is already in the package registry the e2e installs from, and the SDK depends on ^0.2.0, so the fix must carry a higher version to be selected. The proper fix belongs upstream (QVAC-19254 follow-up against tts-cpp / ggml-speech): make ggml_backend_is_cpu / ggml_get_type_traits_cpu defined-and-internal on Android by statically linking ggml-cpu into the addon the way desktop/iOS already do, keeping the GPU backends dynamic. The Supertonic GPU work can re-land once that is in place. Co-authored-by: Cursor <cursoragent@cursor.com>
GustavoA1604
approved these changes
Jun 9, 2026
Contributor
Mobile integration tests — @qvac/tts-ggml (Android)Result: passed
|
Contributor
Author
|
Decision (Jun 10): this revert is the chosen unblock. Going revert-first to get Android e2e green now; the only thing it gives up is Supertonic GPU, which is re-landed later via the validated upstream fix. Supertonic is heavily CPU-optimised, so interim CPU-only is acceptable.
Re-land path (parked in #2506).
|
Contributor
Tier-based Approval Status |
Contributor
|
/review |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎯 What problem does this PR solve?
0/431onmain,0/95on PRs QVAC-16528 chore[skiplog]: prune unused e2e test assets #2487 / QVAC-20451 fix[skiplog]: stabilize Android logging reload e2e #2479). The consumer app aborts ~1 s into bootstrap, which looks like a bootstrap timeout but is actually a native crash.@qvac/tts-ggml@0.2.1fails to load on Android ARM64. Device-farm logcat:📝 How does it solve it?
Reverts #2473 (QVAC-19255) in full and pins
tts-cppback to the last-known-good2026-06-03#1(the revision0.2.0shipped).Root cause (confirmed against the
qvac-registry-vcpkgports):tts-cpp2026-06-03#1→2026-06-05. The two portfiles are identical except the upstream pin:qvac-ext-lib-whisper.cpp@c1fd35d8→@128dae42— i.e. the QVAC-19254 "sched + cpu_backend refactor."ggml_backend_is_cpu/ggml_get_type_traits_cpucalls inside the statically-linkedtts-cpplibrary.ggml-speechport builds the CPU backend as runtime-dlopen'd per-microarch MODULE.sovariants (GGML_CPU_ALL_VARIANTS=ON+GGML_BACKEND_DL=ON; no static CPU archive). Those two symbols are therefore leftUNDinlibqvac__tts-ggml.*.sowith noDT_NEEDEDable to resolve them — the CPU variant libs are onlydlopen'd lazily inside Engine construction, long after Bare loads the addon. The addon can't be linked → unhandled rejection on themqt_v_jsworklet →abort().Because
tts-cppis reverted, Supertonic is CPU-only again, so this PR also restores (all from #2473): theSupertonicModel.cpp/index.jsuseGPU/nGpuLayersrejection gates, the C++ unit tests, thegpu-smoke.test.jsintegration test, and the README /index.d.ts/ examples — keeping the package internally consistent.Released as
0.2.2, not a rollback to0.2.0: the broken0.2.1dev build is already in the package registry the e2e installs from (+ @qvac/tts-ggml@0.2.1in the producer log), and the SDK depends on^0.2.0, so the fix must carry a higher version to be selected.🧪 How was it tested?
0.2.0tree.tts-ggml 0.2.0→tts-cpp 2026-06-03#1) on Android: smoke suite all green —actions/runs/27197673590(branchtmp-pin-tts-ggml-0.2.0-android-fix).💥 Breaking Changes
0.2.1) is removed again on all platforms; Supertonic is CPU-only as in0.2.0.useGPU: true/ non-zeronGpuLayerson Supertonic throw at construction again (Chatterbox is unchanged). This is a temporary regression to unblock Android.➡️ Follow-up (permanent fix)
The proper fix belongs upstream — QVAC-19254 follow-up against
tts-cpp/ggml-speech: makeggml_backend_is_cpu/ggml_get_type_traits_cpudefined-and-internal on Android (statically linkggml-cpuinto the addon the way desktop/iOS already do, keeping the GPU backends dynamic). The Supertonic GPU work can re-land once that is in place.Reverts commit
79378e3c. Drafted by a Cursor agent; please review the root-cause analysis and version bump before merging.