waqy wake-phrase releases

Wake-phrase detection as data: a frozen speech-embedding front end plus one small classifier per phrase, packaged as an immutable release folder that any host loads (Rust process, Rust library, or the browser over WASM). Swapping models is a path change, never a code change.

Release spqx-pub1 - phrases hey_oqto, oqto, threshold 0.5.

A detection is evidence that a phrase was probably spoken. It is never authentication, speaker identity or permission to act.

Contents

file role
melspectrogram_raw.onnx log-mel front end, generated from formulas (no learned weights)
embedding_model.onnx Google speech_embedding (Apache-2.0), batch norm folded in
one .onnx per phrase classifier over the frozen embeddings, hey_oqto.onnx style

manifest.json lists a sha256 per file; every runtime verifies them and refuses a mismatch.

Measured (held out; thresholds frozen before scoring)

head recall on 64 unseen voices owner held-out sitting general false wakes / hour training data
hey_oqto 0.9198 18/36 (18/18 hey phrases) 0.0 designed voices + Piper + shared 64-voice corpus (no owner recordings)
oqto 0.7732 35/36 0.123 designed voices + Piper + shared 64-voice corpus + owner recordings (4.6% of positives, 29.6% of negatives; owner consented to redistributing derived weights)

General false wakes are measured over 16.2 h of unrelated audio (MUSAN speech/music, VoxPopuli, FLEURS). In-sentence behaviour is scored per sentence on held-out speakers, not per 80 ms window, because window scoring hid look-alike failures.

Use

waqy check --manifest spqx-pub1     # verify hashes, phrases, threshold
waqy bench --manifest spqx-pub1     # CPU per 80 ms frame
waqy listen  --manifest spqx-pub1   # wake-stream/1 over stdin/stdout

Hosts: eaRS ([dictation.wake], process or library) and Oqto (browser, onnxruntime-web, sync:waqy vendors this folder into static assets). Both verify the same hashes.

Provenance and licence

Apache-2.0. See NOTICE at the repository root for Google speech_embedding, the openWakeWord-lineage mel front end, livekit-wakeword (training dependency; its CC BY-NC-SA default data is deliberately unused) and the Qwen3-TTS VoiceDesign voices used for synthetic speech. Negatives: MUSAN (public domain / CC, no NC), VoxPopuli (CC0), FLEURS (CC BY 4.0), Thorsten (CC0), procedural noise.

Known issues

  • Owner-free training of a bare-word head was unstable: three attempts (40k steps with 1024 general negatives, 12k with 512, and 40k with max_negative_weight 300) collapsed to a constant-negative classifier. The shipped bare-word head therefore includes owner recordings (with explicit consent to redistribute derived weights; audio is never published). The hey_ head is owner-free.
  • Per-head thresholds are specified but not yet implemented in the loaders; this release uses one threshold.
  • Rated for German and English phrases heard through a laptop or phone microphone; not evaluated on far-field arrays or non-owner speakers at scale.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support