Skip to content

test[notask]: file-driven TTS-GGML mobile benchmark selection (test-groups + perf-tests) - #2918

Merged
tobi-legan merged 3 commits into
mainfrom
fix/tts-ggml-mobile-test-groups
Jun 29, 2026
Merged

tobi-legan merged 3 commits into
mainfrom
fix/tts-ggml-mobile-test-groups

Conversation

@tobi-legan

@tobi-legan tobi-legan commented Jun 27, 2026 •

Copy link
Copy Markdown
Contributor

🎯 What problem does this PR solve?

  • The TTS-GGML mobile RTF/streaming benchmarks (runRtfBenchmarkTest, runStreamingBenchmarkTest) are heavy, env-gated tests. On a normal mobile run they register zero sub-tests, and under the 0/0 = FAIL rule (PR testing whispercpp #47) that turned the mobile integration job red.
  • The previous direction tried to special-case this in the on-device test harness ("intentional skip" detection). That's fragile (cross-module signals don't propagate in the bundled runtime) and, it turns out, unnecessary.

📝 How does it solve it?

Adopt the same file-driven mobile sharding the llm-llamacpp addon already uses — so the benchmarks simply don't run on normal runs, and the selection lives in editable files (no workflow edits to change it):

  • test/mobile/test-groups.json — lists the functional tests. The mobile CI action auto-detects this file and runs only these (Mocha --grep). The two benchmarks are deliberately excluded → they never run on a normal run → no 0/0.
  • test/mobile/perf-tests.json — the single editable list of mobile benchmarks. Add/remove a benchmark by editing this one file.
  • integration-mobile-test-tts-ggml.yml — on run_rtf_benchmarks=true (the dedicated benchmark-rtf-tts-ggml.yml path), a step builds the device-farm test-groups from perf-tests.json so only the benchmarks run. Normal runs skip the step and auto-detect the functional groups.

No test-harness (qvac-test-addon-mobile) change is needed: main already treats 0/0 as FAIL, and with this change the benchmarks never produce a 0/0.

🧪 How was it tested?

Two CI verification runs on this branch (test harness = main):

Note: test/CI-only change — no shipped package code — so no package.json version bump.

tobi-legan and others added 2 commits June 27, 2026 04:15
Adopt the same mobile sharding mechanism the llm-llamacpp addon uses: drop a
test-groups.json (auto-detected by the mobile CI action) listing the
functional tests, and a perf-tests.json listing the benchmarks.

The two benchmark runners (runRtfBenchmarkTest, runStreamingBenchmarkTest)
are deliberately left out of the groups, so normal mobile runs never execute
them and they cannot produce a 0/0 result. They run only in perf-only mode
(QVAC_PERF_ONLY=true) via perf-tests.json. This removes the need for any
intentional-skip handling in the test harness.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBoRDUf9ZQeE5LFH5rwnWs
A benchmark run (run_rtf_benchmarks=true) now builds the device-farm
test-groups from packages/tts-ggml/test/mobile/perf-tests.json, so only the
benchmark runners execute. Normal runs skip this step (empty output) and the
action auto-detects test-groups.json (functional tests, benchmarks excluded).

Net: perf-tests.json is the single editable source of truth for which mobile
benchmarks run — add a benchmark by adding its function name there, no
workflow changes. Mirrors the file-driven convention used by llm-llamacpp.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBoRDUf9ZQeE5LFH5rwnWs
@tobi-legan
tobi-legan requested review from a team as code owners June 27, 2026 04:54
@github-actions

Copy link
Copy Markdown
Contributor

Review Status

Current Status: ❌ PENDING
Approvals so far: none

Pending reviews: Needs 1 Management or Team Lead, and 1 more from Management, Team Lead, or Member.

@tobi-legan
tobi-legan merged commit 3d01692 into main Jun 29, 2026
14 checks passed
@tobi-legan
tobi-legan deleted the fix/tts-ggml-mobile-test-groups branch June 29, 2026 11:55
ogad-tether added a commit to ogad-tether/qvac that referenced this pull request Jul 1, 2026
…d mobile group

That test loads Chatterbox variants on the GPU; on Adreno (Samsung S25 Ultra)
it hits a PRE-EXISTING ggml-opencl SIGSEGV in ggml_backend_opencl_buffer_set_tensor
(Q4_0 SOA upload, clEnqueueWriteBuffer) at model load — unrelated to this PR and
present since before it (proven by a base A/B: the pre-tetherto#71 tts-cpp and the pre-tetherto#2918
commit crash identically; Pixel 9 / Mali-Vulkan passes). It was only added to the
Android group by tetherto#2918 and merged before its mobile E2E ran, so it slipped through.

Keep it on iOS (Metal) — it passes there and exercises this PR's q8-KV-on-Metal fix.
Re-add to Android once the upstream ggml-opencl Adreno upload bug is fixed.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants