fix(void): report pywhispercpp 1.5.0 and load CPU variants at runtime #49

Merged
xavierk merged 1 commits from fix/pywhispercpp-version-cpu into main 2026-11-06 18:51:30 +00:00
Owner

Description

Fixes two defects found in the hardware acceptance run (#19, #32).

  • #43: the Void python3-pywhispercpp package reported version 0.0.0. The sdist takes its version from setuptools-scm, and the xbps build root has no git metadata. The template now sets SETUPTOOLS_SCM_PRETEND_VERSION and adds python3-setuptools_scm to hostmakedepends. The app also treats 0.0.0 as unknown rather than old, so a GPU device selection is not refused because of a missing version.
  • #44: the CPU backend was a single portable build without AVX, FMA or F16C (CPU RTF about 1.7). The template now builds with GGML_BACKEND_DL=ON and GGML_CPU_ALL_VARIANTS=ON. A small patch makes the extension load the backend libraries from its own directory, and ggml picks the best variant the host supports. The x64 baseline variant always ships, so the package still runs on any x86-64 CPU. The app's preloader no longer preloads the CPU variants, because they export the same symbols.

Verification

  • Full container release build from this branch (build-release.sh release v0.18.5), exit 0.
  • Install smoke in a clean container:
    • pywhispercpp reports 1.5.0;
    • CPU variants are present;
    • the baseline and the other libraries are free of AVX;
    • libggml-cpu-haswell.so is loaded on this host;
    • stock PyAudio and pysocks are upgraded to the carried versions.
  • Unit tests for the template, the loader and the version parsing.

Vulkan loading on real hardware is verified after merge by reinstalling the package on the acceptance machine.

Fixes #43
Fixes #44

## Description Fixes two defects found in the hardware acceptance run (#19, #32). - **#43:** the Void `python3-pywhispercpp` package reported version 0.0.0. The sdist takes its version from setuptools-scm, and the xbps build root has no git metadata. The template now sets `SETUPTOOLS_SCM_PRETEND_VERSION` and adds `python3-setuptools_scm` to hostmakedepends. The app also treats 0.0.0 as unknown rather than old, so a GPU device selection is not refused because of a missing version. - **#44:** the CPU backend was a single portable build without AVX, FMA or F16C (CPU RTF about 1.7). The template now builds with `GGML_BACKEND_DL=ON` and `GGML_CPU_ALL_VARIANTS=ON`. A small patch makes the extension load the backend libraries from its own directory, and ggml picks the best variant the host supports. The x64 baseline variant always ships, so the package still runs on any x86-64 CPU. The app's preloader no longer preloads the CPU variants, because they export the same symbols. ## Verification - Full container release build from this branch (`build-release.sh release v0.18.5`), exit 0. - Install smoke in a clean container: - pywhispercpp reports 1.5.0; - CPU variants are present; - the baseline and the other libraries are free of AVX; - `libggml-cpu-haswell.so` is loaded on this host; - stock PyAudio and pysocks are upgraded to the carried versions. - Unit tests for the template, the loader and the version parsing. Vulkan loading on real hardware is verified after merge by reinstalling the package on the acceptance machine. Fixes #43 Fixes #44
xavierk added 1 commit 2026-11-06 18:49:32 +00:00
fix(void): report pywhispercpp 1.5.0 and load CPU variants at runtime
CI / security (pull_request) Successful in 1m11s
CI / lint (pull_request) Successful in 25s
CI / ai-review (pull_request) Successful in 8s
97f93e9492
python3-pywhispercpp was installed as 0.0.0. setup.py passes no version to
setup() and takes it from setuptools-scm, which the Void build did not
install; the template's PYWHISPERCPP_VERSION export is never read. The app
read 0.0.0 as an old binding and skipped GPU device selection. Install
setuptools-scm, pin the version with SETUPTOOLS_SCM_PRETEND_VERSION, and
make the app treat a 0.0.0 distribution as unknown so the runtime feature
probe decides.

The CPU backend was built with every SIMD option off, so the real-time
factor on an AVX2 host was about 1.7. Build with GGML_BACKEND_DL and
GGML_CPU_ALL_VARIANTS instead: one CPU library per instruction-set level,
with the x86-64 baseline always shipped. The binding loads the variants
from its own directory (patches/), and pre_install places them beside the
extension. The app's library preloader skips those variants: they export
identical symbols, so preloading them RTLD_GLOBAL would let one variant
serve every other. The install smoke asserts that the installed package
reports 1.5.0, that the baseline variant holds no AVX code, that the AVX2
variant does, and that the CPU and Vulkan backends load from the package.

Fixes #43
Fixes #44
xavierk merged commit 0c48db5b5e into main 2026-11-06 18:51:30 +00:00
Sign in to join this conversation.