Skip to content
Closed
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
0f54f39
feat: add bci-whispercpp package for brain-computer interface neural …
Apr 9, 2026
1e13e92
feat(bci): restore C++ addon and add ONNX inference for Python-matchi…
Apr 9, 2026
735cc4a
fix(bci): fix day projection transposition and missing time positiona…
Apr 9, 2026
dbbf6c9
feat(bci): match Python BrainWhisperer output via GGML native inference
Apr 9, 2026
c8474c2
feat(bci): add windowed attention and SOS token fix for whisper.cpp
Apr 9, 2026
efe8fbf
doc: update README and remove obsolete STATUS.md
Apr 9, 2026
fce7800
fix(bci): address PR review — remove ONNX/Python artifacts, clean up …
Apr 10, 2026
1fd70e9
fix(bci): address code review — fix async, static lang, patch, cleanup
Apr 13, 2026
1dbf940
chore(bci): align bci.js with whisper pattern and add LICENSE/NOTICE
Apr 13, 2026
12d9dbf
fix(bci): generate embedder weights in convert-model.py and fail when…
Apr 13, 2026
0bba997
ci(bci): add integration test workflow for desktop platforms
Apr 13, 2026
052f8fc
ci(bci): add push trigger to integration test workflow
Apr 13, 2026
32e959b
ci(bci): download models from GitHub release instead of S3
Apr 13, 2026
a47a474
ci(bci): re-trigger integration tests (fork now public)
Apr 13, 2026
b30e620
ci(bci): build native addon from source in integration tests
Apr 13, 2026
45964d5
ci(bci): add prebuilds workflow, chain prebuild → integration tests
Apr 13, 2026
6a6f78c
ci(bci): fix vcpkg 403 — persist-credentials: false + explicit git auth
Apr 13, 2026
3a20886
ci(bci): fix vcpkg git auth via GIT_CONFIG_GLOBAL, drop linux-arm64
Apr 13, 2026
8a71574
ci(bci): pass GIT_CONFIG_GLOBAL through vcpkg clean env
Apr 13, 2026
91693bb
ci(bci): remove qvac-lint-cpp from vcpkg deps (fixes 403 in prebuild)
Apr 13, 2026
4301465
ci(bci): add no-op overlay port for qvac-lint-cpp
Apr 13, 2026
3f6a8d8
ci(bci): provide stub .clang-format in qvac-lint-cpp overlay
Apr 13, 2026
3eebfa3
ci(bci): add missing stub files to qvac-lint-cpp overlay
Apr 13, 2026
889529d
test(bci): increase integration test timeouts for CI runners
Apr 13, 2026
61a0765
ci(bci): add mobile prebuilds + Device Farm integration tests
Apr 13, 2026
2c0e465
ci(bci): re-trigger mobile prebuild pipeline
Apr 13, 2026
609d409
ci(bci): re-trigger prebuilds pipeline
Apr 13, 2026
66262e5
ci(bci): remove pull-requests:write from mobile test (fixes startup_f…
Apr 13, 2026
c1dc53a
ci(bci): add mobile workflow to push paths filter
Apr 13, 2026
5aaa2e8
fix(bci): use package name in mobile test instead of relative import
Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,333 changes: 1,333 additions & 0 deletions .github/workflows/integration-mobile-test-bci-whispercpp.yml

Large diffs are not rendered by default.

266 changes: 266 additions & 0 deletions .github/workflows/integration-test-bci-whispercpp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,266 @@
name: "Integration Tests (BCI Whispercpp)"

on:
workflow_dispatch:
inputs:
prebuild_package:
description: "NPM package containing prebuilds (e.g. @qvac/bci-whispercpp@0.1.0)"
required: false
type: string
workflow_call:
inputs:
ref:
description: "ref"
type: string
required: false
repository:
type: string
required: false
default: "tetherto/qvac"
workdir:
description: "Working directory inside the repo (monorepo package path)"
type: string
required: false
default: "packages/bci-whispercpp"

env:
PKG_DIR: packages/bci-whispercpp

jobs:
run-integration-tests:
timeout-minutes: 60
continue-on-error: true
runs-on: ${{ matrix.os }}
name: test-${{ matrix.platform }}-${{ matrix.arch }}

permissions:
contents: read
packages: read

strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
platform: linux
arch: x64
- os: macos-15-xlarge
platform: darwin
arch: arm64
- os: macos-15-large
platform: darwin
arch: x64
- os: windows-2022
platform: win32
arch: x64

steps:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: lts/*

- name: Windows - enable git long paths
if: ${{ matrix.platform == 'win32' }}
shell: powershell
run: git config --system core.longpaths true

- name: Checkout code
uses: actions/checkout@v6
with:
repository: ${{ inputs.repository || github.repository }}
ref: ${{ inputs.ref || github.ref }}
token: ${{ secrets.PAT_TOKEN }}

- name: Configure scoped registry (Unix)
if: ${{ matrix.platform != 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
env:
GPR_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GIT_PAT: ${{ secrets.PAT_TOKEN }}
shell: bash
run: |
set -eu
cat > .npmrc <<NPMRC
always-auth=true
registry=https://registry.npmjs.org/
@qvac:registry=https://registry.npmjs.org/
@tetherto:registry=https://npm.pkg.github.com/
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
//npm.pkg.github.com/:_authToken=${GPR_TOKEN}
NPMRC

if [ -n "${GIT_PAT:-}" ]; then
git config --global url."https://${GIT_PAT}:@github.com/".insteadOf "https://github.com/"
else
git config --global url."https://${{ github.token }}:@github.com/".insteadOf "https://github.com/"
fi

- name: Configure scoped registry (Windows)
if: ${{ matrix.platform == 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
env:
GPR_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GIT_PAT: ${{ secrets.PAT_TOKEN }}
shell: powershell
run: |
$npmrc = @"
always-auth=true
registry=https://registry.npmjs.org/
@qvac:registry=https://registry.npmjs.org/
@tetherto:registry=https://npm.pkg.github.com/
//registry.npmjs.org/:_authToken=$env:NPM_TOKEN
//npm.pkg.github.com/:_authToken=$env:GPR_TOKEN
"@
$npmrc | Out-File -FilePath .npmrc -Encoding utf8
if ($env:GIT_PAT) {
git config --global url."https://$($env:GIT_PAT):@github.com/".insteadOf "https://github.com/"
} else {
git config --global url."https://${{ github.token }}:@github.com/".insteadOf "https://github.com/"
}

- name: Install NPM dependencies
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
run: |
npm install
npm install -g bare@1.26.0 bare-make

- name: Download prebuilds from artifact
if: ${{ !inputs.prebuild_package }}
uses: actions/download-artifact@v7
with:
path: ${{ inputs.workdir || env.PKG_DIR }}/prebuilds
merge-multiple: true

- name: Download prebuilds from package (Unix)
if: ${{ inputs.prebuild_package && matrix.platform != 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: bash
run: |
mkdir -p prebuilds
npm pack ${{ inputs.prebuild_package }} --pack-destination /tmp
tar -xzf /tmp/*.tgz -C /tmp
cp -r /tmp/package/prebuilds/* prebuilds/

- name: Download prebuilds from package (Windows)
if: ${{ inputs.prebuild_package && matrix.platform == 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: powershell
run: |
New-Item -ItemType Directory -Force -Path prebuilds | Out-Null
npm pack ${{ inputs.prebuild_package }} --pack-destination $env:TEMP
$tgz = Get-ChildItem "$env:TEMP\*.tgz" | Select-Object -First 1
tar -xzf $tgz.FullName -C $env:TEMP
Copy-Item -Path "$env:TEMP\package\prebuilds\*" -Destination prebuilds -Recurse -Force

- name: Download BCI models and test fixtures (Unix)
if: ${{ matrix.platform != 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: bash
env:
GH_TOKEN: ${{ secrets.PAT_TOKEN }}
run: |
mkdir -p models test/fixtures
gh release download bci-test-assets-v0.1.0 \
--repo sharmaraju352/qvac \
--pattern "ggml-bci-windowed.bin" --dir models/ \
--clobber
gh release download bci-test-assets-v0.1.0 \
--repo sharmaraju352/qvac \
--pattern "bci-embedder.bin" --dir models/ \
--clobber
gh release download bci-test-assets-v0.1.0 \
--repo sharmaraju352/qvac \
--pattern "bci-test-fixtures.tar.gz" --dir /tmp \
--clobber
tar xzf /tmp/bci-test-fixtures.tar.gz -C test/fixtures/
echo "Model files:" && ls -la models/
echo "Test fixtures:" && ls -la test/fixtures/

- name: Download BCI models and test fixtures (Windows)
if: ${{ matrix.platform == 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: powershell
env:
GH_TOKEN: ${{ secrets.PAT_TOKEN }}
run: |
New-Item -ItemType Directory -Force -Path models | Out-Null
New-Item -ItemType Directory -Force -Path test/fixtures | Out-Null
gh release download bci-test-assets-v0.1.0 `
--repo sharmaraju352/qvac `
--pattern "ggml-bci-windowed.bin" --dir models/ `
--clobber
gh release download bci-test-assets-v0.1.0 `
--repo sharmaraju352/qvac `
--pattern "bci-embedder.bin" --dir models/ `
--clobber
gh release download bci-test-assets-v0.1.0 `
--repo sharmaraju352/qvac `
--pattern "bci-test-fixtures.tar.gz" --dir $env:TEMP `
--clobber
tar xzf "$env:TEMP\bci-test-fixtures.tar.gz" -C test/fixtures/
Write-Host "Model files:" ; Get-ChildItem models/
Write-Host "Test fixtures:" ; Get-ChildItem test/fixtures/

- name: Linux - install dependencies
if: ${{ matrix.platform == 'linux' }}
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y mesa-vulkan-drivers
sudo apt-get install -y libopenblas-dev liblapack-dev libfftw3-dev

- name: macOS - install whisper dependencies
if: ${{ matrix.platform == 'darwin' }}
shell: bash
run: brew install --quiet openblas lapack fftw

- name: Print run state (Unix)
if: ${{ matrix.platform != 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: bash
run: |
echo "node version: $(node -v)"
echo "npm version: $(npm -v)"
echo "bare version: $(bare -v)"
echo "bare-make version: $(bare-make --version)"
ls -la models/ || true
ls -la test/fixtures/ || true
ls -la prebuilds/ || true
tree prebuilds/ || true
continue-on-error: true

- name: Print run state (Windows)
if: ${{ matrix.platform == 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: powershell
run: |
Write-Host "node version: $(node -v)"
Write-Host "npm version: $(npm -v)"
Write-Host "bare version: $(bare -v)"
Write-Host "bare-make version: $(bare-make --version)"
Get-ChildItem models/ -ErrorAction SilentlyContinue
Get-ChildItem test/fixtures/ -ErrorAction SilentlyContinue
Get-ChildItem prebuilds/ -ErrorAction SilentlyContinue
tree prebuilds /F 2>$null
continue-on-error: true

- name: Run integration tests (Unix)
if: ${{ matrix.platform != 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: bash
run: npm run test:integration
env:
WHISPER_MODEL_PATH: models/ggml-bci-windowed.bin
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}

- name: Run integration tests (Windows)
if: ${{ matrix.platform == 'win32' }}
working-directory: ${{ inputs.workdir || env.PKG_DIR }}
shell: powershell
run: npm run test:integration
env:
WHISPER_MODEL_PATH: models/ggml-bci-windowed.bin
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
Loading
Loading