Skip to content

update workdir for multiple workflows#169

Merged
Proletter merged 2 commits into
mainfrom
addon_npm_publish_update
Feb 9, 2026
Merged

update workdir for multiple workflows#169
Proletter merged 2 commits into
mainfrom
addon_npm_publish_update

Conversation

@Proletter

Copy link
Copy Markdown
Collaborator

No description provided.

@Proletter Proletter requested review from a team as code owners February 9, 2026 09:52
@Proletter

Copy link
Copy Markdown
Collaborator Author

/review

@github-actions

github-actions Bot commented Feb 9, 2026

Copy link
Copy Markdown
Contributor

Tier-based Approval Status

**PR Tier:** TIER1

**Current Status:** ✅ APPROVED

**Requirements:**
- 1 Team Member approval ❌ (0/1)
- 1 Team Lead OR Management approval ✅ (2/1)

**Bypass rule:** Triggered (2+ Team Lead approvals (Tier 1 exception)). This PR is approved regardless of tier.

---
*This comment is automatically updated when reviews change.*

@Proletter Proletter merged commit 56c458d into main Feb 9, 2026
1 check passed
simon-iribarren pushed a commit that referenced this pull request Feb 11, 2026
* upddate workdir for multiple workflows

* corrections
ishanvohra2 pushed a commit that referenced this pull request Feb 12, 2026
* upddate workdir for multiple workflows

