Skip to main content

LiveKit WakeWord Bench

Generate a benchmark or training dataset for your wake word, with labeled speech, near-miss phrases and realistic audio conditions. Use the benchmark to measure any detector against the same test set.

Python 3.12+ License Dataset

Quick start

Requires Python 3.12+ and the LiveKit CLI. Generation uses LiveKit Inference credits.

pip install livekit-wakeword-bench
lk cloud auth
lk app env -w

# Generate train, validation and test splits for your phrase.
lkwb generate "hey jarvis" --size small -o out/hey_jarvis
lkwb verify out/hey_jarvis

For a benchmark only, add --split test; for training data only, add --split train. Use --size tiny for a smoke test. Choose --plan to match your account (build by default). TTS capacity is shared with production agents: leave room for them with a lower --set tts.concurrency=N.

For unusual names, run lkwb init "your wake word" to create a pronunciation config. See Generate for sizes, pronunciation, custom settings and outputs.

What gets generated

The generator combines phoneme-guided TTS with recorded noise, room responses and speech. Each clip has 16 kHz audio, a label, phrase timing and metadata describing its voice and audio conditions.

Sample Contents What it tests
Positive Your wake word alone or in a sentence, with varied voices, delivery and speaking speed Does the model detect the intended phrase?
Adversarial negative Similar-sounding substitutions, partial phrases and your custom hard negatives Does it reject near misses?
Ordinary speech Synthesized sentences without the wake word Does unrelated conversation trigger it?
Recorded speech Segments from real speech corpora Does natural speech trigger it?
Noise only Background sounds without the target phrase Do environmental sounds trigger it?

Only positives have label 1; all negatives have label 0. Category counts depend on the size and split: training presets contain positives, adversarial negatives and synthesized speech. See the exact sample counts.

Positive and adversarial phrases are isolated or placed before/after surrounding speech (p_carrier=0.35 by default). Near misses are generated from phonetic similarity; add known confusions with hard_negatives.

Which conditions are covered

Validation and test clips sample combinations of these conditions. They are not an exhaustive test of every combination.

Condition Default coverage
Background noise Clean background plus five SNR buckets, from quiet (20–30 dB) to noise louder than speech (−5–0 dB)
Competing speech A second voice 0–20 dB quieter; party scenes with 2–4 talkers and crowd noise
Rooms Recorded room impulse responses for reverberation
Device effects EQ, band limiting, clipping, codec compression and varying levels
Voice and delivery Multiple TTS providers, voices and accent labels; speaking speed 0.85–1.2×
Phrasing Isolated phrases, phrases in sentences and phonetically similar negatives

For example, the same wake word can be detected alone and missed with a competing speaker:

A wake word is detected alone but missed with a competing voice

Training clips are stored clean by default so you can add fresh effects while training. Test voices, noise, rooms and recorded speakers are held apart from training. Never train on the test split or test sources. Some source corpora restrict commercial use; see sources and licenses.

Tune the recipe with YAML or --set key=value. For example, generate training data with more competing speech:

lkwb generate "hey jarvis" --size small --split train -o out/train_talkers \
    --set splits.train.augment=true \
    --set augment.p_interferer=0.6 \
    --set augment.clean_weight=0.2

Run lkwb knobs for all settings. TTS is cached, so changing only augmentation reuses synthesized speech.

How models are evaluated

The headline score is recall at the lowest tested threshold with no more than 0.5 false positives per hour (FPPH). Higher is better; change the target with --score-fpph.

Criterion Measurement
Wake word detection Recall: fraction of positives detected between phrase onset and 1 second after phrase end
Background false alarms Triggers per hour of ordinary speech, recorded speech and noise; counted triggers are at least 2 seconds apart by default
Near-miss rejection Fraction of adversarial clips that trigger; reported separately, excluded from FPPH
Response time Trigger time relative to phrase end; negative latency means early detection
Compute cost Processing time / audio duration; use --workers 1

Reports break results down by noise, competing speech, room, device effects, voice, accent and phrasing, with 95% confidence intervals. Breakdowns use --threshold (default 0.5), which may differ from the headline score's threshold.

Synthesized positives do not establish recall on real users. Accent labels come from TTS metadata. Treat confidence intervals wider than about 0.2 as weak evidence; rare false alarms need many hours of negative audio.

Evaluate on your dataset

For a livekit-wakeword v2 streaming model:

pip install livekit-wakeword
lkwb bench path/to/your_model.onnx --data out/hey_jarvis --limit 1000

Open results/report.html for charts and playable failures. Remove --limit for a full run before reporting results. Compare models using the same dataset, split, filters and limit.

Other models use the custom detector interface. Existing datasets need no LiveKit credentials. Omitting --data uses the public Hey LiveKit dataset, which is an example benchmark for that phrase.

Documentation

Task Guide
Generate and check your benchmark or dataset Generate
Look up sample fields, sources and generation settings Reference
Load, augment or export training data Train
Evaluate detectors and compare results Benchmark
Contribute or release Development

For coding agents, see AGENTS.md.

Metadata

Release files for livekit-wakeword-bench 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for livekit-wakeword-bench 0.1.0
File Size Uploaded Provenance Actions
livekit_wakeword_bench-0.1.0.tar.gz 79.3 kB With provenance Details for livekit_wakeword_bench-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for livekit-wakeword-bench 0.1.0
File Interpreter ABI Platform Actions
livekit_wakeword_bench-0.1.0-py3-none-any.whl Python 3 none any Details for livekit_wakeword_bench-0.1.0-py3-none-any.whl

Total release size: 171.0 kB

Release files / livekit_wakeword_bench-0.1.0.tar.gz

Download URL livekit_wakeword_bench-0.1.0.tar.gz
Size 79.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ea84e7ca50546534d6d5799c03c0abc7029974bca55fc91344da9ce6b52f62f7
BLAKE2b-256 checksum
How to use checksums
3d7bd2b3c549fbd098891afd0b277efb902f2309c90c5dc2065e7bc767f6c416
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / livekit_wakeword_bench-0.1.0-py3-none-any.whl

Download URL livekit_wakeword_bench-0.1.0-py3-none-any.whl
Size 91.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
454cbf3fcf2f6da5a248ffa4a2a25f5e466dde82f0daf71675b541d1afa8c707
BLAKE2b-256 checksum
How to use checksums
84b925f3546f88abecbc0ee50448c76d6560d5fcddc20d4a593d1e21260e245f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Security for livekit-wakeword-bench 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for livekit_wakeword_bench-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page