* corrections
opaninakuffo added a commit that referenced this pull request Feb 12, 2026
…ons (#303)

* Add updated CRAFT text detector model (#86)

* Add updated CRAFT text detector model and deprecate old version

Co-authored-by: Cursor <cursoragent@cursor.com>

* update package lock

* updated dep prefix

* updated dep on client as well

* Remove models.prod.json changes for separate PR

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: Remove @tetherto/transcription-whispercpp install step (#136)

Co-authored-by: Ishan Vohra <ishanvohra@Ishans-MacBook-Air.local>
Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>

* updated readme to introduce users to registry (#134)

* remove comments on PR (#147)

Co-authored-by: Dmytro Medvinskyi <functionsilence@gmail.com>

* Fix S3 model paths incorrectly including bucket name (#140)

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Dmytro Medvinskyi <functionsilence@gmail.com>

* udpate Inference-addon-cpp pr-test workflow (#149)

* Update inference addon cpp workflow (#150)

* udpate Inference-addon-cpp pr-test workflow

* fix

* Fix failing Cpp tests in TTS package (#137)

* fix: Add value for taskeelModelDir in PiperEngineTest.cpp

* fix: Add TaskeelDiacritizer.cpp in CMakeLists.txt

---------

Co-authored-by: Ishan Vohra <ishanvohra@Ishans-MacBook-Air.local>
Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>

* QVAC-11756 infra: add cursor skill and rules for SDK pod PR creation (#120)

* infra: add cursor skill and rules for SDK pod PR creation

* infra: add SDK pod packages, skill authoring guidelines

* fix: deduplicate PR template

---------

Co-authored-by: Dmytro Medvinskyi <functionsilence@gmail.com>

* Qvac 12140 new output handler pr (#148)

* QVAC-12140 : New Output Handler JsStringArrayOutputHandler

* Version bump.

* Small change to trigger tests.

* Fixed version bump.

---------

Co-authored-by: Sero <sero@Seros-MacBook-Pro.local>
Co-authored-by: Proletter <40578159+Proletter@users.noreply.github.com>

* feat(qvac-registry-schema): add findBy() method to RegistryDatabase (#145)

Add a unified findBy(params) method that:
- Selects the most efficient HyperDB index based on provided params
- Supports filtering by name, engine, and quantization
- Applies additional filters in memory for multi-field queries
- Optionally includes deprecated models

This enables clients to use a single method for model queries instead of
manually choosing between findModelsByEngine/Name/Quantization.

* QVAC-11777: add multi-instance tests (#103)

* test: add multi-instance tests

* test: simplify promise handling in multi-instance tests

* Refactor multi-instance tests to use createEmbeddingsTestInstance utility

* refactor unload out of onUpdate

* Enhance multi-instance test to verify token generation before unloading an instance

* update workdir for multiple workflows (#169)

* upddate workdir for multiple workflows

* corrections

* Qvac lib regitry server wkflw update (#173)

* update workflow

* update workflow to fix detect changes step

* QVAC-13055: Update build instructions with crash info (#171)

* Update build instructions with crash info

* Adding a note that LLVM is not supported

* release(qvac-registry-schema): v0.2.1 (#174)

* release(qvac-registry-schema): v0.2.0

- Bump version to 0.2.0
- Add CHANGELOG.md

Co-authored-by: Cursor <cursoragent@cursor.com>

* release(qvac-registry-schema): v0.2.1

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix on-pr dependencies in TTS and VAD (#180)

* QVAC-11751 feat (qvac-sdk): Add QVAC CLI with `qvac bundle sdk` cmd (#159)

* feat: scaffold qvac cli package

* feat: add qvac bundle sdk

* chore: add lint scripts and package metadata

* fix: linting

* infra: add ci/cd workflow for qvac cli

* chore: remove unnecessary use strict

* feat(qvac-lib-registry-client): add findBy() method using schema's findBy (#184)

Add findBy(params) method to QVACRegistryClient that delegates to the
schema's RegistryDatabase.findBy() method for efficient indexed queries.

Changes:
- Add findBy() method to client that delegates to this.db.findBy()
- Add FindByParams interface and findBy type definition
- Bump @tetherto/qvac-registry-schema-mono to ^0.2.1
- Add findBy to client API surface and async function tests

Co-authored-by: Cursor <cursoragent@cursor.com>

* QVAC-13081: [AQA] Fix mobile integration test workflow for NMTCPP in monorepo (#186)

* infra: unify SDK pod PR checks into single workflow (#158)

Replace per-package pr-checks-qvac-sdk.yml with a single
pr-checks-sdk-pod.yml covering all 5 SDK pod packages.

- Dynamic matrix from .github/sdk-pod-checks.json config
- Native git diff for change detection (no third-party actions)
- Auto-detect scripts via npm run --if-present (lint, build,
  build:types, test:unit)
- Bun vs npm handled via pkg_manager config field
- Security gate: org members and collaborators run immediately,
  external fork PRs require safe-to-test label from a team member
- Label auto-stripped on new push from external contributors,
  forcing re-review before CI re-runs
- setup-bun pinned to SHA for supply chain security

* add test workflow for github support

* add test workflow for github support

* fix: check collaborator permissions over api instead (#191)

* QVAC-11759 infra: update SDK pod changelog generation and shared tooling (#155)

* feat: add generic monorepo changelog generation script

Tag-based changelog generator that works for any package in the
monorepo. Finds latest tag, extracts PR numbers from commits
scoped to a package path, fetches PR metadata from GitHub API,
and produces a basic changelog. Supports migration via
--base-commit and --base-version flags.

* chore: move SDK pod scripts to shared scripts/sdk/ location

Move validator and changelog-generate from packages/qvac-sdk/scripts/
to scripts/sdk/ so all SDK pod packages share the same tooling.
SDK changelog wrapper now accepts --package flag and resolves paths
from repo root. Update references in cursor rules and husky hook.

* feat: add SDK changelog Cursor skill

Add skill for AI-assisted changelog generation for SDK pod packages.
Migrate generate-changelog rule content into skill reference to
avoid duplication.

* test: add changelog generation unit tests

Add comprehensive unit tests for changelog generation using brittle.
Includes mock data for basic, breaking changes, and model update
scenarios. Rewrite validator-cli tests from bun:test to brittle
for consistency.

* infra: expand PR validation workflow to all SDK pod packages

Rename pr-validation-qvac-sdk to pr-validation-sdk-pod. Expand
path triggers to cover all SDK pod packages and update validator
script path to shared location.

* fix: clarify naming by renaming the generator scripts

* fix: clarify paths in changelog llm format, skill

* update prebuild download location for addon workflows

* Use S3 cache for Vulkan SDK on Linux arm64 in prebuilds (#200)

Reuse the same S3 Vulkan SDK cache (bucket tether-ai-dev) in prebuilds-qvac-lib-infer-whispercpp and prebuilds-qvac-lib-infer-nmtcpp. Replaces the previous GitHub Actions cache in nmtcpp and adds S3 download-or-build-and-upload in whispercpp so arm64 builds match the LLM/embed workflows.

* QVAC-13100: Add minimum compiler version to build.md (#198)

* fix: use has-permission action, reorder strip-label and authorize (#194)

* QVAC-13086 feat: Scope CLI as @qvac/qvac-cli (#199)

* feat(qvac-cli): publish as @qvac/qvac-cli

* fix: add main and exports fields for module resolution

* fix(ci/ocr): fix vcpkg cache not saving by splitting restore/save (#205)

- Remove deprecated save-always from ccache and vcpkg cache steps
- Split vcpkg cache into actions/cache/restore + actions/cache/save
- Bump vcpkg cache key v2 -> v3 to bust stale entries
- Save vcpkg cache only on main branch pushes when key is new

* fix(whispercpp): fix double-escaped quotes in mobile E2E wdio config (#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>

* chore: bump llamacpp SDK deps and remove iPhone 17 cpu override (#213)

* chore: remove CHANGELOG from files (#215)

* Whispercpp prebuild fix (#217)

* update whisper cpp prebuild workflow

* update whisper cpp prebuild workflow

* nmtcpp benchmark ci (#204)

* fix(ci/ocr): download rec_512 models from correct S3 path (#227)

The integration test workflow was downloading models from the old
2025-12-16 S3 path which contains models expecting 2560px width input.
The current code uses RECOGNIZER_MODEL_WIDTH=512, so switch to
downloading from s3://tether-ai-dev/qvac_models_compiled/ocr/rec_512/
which has the correct 512-width models.

Co-authored-by: shikha-tether <shikha.singh@tether.io>

* fix(ci/ocr): download rec_512 models in benchmark workflow (#235)

Update benchmark workflow to download models from the rec_512 S3 path
into models/ocr/rec_512/ matching the benchmark script paths.

* to include workflow files in main path filter & dorny path filters (#224)

Co-authored-by: Proletter <40578159+Proletter@users.noreply.github.com>

* QVAC-13067: Applied clang-tidy readability rules (#216)

* Applied clang-tidy readability rules

* Added script to run linting step

* chore: update lockfile

* disable sdk e2e tests until stabilised (#242)

* feat: add @qvac/cli as optional dependency for expo prebuild

* Fix unit tests (#245)

* QVAC-13086 chore: add qvac-cli to sdk pod & remove manual CHANGELOG (#228)

* chore: add to SDK pod, remove manual CHANGELOG

* infra: add qvac-cli to SDK pod CI workflows

* Fix/whispercpp vad (#222) (#252)

* Fix/whisper silence hallucination (#160)

* Refactor `WhisperModel` to remove unnecessary `state_` handling and streamline `whisper_full` usage. Update workflows for cross-platform compatibility and bump package version to 0.3.18.

* Add v0.3.18 release notes detailing API updates, Windows CI/CD enhancements, prebuild package renaming, and bug fixes

* Update workflow for Whispercpp integration tests: rename workflow, tweak inputs/env variables, and remove redundant comments

* Refactor `WhisperModel` to streamline formatting of function calls and simplify method implementation.

* Simplify integration test workflow by unifying Unix/Windows steps, updating OS matrix, and removing redundant configurations.

* Enhance integration test workflow: add Windows-specific steps, configure scoped registries, improve prebuild handling, and update test execution logic.

* Update integration test workflow: adjust OS matrix, add `working-directory` to steps, and refine platform-specific configurations.

* Update integration test workflow: specify test file paths under `tests/` directory for Android and iOS configurations.

* Merge main into fix/whispercpp-vad (#201)

* update prebuild download location for addon workflows

* Use S3 cache for Vulkan SDK on Linux arm64 in prebuilds (#200)

Reuse the same S3 Vulkan SDK cache (bucket tether-ai-dev) in prebuilds-qvac-lib-infer-whispercpp and prebuilds-qvac-lib-infer-nmtcpp. Replaces the previous GitHub Actions cache in nmtcpp and adds S3 download-or-build-and-upload in whispercpp so arm64 builds match the LLM/embed workflows.

---------




* Fix integration tests name in whispercpp

* Revert wrong change in mobile tests for whispercpp

---------

Co-authored-by: Freddy Martinez Garcia <freddy311082@gmail.com>
Co-authored-by: Oluwaseun Ismaila <Oluwaseun.ismaila@tether.io>
Co-authored-by: Juan Pablo Garibotti Arias <jp.garibotti@gmail.com>

* On-pr workflow fix (#251)

* QVAC-13109: [OCR] Fix monorepo integration and mobile-integration workflows (#219)

* QVAC-13086 infra: Add GPR scope rewrite action and rename CLI to @qvac/cli (#230)

* infra: add GPR scope rewrite action and rename CLI to @qvac/cli

* refactor: hardcode workdir in cli-rewrite-sdk-scope action

* Sync release llm-llamacpp-v0.8.9 , embed-llamacpp-v0.10.7 (#243)

* bump version (#203)

* bump version (#202)

* feat(ocr): EasyOCR-style dynamic-width recognizer preprocessing (#179)

* feat(ocr): add EasyOCR-style dynamic-width recognizer preprocessing

Replace fixed-width (512px) recognizer preprocessing with dynamic-width
resizing that preserves aspect ratios. Images are now resized proportionally
to model height (64px) using LANCZOS4 interpolation, and batches use the
max proportional width across all images in the batch.

- Add calculateProportionalWidth() for EasyOCR-style width calculation
- Modify alignAndCollate() to accept dynamic targetWidth parameter
- Update runBatchInference() to use dynamicWidth instead of fixed width
- Switch model directory from rec_512 to rec_dyn (dynamic-width models)
- Replace recognizer_english with recognizer_latin in unit tests
- Add --model-dir CLI option to benchmark tools
- Update Portuguese test expected outputs for improved accuracy
- Bump version to 0.1.6

* docs(ocr): add v0.1.6 release notes

* fix(ci/ocr): fix vcpkg cache not saving by splitting restore/save

- Remove deprecated save-always from ccache and vcpkg cache steps
- Split vcpkg cache into actions/cache/restore + actions/cache/save
- Bump vcpkg cache key v2 -> v3 to bust stale entries
- Save vcpkg cache only on main branch pushes when key is new

* fix(ci/ocr): update model path from rec_512 to rec_dyn in integration tests

* fix(ci/ocr): fix mobile test downloading wrong package on workflow_dispatch

When the PR workflow was manually dispatched, the mobile test workflow
inherited github.event_name=='workflow_dispatch' and tried to download
from npm with an empty package spec. Check inputs.package instead.

* fix(ci/ocr): rename release tags to ocr-onnx-v<version> for monorepo

* fix(ci/ocr): download rec_dyn models from correct S3 path

The integration test workflow was downloading old models from the
2025-12-16 S3 path (expecting 2560px width). Switch to downloading
dynamic-width models from s3://tether-ai-dev/qvac_models_compiled/ocr/rec_dyn/
which accept variable width input matching the new preprocessing code.

* fix(ci/ocr): download rec_dyn models in benchmark workflow

Update benchmark workflow to download dynamic-width models from
s3://tether-ai-dev/qvac_models_compiled/ocr/rec_dyn/ into the
models/ocr/rec_dyn/ directory matching the updated benchmark scripts.

* QVAC-11630: [OCR] Add statistics to OCR addon and collect performance info (#254)

* QVAC-13067: Apply clang-tidy readability-identifier-naming in addon (#249)

* Apply clang-tidy readability-identifier-naming in addon

* Renamed files for consistency

Removed NOLINT exclusions and renamed variables

* Run git-clang-format

* Updated test that checked function name

* feat!: deprecate util-transcription and remove TranscriptionFfmpegAddon (#239)

BREAKING CHANGE: Remove TranscriptionFfmpegAddon module from whispercpp

This removes the transcription-ffmpeg module from qvac-lib-infer-whispercpp
and deprecates @qvac/util-transcription package.

qvac-lib-infer-whispercpp changes:
- Remove transcription-ffmpeg.js and transcription-ffmpeg.d.ts
- Remove examples/example.ffmpeg.js
- Remove @qvac/util-transcription dependency
- Update README.md to remove TranscriptionFfmpegAddon documentation
- Update test:dts script
- Bump version from 0.3.17 to 0.4.0

qvac-util-transcription changes:
- Add deprecated field to package.json
- Add deprecation notice to README.md
- Bump version from 0.1.4 to 0.1.5

Migration: Users should migrate to @qvac/sdk for transcription
functionality that includes audio decoding.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>

* refactor: Remove redundant formatting in queueOutput calls for cleaner code in WhisperModelJobsHandler (#258)

Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>

* QVAC-11751 chore: Standardize logger & log levels (#257)

* infra: add GPR scope rewrite action and rename CLI to @qvac/cli

* refactor: hardcode workdir in cli-rewrite-sdk-scope action

* refactor: standardize logger & log levels

* fix: improve logger validation and console method usage

* fix: adjust log levels

* QVAC-11149 feat(ocr): Migrate to new c++ addon architecture (#196)

* QVAC-11149 feat(ocr): Migrate to new c++ addon architecture

* Fixed build error

* Fixed addon callback

* Fixed freezing test on Darwin

---------

Co-authored-by: olyasir <sirkinolya@gmail.com>

* rename qvac-docs to docs (#270)

* fix: use GitHub-hosted ARM64 runner for NMTCPP integration tests (#267)

* nmtcpp support for ubuntu-22.04 and above (#261)

* QVAC-12178 (#262)

* nmtcpp support for ubuntu-22.04 and above

* feat(ocr): EasyOCR-style dynamic-width recognizer preprocessing (#179)

* feat(ocr): add EasyOCR-style dynamic-width recognizer preprocessing

Replace fixed-width (512px) recognizer preprocessing with dynamic-width
resizing that preserves aspect ratios. Images are now resized proportionally
to model height (64px) using LANCZOS4 interpolation, and batches use the
max proportional width across all images in the batch.

- Add calculateProportionalWidth() for EasyOCR-style width calculation
- Modify alignAndCollate() to accept dynamic targetWidth parameter
- Update runBatchInference() to use dynamicWidth instead of fixed width
- Switch model directory from rec_512 to rec_dyn (dynamic-width models)
- Replace recognizer_english with recognizer_latin in unit tests
- Add --model-dir CLI option to benchmark tools
- Update Portuguese test expected outputs for improved accuracy
- Bump version to 0.1.6

* docs(ocr): add v0.1.6 release notes

* fix(ci/ocr): fix vcpkg cache not saving by splitting restore/save

- Remove deprecated save-always from ccache and vcpkg cache steps
- Split vcpkg cache into actions/cache/restore + actions/cache/save
- Bump vcpkg cache key v2 -> v3 to bust stale entries
- Save vcpkg cache only on main branch pushes when key is new

* fix(ci/ocr): update model path from rec_512 to rec_dyn in integration tests

* fix(ci/ocr): fix mobile test downloading wrong package on workflow_dispatch

When the PR workflow was manually dispatched, the mobile test workflow
inherited github.event_name=='workflow_dispatch' and tried to download
from npm with an empty package spec. Check inputs.package instead.

* fix(ci/ocr): rename release tags to ocr-onnx-v<version> for monorepo

* fix(ci/ocr): download rec_dyn models from correct S3 path

The integration test workflow was downloading old models from the
2025-12-16 S3 path (expecting 2560px width). Switch to downloading
dynamic-width models from s3://tether-ai-dev/qvac_models_compiled/ocr/rec_dyn/
which accept variable width input matching the new preprocessing code.

* fix(ci/ocr): download rec_dyn models in benchmark workflow

Update benchmark workflow to download dynamic-width models from
s3://tether-ai-dev/qvac_models_compiled/ocr/rec_dyn/ into the
models/ocr/rec_dyn/ directory matching the updated benchmark scripts.

* ubuntu-22.04 support for nmtcpp-ci

---------

Co-authored-by: olyasir <sirkinolya@gmail.com>

* fix: use GitHub-hosted ARM64 runner for NMTCPP integration tests

Replace ubuntu-24.04-arm64-private (self-hosted) with ubuntu-24.04-arm
(GitHub-hosted) to fix SIGILL crash on ARM64 integration tests.

Co-Authored-By: Olya <olya@users.noreply.github.com>

* revert: remove unrelated ocr package changes from branch

Restore packages/qvac-lib-inference-addon-onnx-ocr-fasttext to match main.

* revert: remove unrelated ocr release notes from branch

* revert: remove unrelated ocr workflow changes from branch

* revert: sync ocr workflows with latest main

* ci: add vcpkg cache to NMTCPP prebuilds workflow

Add restore/save vcpkg binary cache steps to speed up NMTCPP prebuilds,
matching the pattern used in the OCR prebuilds workflow.

* ci: cache Vulkan SDK arm64 build and remove duplicate steps

- Remove duplicated Vulkan SDK download/build steps (copy-paste bug)
- Cache the built Vulkan SDK for arm64 to avoid rebuilding from source
  on every run

* ci: use S3-based Vulkan SDK cache for arm64 builds

Replace actions/cache with S3-based caching matching the LLM addon
approach. Shares the same S3 cache key so the built SDK is reused
across addons.

---------

Co-authored-by: alsrivas <40749307+Alok-Ranjan23@users.noreply.github.com>
Co-authored-by: Olya <olya@users.noreply.github.com>

* reenable npm publish on local npm publish action (#279)

* fix: corestore directory deletion order causing EBUSY on windows (#266)

* update readme to local paths (#280)

* chore[notask]: backmerge release-qvac-sdk-0.6.1 into main (#285)

* Reenable npm publish on local action (#287)

* reenable npm publish on local npm publish action

* update action to publish on merge to release branch

* feat: QVAC-10955 sync models from hyperbee to registry

Add 81 new entries to models.prod.json from hyperbee prod.config:
- 74 Bergamot NMT entries (18 language pairs, per-file)
- 2 LFM 2.5 1.2B models (Q4_K_M, Q4_0)
- 2 Qwen3-VL 2B multimodal files (main + mmproj)
- 1 Llama 3.2 1B tool-calling
- 1 GPT-OSS 20B Q4_K_M
- 1 Qwen 3 8B Q4_K_M

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add LFM-1.0 license to allowlist

The Liquid Foundation Models License 1.0 is used by the LFM 2.5 1.2B
models added in the sync.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: remove liquid models and license

* QVAC-13067: Applied clang-tidy naming changes (#292)

* Applied clang-tidy naming changes

* Run git-clang-format

* Add indexer quorum management with integration tests and deployment docs (#290)

* Add indexer quorum management with integration tests and deployment docs

Co-authored-by: Cursor <cursoragent@cursor.com>

* updated schema dep

* Increase timeout for license fetch integration test on CI

Co-authored-by: Cursor <cursoragent@cursor.com>

* Add QVAC_REMOVE_INDEXERS to ENV_KEYS in shared constants

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* changes event to pull_req_target

* added verify label-gating to lint-and-test

* Add OCR rec_dyn models to registry (#288)

* Add 14 OCR rec_dyn models to registry

Add dynamic ONNX OCR models from s3://tether-ai-dev/qvac_models_compiled/ocr/rec_dyn/:
- 1 CRAFT text detector (dynamic)
- 13 text recognizers: Arabic, Bengali, Cyrillic, Devanagari,
  Japanese, Kannada, Korean, Latin, Tamil, Telugu, Thai,
  Chinese Simplified, Chinese Traditional

* chore(registry): remove duplicate detector_craft entry

* chore(registry): add dated S3 paths for OCR rec_dyn models

Copy models to s3://tether-ai-dev/qvac_models_compiled/ocr/2026-02-12/rec_dyn/
and add corresponding entries. Original rec_dyn/ entries kept unchanged.

* chore(registry): keep only dated S3 paths for OCR rec_dyn models

* fix(registry): update old OCR entries to use rec_512 path and latin recognizer

Replace incorrect 2025-04-25 paths with rec_512, swap recognizer_english
for recognizer_latin, and fix detector tags.

* chore(registry): use dated S3 paths for rec_512 OCR models

---------

Co-authored-by: Yury Samarin <yuri.a.samarin@gmail.com>

* feat: add plugin selection example with config and auto-bundling

* fix: remove Android-specific flash attention handling from plugin

---------

Co-authored-by: Yury Samarin <yuri.a.samarin@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Ishan Vohra <ishanvohra2@gmail.com>
Co-authored-by: Ishan Vohra <ishanvohra@Ishans-MacBook-Air.local>
Co-authored-by: GustavoA1604 <54457676+GustavoA1604@users.noreply.github.com>
Co-authored-by: gianni <gianfranco.cordella@tether.io>
Co-authored-by: Dmytro Medvinskyi <functionsilence@gmail.com>
Co-authored-by: Proletter <40578159+Proletter@users.noreply.github.com>
Co-authored-by: Lauri Piisang <lauri.piisang@gmail.com>
Co-authored-by: Sero1000 <37454569+Sero1000@users.noreply.github.com>
Co-authored-by: Sero <sero@Seros-MacBook-Pro.local>
Co-authored-by: Simon Iribarren <simon.ig13@gmail.com>
Co-authored-by: Ridwan Taiwo <donriddo@gmail.com>
Co-authored-by: Maksim Smatrou <maxim-smotrov@users.noreply.github.com>
Co-authored-by: Victor-Rodzko <victor.rodzko@itrexgroup.com>
Co-authored-by: oluwaseun ismaila <oluwaseun.ismaila@tether.io>
Co-authored-by: Juan Pablo Garibotti Arias <jp.garibotti@gmail.com>
Co-authored-by: olyasir <sirkinolya@gmail.com>
Co-authored-by: Raju Sharma <sharmaraju352@gmail.com>
Co-authored-by: alsrivas <40749307+Alok-Ranjan23@users.noreply.github.com>
Co-authored-by: shikha-tether <shikha.singh@tether.io>
Co-authored-by: Juan Pablo Garibotti Arias <juan.arias@bitfinex.com>
Co-authored-by: Freddy Martinez Garcia <freddy311082@gmail.com>
Co-authored-by: dev-nid <nidhinpd811@gmail.com>
Co-authored-by: iancris <17702377+iancris@users.noreply.github.com>
Co-authored-by: saba-innowise <saba.gogichaishvili@innowise.com>
Co-authored-by: Olya <olya@users.noreply.github.com>
@Proletter Proletter deleted the addon_npm_publish_update branch February 27, 2026 07:31
Proletter added a commit that referenced this pull request May 24, 2026
* upddate workdir for multiple workflows

* corrections
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 26, 2026
…l registry PR lands

  Drops the previous shortcut of pointing the addon's vcpkg
  `default-registry` baseline at my personal fork. Instead, the
  vcpkg port files being added in the companion
  qvac-registry-vcpkg PR tetherto#169 are vendored into the addon as an
  overlay port so CI can validate the addon-side migration
  end-to-end against the WIP port without depending on the fork
  staying alive.

  Layout: vcpkg-overlays/whisper-cpp/ — verbatim copy of the
  qvac-registry-vcpkg PR tetherto#169 port tree (portfile.cmake +
  vcpkg.json + patches/0001-move-gnuinstalldirs-before-
  add-subdirectory-src.patch). vcpkg-configuration.json:
  default-registry is restored to tetherto/qvac-registry-vcpkg
  at HEAD (6df36b4f), and a new top-level "overlay-ports"
  entry points at the vendored copy.

  Process this unblocks (per Gustavo's merge protocol):
    1. THIS commit  — addon validates against WIP port via
       overlay (no fork dependency).
    2. CI greens on the addon PR — proves the migration is
       safe.
    3. Merge order is now flexible: registry PR tetherto#169 (and any
       follow-up registry PRs) can be merged independently.
    4. After registry merges, the next commit on the addon
       branch removes vcpkg-overlays/whisper-cpp/, bumps the
       default-registry baseline to the new tetherto/main SHA,
       and re-runs CI to prove the addon still resolves the
       port from the merged registry.
    5. Then the addon PR is merged.

  Verified locally on x64-linux:
    - npx bare-make generate resolves
      whisper-cpp[core,vulkan]@1.8.5 from the overlay path and
      ggml-speech[core,vulkan]@2026-04-09tetherto#4 from tetherto/main
      (logged as
       "whisper-cpp[core,vulkan]:x64-linux@1.8.5 --
          /home/.../vcpkg-overlays/whisper-cpp"
       and
       "ggml-speech[core,vulkan]:x64-linux@2026-04-09#4 --
          git+https://github.com/tetherto/qvac-registry-vcpkg.git@b9dab610").
    - bare-make build + install: clean. Final prebuild stages
      libqvac-speech-ggml-{cpu,vulkan}.a (speech-prefixed —
      confirms ggml-speech consumption, not bundled).
    - npm run test:cpp: 106 / 107 pass (1 pre-existing skip;
      0 failures, 0 regressions). Backend identity capture
      verified from the test log:
      "Active GPU backend: id=2 name='Vulkan'
       device='NVIDIA GeForce RTX 5090'
       mem_total_mb=32607 mem_free_mb=31149".

  Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 26, 2026
…l registry PR lands

  Drops the previous shortcut of pointing the addon's vcpkg
  `default-registry` baseline at my personal fork. Instead, the
  vcpkg port files being added in the companion
  qvac-registry-vcpkg PR tetherto#169 are vendored into the addon as an
  overlay port so CI can validate the addon-side migration
  end-to-end against the WIP port without depending on the fork
  staying alive.

  Layout: vcpkg-overlays/whisper-cpp/ — verbatim copy of the
  qvac-registry-vcpkg PR tetherto#169 port tree (portfile.cmake +
  vcpkg.json + patches/0001-move-gnuinstalldirs-before-
  add-subdirectory-src.patch). vcpkg-configuration.json:
  default-registry is restored to tetherto/qvac-registry-vcpkg
  at HEAD (6df36b4f), and a new top-level "overlay-ports"
  entry points at the vendored copy.

  Process this unblocks (per Gustavo's merge protocol):
    1. THIS commit  — addon validates against WIP port via
       overlay (no fork dependency).
    2. CI greens on the addon PR — proves the migration is
       safe.
    3. Merge order is now flexible: registry PR tetherto#169 (and any
       follow-up registry PRs) can be merged independently.
    4. After registry merges, the next commit on the addon
       branch removes vcpkg-overlays/whisper-cpp/, bumps the
       default-registry baseline to the new tetherto/main SHA,
       and re-runs CI to prove the addon still resolves the
       port from the merged registry.
    5. Then the addon PR is merged.

  Verified locally on x64-linux:
    - npx bare-make generate resolves
      whisper-cpp[core,vulkan]@1.8.5 from the overlay path and
      ggml-speech[core,vulkan]@2026-04-09tetherto#4 from tetherto/main
      (logged as
       "whisper-cpp[core,vulkan]:x64-linux@1.8.5 --
          /home/.../vcpkg-overlays/whisper-cpp"
       and
       "ggml-speech[core,vulkan]:x64-linux@2026-04-09#4 --
          git+https://github.com/tetherto/qvac-registry-vcpkg.git@b9dab610").
    - bare-make build + install: clean. Final prebuild stages
      libqvac-speech-ggml-{cpu,vulkan}.a (speech-prefixed —
      confirms ggml-speech consumption, not bundled).
    - npm run test:cpp: 106 / 107 pass (1 pre-existing skip;
      0 failures, 0 regressions). Backend identity capture
      verified from the test log:
      "Active GPU backend: id=2 name='Vulkan'
       device='NVIDIA GeForce RTX 5090'
       mem_total_mb=32607 mem_free_mb=31149".

  Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 26, 2026
…l registry PR lands

  Drops the previous shortcut of pointing the addon's vcpkg
  `default-registry` baseline at my personal fork. Instead, the
  vcpkg port files being added in the companion
  qvac-registry-vcpkg PR tetherto#169 are vendored into the addon as an
  overlay port so CI can validate the addon-side migration
  end-to-end against the WIP port without depending on the fork
  staying alive.

  Layout: vcpkg-overlays/whisper-cpp/ — verbatim copy of the
  qvac-registry-vcpkg PR tetherto#169 port tree (portfile.cmake +
  vcpkg.json + patches/0001-move-gnuinstalldirs-before-
  add-subdirectory-src.patch). vcpkg-configuration.json:
  default-registry is restored to tetherto/qvac-registry-vcpkg
  at HEAD (6df36b4f), and a new top-level "overlay-ports"
  entry points at the vendored copy.

  Process this unblocks (per Gustavo's merge protocol):
    1. THIS commit  — addon validates against WIP port via
       overlay (no fork dependency).
    2. CI greens on the addon PR — proves the migration is
       safe.
    3. Merge order is now flexible: registry PR tetherto#169 (and any
       follow-up registry PRs) can be merged independently.
    4. After registry merges, the next commit on the addon
       branch removes vcpkg-overlays/whisper-cpp/, bumps the
       default-registry baseline to the new tetherto/main SHA,
       and re-runs CI to prove the addon still resolves the
       port from the merged registry.
    5. Then the addon PR is merged.

  Verified locally on x64-linux:
    - npx bare-make generate resolves
      whisper-cpp[core,vulkan]@1.8.5 from the overlay path and
      ggml-speech[core,vulkan]@2026-04-09tetherto#4 from tetherto/main
      (logged as
       "whisper-cpp[core,vulkan]:x64-linux@1.8.5 --
          /home/.../vcpkg-overlays/whisper-cpp"
       and
       "ggml-speech[core,vulkan]:x64-linux@2026-04-09#4 --
          git+https://github.com/tetherto/qvac-registry-vcpkg.git@b9dab610").
    - bare-make build + install: clean. Final prebuild stages
      libqvac-speech-ggml-{cpu,vulkan}.a (speech-prefixed —
      confirms ggml-speech consumption, not bundled).
    - npm run test:cpp: 106 / 107 pass (1 pre-existing skip;
      0 failures, 0 regressions). Backend identity capture
      verified from the test log:
      "Active GPU backend: id=2 name='Vulkan'
       device='NVIDIA GeForce RTX 5090'
       mem_total_mb=32607 mem_free_mb=31149".

  Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 26, 2026
…l registry PR lands

  Drops the previous shortcut of pointing the addon's vcpkg
  `default-registry` baseline at my personal fork. Instead, the
  vcpkg port files being added in the companion
  qvac-registry-vcpkg PR tetherto#169 are vendored into the addon as an
  overlay port so CI can validate the addon-side migration
  end-to-end against the WIP port without depending on the fork
  staying alive.

  Layout: vcpkg-overlays/whisper-cpp/ — verbatim copy of the
  qvac-registry-vcpkg PR tetherto#169 port tree (portfile.cmake +
  vcpkg.json + patches/0001-move-gnuinstalldirs-before-
  add-subdirectory-src.patch). vcpkg-configuration.json:
  default-registry is restored to tetherto/qvac-registry-vcpkg
  at HEAD (6df36b4f), and a new top-level "overlay-ports"
  entry points at the vendored copy.

  Process this unblocks (per Gustavo's merge protocol):
    1. THIS commit  — addon validates against WIP port via
       overlay (no fork dependency).
    2. CI greens on the addon PR — proves the migration is
       safe.
    3. Merge order is now flexible: registry PR tetherto#169 (and any
       follow-up registry PRs) can be merged independently.
    4. After registry merges, the next commit on the addon
       branch removes vcpkg-overlays/whisper-cpp/, bumps the
       default-registry baseline to the new tetherto/main SHA,
       and re-runs CI to prove the addon still resolves the
       port from the merged registry.
    5. Then the addon PR is merged.

  Verified locally on x64-linux:
    - npx bare-make generate resolves
      whisper-cpp[core,vulkan]@1.8.5 from the overlay path and
      ggml-speech[core,vulkan]@2026-04-09tetherto#4 from tetherto/main
      (logged as
       "whisper-cpp[core,vulkan]:x64-linux@1.8.5 --
          /home/.../vcpkg-overlays/whisper-cpp"
       and
       "ggml-speech[core,vulkan]:x64-linux@2026-04-09#4 --
          git+https://github.com/tetherto/qvac-registry-vcpkg.git@b9dab610").
    - bare-make build + install: clean. Final prebuild stages
      libqvac-speech-ggml-{cpu,vulkan}.a (speech-prefixed —
      confirms ggml-speech consumption, not bundled).
    - npm run test:cpp: 106 / 107 pass (1 pre-existing skip;
      0 failures, 0 regressions). Backend identity capture
      verified from the test log:
      "Active GPU backend: id=2 name='Vulkan'
       device='NVIDIA GeForce RTX 5090'
       mem_total_mb=32607 mem_free_mb=31149".

  Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 26, 2026
…ggml PR tetherto#13 HEAD

Wires Zbig9000/qvac-ext-ggml@QVAC-18992-merge-ggml-from-whisper-cpp@d39c0d29
(qvac-ext-ggml PR tetherto#13) into the addon's vcpkg-configuration.json as an
overlay port, alongside the existing whisper-cpp overlay (registry PR tetherto#169).

This lets the addon's full CI matrix exercise BOTH:
  - whisper-cpp 1.8.5 from registry PR tetherto#169 (already present)
  - ggml-speech 2026-05-26 from qvac-ext-ggml PR tetherto#13 (new)

before either underlying PR is merged to its respective registry/branch.

Overlay diff vs registry's ggml-speech@2026-04-09 tetherto#4:
  - REF/SHA512 → PR tetherto#13 HEAD (d39c0d29)
  - new vulkan dep on spirv-headers
  - new patch 0001-ggml-vulkan-find-spirv-headers.patch wiring SPIRV-Headers
    into ggml-vulkan (PR tetherto#13's v0.10.2 sync adds #include <spirv/unified1/spirv.hpp>
    but upstream ggml-vulkan CMakeLists.txt never finds SPIRV-Headers; the
    same fix should be pushed upstream later and the patch dropped)
  - version-date / port-version bumped so vcpkg picks overlay over registry

Local validation with both overlays active:
  - vcpkg dep graph: ggml-speech resolves from vcpkg-overlays/ggml-speech,
    whisper-cpp from vcpkg-overlays/whisper-cpp, spirv-headers from microsoft/vcpkg
  - cryptographic confirmation: buildtree src/ggml-vulkan/ggml-vulkan.cpp
    sha256 IDENTICAL to qvac-ext-ggml@d39c0d29:src/ggml-vulkan/ggml-vulkan.cpp,
    GGML_VERSION = 0.10.2 (PR tetherto#13's upstream sync)
  - linux-x64 cpp tests: 107/107 pass
  - js suite: test:dts + lint + unit (30/30) + integration (10/10) + multiple +
    accuracy (Japanese WER 0%) + chunking (10-min audio) + live-stream-simulation +
    model-file-validation (5/5)
  - cpp-lint: clang-format clean, clang-tidy-19 0 user-code errors

Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 27, 2026
…; bump version>=ggml-speech in whisper-cpp overlay

Two related overlay corrections so the overlay tree is a verbatim
mirror of what qvac-registry-vcpkg PR tetherto#169 will publish:

1. vcpkg-overlays/ggml-speech/ was still pinned to the pre-merge fork
   (Zbig9000/qvac-ext-ggml@QVAC-18992-merge-ggml-from-whisper-cpp@e31785e4,
   version-date 2026-05-26#0) from the days before tetherto/qvac-ext-ggml
   PR tetherto#13 merged. Synced wholesale to qvac-registry-vcpkg/ports/ggml-speech:
     REF      e31785e4 -> c9126afc (merge commit of PR tetherto#13 on @speech)
     SHA512   <fork SHA> -> <tetherto SHA>
     HEAD_REF QVAC-18992-merge-ggml-from-whisper-cpp -> speech
     version-date 2026-05-26#0 -> 2026-05-27#0
     description updated to drop "LOCAL OVERLAY" language

   Source-wise this is a no-op (c9126afc on @speech contains e31785e4
   as its single PR-side parent, so the tree is identical), but the
   overlay must declare the exact REF/version that will land in the
   registry so the build is provably what gets published.

2. vcpkg-overlays/whisper-cpp/vcpkg.json: version>=ggml-speech bumped
   2026-04-09#4 -> 2026-05-27. whisper-cpp@1.8.5 only works against the
   new ggml-speech (v0.10.2 vendored sources, new symbol set,
   spirv-headers Vulkan wiring), so the constraint must reflect that
   minimum. In practice the resolver always picked 2026-05-27 from the
   addon's own override, so this is metadata-only and not a behavior
   change.

Local validation on x64-linux (vulkan feature) with synced overlays:
  - bare-make generate resolves ggml-speech[core,vulkan]@2026-05-27
    (was 2026-05-26 with the stale overlay) + whisper-cpp[core,vulkan]@1.8.5
    + spirv-headers (transitive from ggml-speech vulkan dep)
  - build links clean
  - npm run test:cpp        -> 107/107 pass
  - npm run test:unit       -> 30/30 pass
  - npm run test:dts        -> clean

Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit to Zbig9000/qvac that referenced this pull request May 27, 2026
…1.4.341.0

Mirrors the same fix in qvac-registry-vcpkg PR tetherto#169 so the overlay
stays a verbatim copy of what the registry will publish. Without a
version>= constraint, the resolved spirv-headers version depends
entirely on the consumer's microsoft/vcpkg baseline; 1.4.341.0 is
the version already used by qvac-fabric.

Local validation on x64-linux: vcpkg upgrades spirv-headers from the
addon's baseline 1.4.304.1 to the required 1.4.341.0, addon builds
clean, 107/107 cpp tests + 30/30 unit tests pass.

Co-authored-by: Cursor <cursoragent@cursor.com>
Zbig9000 added a commit that referenced this pull request May 28, 2026
… feature + GPU backend identity (QVAC-19236, QVAC-18992, QVAC-18993) (#2270)

* transcription-whispercpp 0.9.0: ggml-speech migration + metal feature + GPU backend identity in runtime stats

  Three ticket deliverables combined into a single coordinated 0.9.0
  release of the addon (paired with the whisper-cpp 1.8.5 + metal-feature
  port rewrite landing in qvac-registry-vcpkg companion PR):

  QVAC-18992 — Migrate to use ggml speech branch
  ----------------------------------------------
  Addon now consumes `whisper-cpp 1.8.5#0` which links the system-
  installed `ggml-speech` (port-version 4) via WHISPER_USE_SYSTEM_GGML=ON.
  Whisper + parakeet + tts all share the same libqvac-speech-ggml-*
  binary set on every triplet (was: whisper-cpp brought a separate
  libqvac-ggml-* set).

  CMakeLists.txt: rewritten to mirror transcription-parakeet exactly —
  two-branch BACKEND_DL_LIBS / BACKEND_DL_LOOSE_SOS collection so the
  per-arch CPU IMPORTED targets and the MODULE Vulkan/OpenCL .so files
  (which ggml-config deliberately omits from GGML_AVAILABLE_BACKENDS)
  both get staged into prebuilds/<bare_target>/<module_name>/ for the
  runtime ggml_backend_load_all_from_path() scan. The old whisper-
  specific find_library fallback (created SHARED IMPORTED targets from
  raw .so paths to work around bundled-ggml's MODULE-target export gap)
  is removed — ggml-speech port surfaces what it can, BACKEND_DL_LOOSE_SOS
  catches the rest.

  vcpkg-configuration.json default-registry baseline pinned to my fork
  for CI; will be re-pinned to tetherto/qvac-registry-vcpkg HEAD after
  the companion vcpkg-registry PR merges.

  vcpkg.json override bumped to whisper-cpp 1.8.5#0.

  QVAC-19236 — Expose backend selection as features
  -------------------------------------------------
  Addon's vcpkg.json now selects whisper-cpp[metal] for osx (was
  unconditionally on via the portfile; now declarative). iOS dep entry
  stays without the [metal] feature until the separate iOS
  Metal/MTLCompiler XPC crash is investigated — iOS continues to ship
  on the CPU backend by simply not asking for [metal].

  QVAC-18993 — Android dynamic-backend + per-device GPU assertion
  ---------------------------------------------------------------
  Added a one-shot device introspection step at model load time:
  `WhisperModel::captureActiveBackendInfo()` enumerates the ggml
  backend registry (after ensureBackendsLoadedAndroid() loads the
  dynamic .so modules on Android) and records the first GPU/IGPU
  device's identity + memory snapshot. Result is surfaced through
  the existing runtimeStats() pipeline as three new keys (the
  RuntimeStats variant only takes double|int64_t, so backend
  identity is encoded as a stable numeric enum):

    gpuBackendId   0=CPU, 1=Metal, 2=Vulkan, 3=OpenCL, 4=CUDA, 99=other
    gpuMemTotalMb  -1 when the device does not expose memory accounting
    gpuMemFreeMb   -1 when the device does not expose memory accounting

  The selected backend's full name + device description are also
  logged once via QLOG(INFO) so they're recoverable from the Android
  Device-Farm logcat capture for the human-readable assertion side
  (S25 -> "OpenCL" / "Adreno (TM) …", Pixel 9 -> "Vulkan" / "Mali-…").

  Mobile-perf-runner.js now asserts the new keys are present and, on
  Android with use_gpu=true, that gpuBackendId resolves to either
  Vulkan (2) or OpenCL (3) — the union covers both Device-Farm device
  families without needing a per-device branch from inside the bare
  spec (the device capabilities split lives in the wdio config, not
  here).

  index.d.ts: extended RuntimeStats with the three new keys + the
  enum documentation. CHANGELOG.md: consolidated 0.9.0 entry covering
  all three tickets.

  Verified locally on linux-x64:
    - npx bare-make generate succeeds (whisper-cpp 1.8.5 + ggml-speech
      2026-04-09#4 resolve cleanly via my fork baseline)
    - npx bare-make build succeeds (.bare module + libqvac-speech-
      ggml-cpu.a + libqvac-speech-ggml-vulkan.a linked into prebuilds)
    - test:cpp passes: 106 / 107 (1 streaming case skipped, pre-
      existing; 0 failures, 0 regressions). Backend capture verified
      from the test log: `Active GPU backend: id=2 name='Vulkan'
      device='NVIDIA GeForce RTX 5090' mem_total_mb=32607 mem_free_mb=31342`.

  Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: pin whisper-cpp WIP port as an overlay until registry PR lands

  Drops the previous shortcut of pointing the addon's vcpkg
  `default-registry` baseline at my personal fork. Instead, the
  vcpkg port files being added in the companion
  qvac-registry-vcpkg PR #169 are vendored into the addon as an
  overlay port so CI can validate the addon-side migration
  end-to-end against the WIP port without depending on the fork
  staying alive.

  Layout: vcpkg-overlays/whisper-cpp/ — verbatim copy of the
  qvac-registry-vcpkg PR #169 port tree (portfile.cmake +
  vcpkg.json + patches/0001-move-gnuinstalldirs-before-
  add-subdirectory-src.patch). vcpkg-configuration.json:
  default-registry is restored to tetherto/qvac-registry-vcpkg
  at HEAD (6df36b4f), and a new top-level "overlay-ports"
  entry points at the vendored copy.

  Process this unblocks (per Gustavo's merge protocol):
    1. THIS commit  — addon validates against WIP port via
       overlay (no fork dependency).
    2. CI greens on the addon PR — proves the migration is
       safe.
    3. Merge order is now flexible: registry PR #169 (and any
       follow-up registry PRs) can be merged independently.
    4. After registry merges, the next commit on the addon
       branch removes vcpkg-overlays/whisper-cpp/, bumps the
       default-registry baseline to the new tetherto/main SHA,
       and re-runs CI to prove the addon still resolves the
       port from the merged registry.
    5. Then the addon PR is merged.

  Verified locally on x64-linux:
    - npx bare-make generate resolves
      whisper-cpp[core,vulkan]@1.8.5 from the overlay path and
      ggml-speech[core,vulkan]@2026-04-09#4 from tetherto/main
      (logged as
       "whisper-cpp[core,vulkan]:x64-linux@1.8.5 --
          /home/.../vcpkg-overlays/whisper-cpp"
       and
       "ggml-speech[core,vulkan]:x64-linux@2026-04-09#4 --
          git+https://github.com/tetherto/qvac-registry-vcpkg.git@b9dab610").
    - bare-make build + install: clean. Final prebuild stages
      libqvac-speech-ggml-{cpu,vulkan}.a (speech-prefixed —
      confirms ggml-speech consumption, not bundled).
    - npm run test:cpp: 106 / 107 pass (1 pre-existing skip;
      0 failures, 0 regressions). Backend identity capture
      verified from the test log:
      "Active GPU backend: id=2 name='Vulkan'
       device='NVIDIA GeForce RTX 5090'
       mem_total_mb=32607 mem_free_mb=31149".

  Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: clang-format + clang-tidy fixes on captureActiveBackendInfo()

  Caught locally by running the exact CI cpp-lint commands against
  this branch:

    git-clang-format --binary clang-format --extensions c,cc,cpp,...
      --diff "$(git merge-base HEAD upstream/main)" -- packages/transcription-whispercpp

    clang-tidy-19 -p build addon/src/model-interface/whisper.cpp/WhisperModel.cpp
      --header-filter='^.../packages/transcription-whispercpp/addon/...'
      --warnings-as-errors='*'

  Two findings, both in code added by the previous commit fab6888:

  1. clang-format (8 hunks): include ordering (now grouped
     alphabetically per the project's IncludeBlocks rule),
     allman-style brace wrapping around the single-statement
     `if` bodies in gpuBackendIdFromName() and on the
     `dev == nullptr` early-continue in captureActiveBackendInfo(),
     and the column-limit-driven multi-line spread on the
     std::transform() call and the two
     gpu_mem_{total,free}_mb_ ternary assignments.

  2. clang-tidy readability-identifier-naming on the new
     `K_BYTES_PER_MB` local constexpr: project convention enforced
     by .clang-tidy is `kBytesPerMb` (lower-camel with a `k`
     prefix) for function-scope constants, not SCREAMING_SNAKE.
     Renamed to kBytesPerMb at all three use sites.

  Re-validated after the fix:
    - clang-format --diff: no remaining diffs
    - clang-tidy-19 --warnings-as-errors='*': 0 user-code errors
      (4137 warnings, all suppressed as non-user-code per the
       header-filter regex)
    - npx bare-make generate + build + install: clean
    - npm run test:cpp: 107 / 107 pass (kBytesPerMb rename is a
      pure identifier change; behaviour is byte-for-byte identical
      and the Vulkan backend identity log still reports
      `Active GPU backend: id=2 name='Vulkan'
       device='NVIDIA GeForce RTX 5090'
       mem_total_mb=32607 mem_free_mb=31178`).
    - npm run test:dts: clean
    - npm run lint (standardJS): clean
    - npm run test:unit / test:integration / test:integration:multiple
      / test:integration:chunking / test:integration:accuracy
      (multi-lang incl. Japanese WER 0.00%) / test:integration:live-stream-simultion
      / test:unit:reload:esraw / test:integration:model-file-validation
      / test:integration:corrupted-model — all pass with the new
      formatted source.

  Confirms the new captureActiveBackendInfo() introduced in
  fab6888 would have been caught by CI on the first push;
  fixing locally before re-trigger avoids one CI cycle.

  Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: add ggml-speech overlay pinned to qvac-ext-ggml PR #13 HEAD

Wires Zbig9000/qvac-ext-ggml@QVAC-18992-merge-ggml-from-whisper-cpp@d39c0d29
(qvac-ext-ggml PR #13) into the addon's vcpkg-configuration.json as an
overlay port, alongside the existing whisper-cpp overlay (registry PR #169).

This lets the addon's full CI matrix exercise BOTH:
  - whisper-cpp 1.8.5 from registry PR #169 (already present)
  - ggml-speech 2026-05-26 from qvac-ext-ggml PR #13 (new)

before either underlying PR is merged to its respective registry/branch.

Overlay diff vs registry's ggml-speech@2026-04-09 #4:
  - REF/SHA512 → PR #13 HEAD (d39c0d29)
  - new vulkan dep on spirv-headers
  - new patch 0001-ggml-vulkan-find-spirv-headers.patch wiring SPIRV-Headers
    into ggml-vulkan (PR #13's v0.10.2 sync adds #include <spirv/unified1/spirv.hpp>
    but upstream ggml-vulkan CMakeLists.txt never finds SPIRV-Headers; the
    same fix should be pushed upstream later and the patch dropped)
  - version-date / port-version bumped so vcpkg picks overlay over registry

Local validation with both overlays active:
  - vcpkg dep graph: ggml-speech resolves from vcpkg-overlays/ggml-speech,
    whisper-cpp from vcpkg-overlays/whisper-cpp, spirv-headers from microsoft/vcpkg
  - cryptographic confirmation: buildtree src/ggml-vulkan/ggml-vulkan.cpp
    sha256 IDENTICAL to qvac-ext-ggml@d39c0d29:src/ggml-vulkan/ggml-vulkan.cpp,
    GGML_VERSION = 0.10.2 (PR #13's upstream sync)
  - linux-x64 cpp tests: 107/107 pass
  - js suite: test:dts + lint + unit (30/30) + integration (10/10) + multiple +
    accuracy (Japanese WER 0%) + chunking (10-min audio) + live-stream-simulation +
    model-file-validation (5/5)
  - cpp-lint: clang-format clean, clang-tidy-19 0 user-code errors

Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: bump ggml-speech overlay to PR #13 HEAD e31785e4

Picks up the Apple-Metal build fix pushed to qvac-ext-ggml PR #13
(restores the lost 'typedef struct {' before
ggml_metal_kargs_supertonic_depthwise_1d in src/ggml-metal/ggml-metal-impl.h).

Without this bump the Apple-Metal prebuild matrix (darwin-arm64,
ios-arm64, ios-arm64-simulator, ios-x64-simulator) fails to compile
against PR #13's source.

Local linux-x64 re-validation: vcpkg downloads the new tarball
(e31785e4), applies the spirv-headers patch, builds clean, 107/107
C++ tests pass.

Co-authored-by: Cursor <cursoragent@cursor.com>

* vcpkg-overlays: sync ggml-speech overlay to registry post-merge state; bump version>=ggml-speech in whisper-cpp overlay

Two related overlay corrections so the overlay tree is a verbatim
mirror of what qvac-registry-vcpkg PR #169 will publish:

1. vcpkg-overlays/ggml-speech/ was still pinned to the pre-merge fork
   (Zbig9000/qvac-ext-ggml@QVAC-18992-merge-ggml-from-whisper-cpp@e31785e4,
   version-date 2026-05-26#0) from the days before tetherto/qvac-ext-ggml
   PR #13 merged. Synced wholesale to qvac-registry-vcpkg/ports/ggml-speech:
     REF      e31785e4 -> c9126afc (merge commit of PR #13 on @speech)
     SHA512   <fork SHA> -> <tetherto SHA>
     HEAD_REF QVAC-18992-merge-ggml-from-whisper-cpp -> speech
     version-date 2026-05-26#0 -> 2026-05-27#0
     description updated to drop "LOCAL OVERLAY" language

   Source-wise this is a no-op (c9126afc on @speech contains e31785e4
   as its single PR-side parent, so the tree is identical), but the
   overlay must declare the exact REF/version that will land in the
   registry so the build is provably what gets published.

2. vcpkg-overlays/whisper-cpp/vcpkg.json: version>=ggml-speech bumped
   2026-04-09#4 -> 2026-05-27. whisper-cpp@1.8.5 only works against the
   new ggml-speech (v0.10.2 vendored sources, new symbol set,
   spirv-headers Vulkan wiring), so the constraint must reflect that
   minimum. In practice the resolver always picked 2026-05-27 from the
   addon's own override, so this is metadata-only and not a behavior
   change.

Local validation on x64-linux (vulkan feature) with synced overlays:
  - bare-make generate resolves ggml-speech[core,vulkan]@2026-05-27
    (was 2026-05-26 with the stale overlay) + whisper-cpp[core,vulkan]@1.8.5
    + spirv-headers (transitive from ggml-speech vulkan dep)
  - build links clean
  - npm run test:cpp        -> 107/107 pass
  - npm run test:unit       -> 30/30 pass
  - npm run test:dts        -> clean

Co-authored-by: Cursor <cursoragent@cursor.com>

* vcpkg-overlays/ggml-speech: pin spirv-headers vulkan dep to version>=1.4.341.0

Mirrors the same fix in qvac-registry-vcpkg PR #169 so the overlay
stays a verbatim copy of what the registry will publish. Without a
version>= constraint, the resolved spirv-headers version depends
entirely on the consumer's microsoft/vcpkg baseline; 1.4.341.0 is
the version already used by qvac-fabric.

Local validation on x64-linux: vcpkg upgrades spirv-headers from the
addon's baseline 1.4.304.1 to the required 1.4.341.0, addon builds
clean, 107/107 cpp tests + 30/30 unit tests pass.

Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: drop vcpkg overlays now that qvac-registry-vcpkg#169 is merged

Step E of the cross-repo merge protocol: now that the registry PR has
landed on tetherto/qvac-registry-vcpkg@main as b54eb17 ("whisper-cpp
1.8.5 + ggml-speech 2026-05-27 + tts-cpp/parakeet-cpp re-validation"),
the addon no longer needs the WIP overlay ports.

  vcpkg-configuration.json:
    - default-registry.baseline 6df36b4f -> b54eb17 (the merge SHA of
      qvac-registry-vcpkg#169)
    - drop overlay-ports block (vcpkg-overlays/{whisper-cpp,ggml-speech}/)
  vcpkg-overlays/whisper-cpp/  -> removed
  vcpkg-overlays/ggml-speech/  -> removed

The whisper-cpp version pin in vcpkg.json overrides is unchanged (still
1.8.5 / port-version 0), which now resolves straight from the registry.
ggml-speech is pulled in transitively at 2026-05-27#0 (the new baseline).
spirv-headers is pulled in transitively from microsoft/vcpkg at the
1.4.341.0 floor declared in the new ggml-speech port.

Local validation on x64-linux (vulkan feature) against the merged
registry, with no overlays:
  - bare-make generate resolves
      ggml-speech[core,vulkan]:x64-linux@2026-05-27
        -> tetherto/qvac-registry-vcpkg git-tree c201f77 (identical
           to the overlay-phase tree -- proves the source code is the
           same as what CI ran the last 28/28 green matrix on)
      whisper-cpp[core,vulkan]:x64-linux@1.8.5
        -> tetherto/qvac-registry-vcpkg git-tree d18888f (also
           identical to the overlay-phase tree)
      spirv-headers:x64-linux@1.4.341.0
        -> microsoft/vcpkg (transitive via ggml-speech[vulkan])
    The ggml-speech and whisper-cpp package-ABI hashes are byte-identical
    to the last overlay-phase run, confirming the registry resolution
    and the overlay resolution install the exact same content.
  - build links clean
  - npm run test:cpp        -> 107/107 pass
  - npm run test:unit       -> 30/30 pass
  - npm run test:dts        -> clean

Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: revert default-registry baseline bump

Address @jpgaribotti review on #2270: "Don't update the baseline."

The whisper-cpp@1.8.5#0 override in vcpkg.json + the version>=ggml-speech
and version>=spirv-headers constraints declared inside the new
whisper-cpp and ggml-speech ports are enough to pull the new ports
out of the registry's git history without bumping the baseline past
a9d7e924 -- vcpkg's overrides walk the registry's versions/ database
across history, they are not gated on the baseline tree.

Local re-validation on x64-linux (vulkan), with baseline kept at
a9d7e924 (the value already on tetherto/qvac@main):
  bare-make generate resolves:
    ggml-speech[core,vulkan]:x64-linux@2026-05-27 -> git-tree c201f77
    whisper-cpp[core,vulkan]:x64-linux@1.8.5      -> git-tree d18888f
    spirv-headers:x64-linux@1.4.341.0             -> microsoft/vcpkg
  All three resolved git-trees and package-ABI hashes match the
  previous baseline-bumped run byte-for-byte, confirming the dropped
  baseline change is purely a no-op for what gets installed.

  Build links clean, npm run test:cpp 107/107 pass, test:unit 30/30
  pass, test:dts clean.

Co-authored-by: Cursor <cursoragent@cursor.com>

* transcription-whispercpp: address jpgaribotti review on backend identity API

Four review items on PR #2270:

1. Align BackendId numeric values with transcription-parakeet's
   BackendId enum (CPU=0, Metal=1, CUDA=2, Vulkan=3, OpenCL=4,
   Other=99). Whisper previously used (Metal=1, Vulkan=2, OpenCL=3,
   CUDA=4) which silently broke cross-addon device-farm comparison.
   While we're at it, rename gpuBackendId -> backendId and add a
   companion backendDevice (0=CPU, 1=GPU) so the RuntimeStats shape
   mirrors parakeet's. Public-API change but 0.9.0 hasn't shipped yet
   so no migration cost.

2. Replicate whisper.cpp's exact GPU selection in
   captureActiveBackendInfo() so the reported backend matches what
   whisper actually initialised against:
     - read use_gpu / gpu_device out of WhisperConfig (was: always
       enumerate, even for use_gpu=false)
     - pick GGML_BACKEND_DEVICE_TYPE_GPU only (was: GPU or IGPU --
       whisper rejects IGPU, so reporting one would lie)
     - honour gpu_device index when set (was: ignored)
   Was: first-match enumeration across all GPU/IGPU devices, could
   disagree with whisper's pick on Android where Vulkan and OpenCL
   both register and ggml_backend_dev_get() order differs from
   whisper's preference.

3. Emit a WARNING through the addon logger when use_gpu=true was
   requested but no GPU device is registered (silent CPU fallback
   case). Mirrors ParakeetModel::loadModel()'s WARNING so the
   iOS/desktop mobile-perf paths stop hiding silent CPU fallback
   behind a "backendId !== null" assertion.

4. CHANGELOG.md: drop the "Re-pinned the default-registry baseline..."
   paragraph -- we're keeping the baseline conservative per the same
   review.

Files updated to keep everything in sync:
  - addon/src/model-interface/whisper.cpp/WhisperModel.hpp: rename
    gpu_backend_id_ -> backend_id_, add backend_device_, rename
    gpu_backend_name_ -> backend_name_, update doc comment numbers.
  - addon/src/model-interface/whisper.cpp/WhisperModel.cpp: rewrite
    backendIdFromName() -> backendIdFromRegName() with parakeet's
    numbering and the Metal/MTL alias parakeet uses; rewrite
    captureActiveBackendInfo() per items 2-3; switch runtimeStats()
    to emit backendDevice + backendId (was: gpuBackendId only).
  - index.d.ts: rename gpuBackendId -> backendId, add backendDevice,
    introduce BackendId enum (re-exported from the namespace) with
    the same docstring shape parakeet uses; emphasise the cross-addon
    contract.
  - test/integration/mobile-perf-runner.js: switch to
    backendDevice + backendId; flip the Android-GPU assertion union
    from "Vulkan=2 || OpenCL=3" to "Vulkan=3 || OpenCL=4"; also
    assert backendDevice is reported.
  - CHANGELOG.md: rewrite the 0.9.0 "Added" runtime-stats bullet to
    describe the new field shape + numbering + BackendId enum, drop
    the baseline-bump paragraph.

Local validation on x64-linux (vulkan feature) with the conservative
baseline (a9d7e924, no change):
  - bare-make generate / build / install: clean
  - npm run test:cpp        -> 107/107 pass
  - npm run test:unit       -> 30/30 pass
  - npm run test:dts        -> clean (BackendId enum + new fields type-check)
  - npm run test:integration -> 10/10 pass
  - npm run test:integration:accuracy -> 8/8 pass
  - npm run test:integration:chunking -> 1/1 pass
  - git-clang-format --diff vs upstream/main: clean
  - clang-tidy-19 -p build WhisperModel.cpp: 0 user-code warnings

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.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