wakeforge 0.4.2a1__tar.gz → 0.4.2a2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/PKG-INFO +28 -15
  2. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/README.md +27 -14
  3. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/wakeforge.egg-info/PKG-INFO +28 -15
  4. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/version.py +1 -1
  5. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/LICENSE +0 -0
  6. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/pyproject.toml +0 -0
  7. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/setup.cfg +0 -0
  8. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_augment.py +0 -0
  9. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_bcresnet.py +0 -0
  10. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_benchmark.py +0 -0
  11. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_checkpoint.py +0 -0
  12. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_cli_train_smoke.py +0 -0
  13. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_datagen.py +0 -0
  14. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_dataset.py +0 -0
  15. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_dataset_extended.py +0 -0
  16. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_distill.py +0 -0
  17. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_esp32.py +0 -0
  18. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_export_metadata.py +0 -0
  19. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_feats.py +0 -0
  20. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_feats_extended.py +0 -0
  21. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_hmm_extended.py +0 -0
  22. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_inference.py +0 -0
  23. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_livekit_port.py +0 -0
  24. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_losses.py +0 -0
  25. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_losses_extended.py +0 -0
  26. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_markov_extractors.py +0 -0
  27. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_metrics.py +0 -0
  28. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_mining.py +0 -0
  29. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_mining_extended.py +0 -0
  30. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_models.py +0 -0
  31. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_models_extended.py +0 -0
  32. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_new_extractors.py +0 -0
  33. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_new_heads.py +0 -0
  34. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_new_losses.py +0 -0
  35. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_ocsvm_training.py +0 -0
  36. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_onnx_advanced.py +0 -0
  37. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_phonmatch.py +0 -0
  38. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_quantize.py +0 -0
  39. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_quickstart.py +0 -0
  40. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_scripts.py +0 -0
  41. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_smoke.py +0 -0
  42. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_streaming.py +0 -0
  43. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_streaming_stateful.py +0 -0
  44. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_suggestions.py +0 -0
  45. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_sweep_extensions.py +0 -0
  46. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_sweep_strategies.py +0 -0
  47. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_text_modality.py +0 -0
  48. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_tiers.py +0 -0
  49. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_trainer_create_model.py +0 -0
  50. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_trainer_smoke.py +0 -0
  51. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_utils.py +0 -0
  52. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_utils_extended.py +0 -0
  53. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_vc_helpers.py +0 -0
  54. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_visualization.py +0 -0
  55. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/test/test_viz_extended.py +0 -0
  56. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/wakeforge.egg-info/SOURCES.txt +0 -0
  57. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/wakeforge.egg-info/dependency_links.txt +0 -0
  58. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/wakeforge.egg-info/entry_points.txt +0 -0
  59. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/wakeforge.egg-info/requires.txt +0 -0
  60. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/wakeforge.egg-info/top_level.txt +0 -0
  61. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/__init__.py +0 -0
  62. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/augment.py +0 -0
  63. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/benchmark.py +0 -0
  64. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/cache.py +0 -0
  65. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/calibration.py +0 -0
  66. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/checkpoint.py +0 -0
  67. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/cli.py +0 -0
  68. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/datagen.py +0 -0
  69. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/dataset.py +0 -0
  70. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/ddp.py +0 -0
  71. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/distill.py +0 -0
  72. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/env.py +0 -0
  73. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/evaluation.py +0 -0
  74. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/export_c.py +0 -0
  75. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/factory.py +0 -0
  76. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/feats.py +0 -0
  77. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/few_shot.py +0 -0
  78. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/ga_mlflow.py +0 -0
  79. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/inference.py +0 -0
  80. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/infinite_loop.py +0 -0
  81. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/loop.py +0 -0
  82. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/loss.py +0 -0
  83. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/metrics.py +0 -0
  84. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/mining.py +0 -0
  85. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/model.py +0 -0
  86. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/multi_stage.py +0 -0
  87. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/phonmatch.py +0 -0
  88. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/py.typed +0 -0
  89. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/qat.py +0 -0
  90. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/quantize.py +0 -0
  91. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/quickstart.py +0 -0
  92. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/reproducibility.py +0 -0
  93. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/subspectralnorm.py +0 -0
  94. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/sweep.py +0 -0
  95. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/tiers.py +0 -0
  96. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/trainer.py +0 -0
  97. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/utils.py +0 -0
  98. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/vc_helpers.py +0 -0
  99. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/vendors/__init__.py +0 -0
  100. {wakeforge-0.4.2a1 → wakeforge-0.4.2a2}/ww_trainer/visualization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wakeforge
3
- Version: 0.4.2a1
3
+ Version: 0.4.2a2
4
4
  Summary: Full training and research suite for wake words — MFCC to HuBERT, all exported to ONNX
5
5
  Author-email: JarbasAi <jarbasai@mailfence.com>
6
6
  License: Apache-2.0
@@ -70,23 +70,36 @@ Requires-Dist: ovos-tts-plugin-edge-tts; extra == "notebooks"
70
70
  Requires-Dist: vadonnx>=0.1.0; extra == "notebooks"
71
71
  Dynamic: license-file
72
72
 
73
- # Wake Word Trainer
74
-
75
- A research-grade training suite for **wake-word detection** — the always-on
76
- keyword spotter that wakes "Hey Siri", "OK Google", or your own custom phrase.
77
- Train, evaluate, and ship lightweight on-device detectors that run anywhere
78
- from an ESP32 to a GPU server. Every component exports to ONNX; production
79
- inference requires only `onnxruntime` and `numpy` — no PyTorch at runtime.
73
+ # wakeforge
74
+
75
+ wakeforge is a research framework for **wake-word detection**. It implements
76
+ architectures, losses, and featurizers from the published wake-word
77
+ literature, so you can reproduce a paper's result or compare methods
78
+ side by side. Some included architectures exist to reproduce a published
79
+ result, not because they are the best default — the per-architecture pages
80
+ under `docs/reference/` say which is which. Train, evaluate, and export
81
+ lightweight on-device detectors that run anywhere from an ESP32 to a GPU
82
+ server. Every component exports to ONNX; production inference requires only
83
+ `onnxruntime` and `numpy` — no PyTorch at runtime.
84
+
85
+ An easy training run is not the same thing as a good detector. Loss going
86
+ down and a quickstart command exiting 0 prove the pipeline works, not that
87
+ the result is safe to ship — see
88
+ [`docs/guides/expectations.md`](docs/guides/expectations.md) for what a
89
+ deployable wake word actually looks like in false-accept and false-reject
90
+ numbers, and how much data each tier needs to get there.
80
91
 
81
92
  ## What is a wake word?
82
93
 
83
94
  A short phrase ("hey jarvis", "computer", "alexa") that a device listens for
84
95
  continuously. When detected, downstream STT/NLU runs. A useful detector must
85
96
  run on tiny hardware (sub-100 KB, <10 % CPU, no internet), tolerate noise and
86
- distance, almost never false-fire (< 1 FA / hour), and trigger reliably when
87
- spoken (> 90 % recall at that operating point). ww-trainer is the toolchain
88
- that builds such a detector from a single phrase — synthesise data, train,
89
- evaluate, export, deploy.
97
+ distance, almost never false-fire, and trigger reliably when spoken. wakeforge
98
+ is the toolchain that builds such a detector from a single phrase —
99
+ synthesise data, train, evaluate, export, deploy. What counts as "almost
100
+ never" and "reliably" in numbers is in
101
+ [`docs/guides/expectations.md`](docs/guides/expectations.md), not repeated
102
+ here.
90
103
 
91
104
  ## Who is this for?
92
105
 
@@ -177,11 +190,11 @@ run with `uv run pytest`.
177
190
  ## Citation
178
191
 
179
192
  ```bibtex
180
- @software{ww_trainer,
181
- title = {ww-trainer: a research suite for on-device wake-word detection},
193
+ @software{wakeforge,
194
+ title = {wakeforge: a research framework for on-device wake-word detection},
182
195
  author = {TigreGotico contributors},
183
196
  year = {2026},
184
- url = {https://github.com/TigreGotico/ww-trainer},
197
+ url = {https://github.com/TigreGotico/wakeforge},
185
198
  note = {Funded by NGI0 Commons Fund / NLnet, grant 101135429}
186
199
  }
187
200
  ```
@@ -1,20 +1,33 @@
1
- # Wake Word Trainer
2
-
3
- A research-grade training suite for **wake-word detection** — the always-on
4
- keyword spotter that wakes "Hey Siri", "OK Google", or your own custom phrase.
5
- Train, evaluate, and ship lightweight on-device detectors that run anywhere
6
- from an ESP32 to a GPU server. Every component exports to ONNX; production
7
- inference requires only `onnxruntime` and `numpy` — no PyTorch at runtime.
1
+ # wakeforge
2
+
3
+ wakeforge is a research framework for **wake-word detection**. It implements
4
+ architectures, losses, and featurizers from the published wake-word
5
+ literature, so you can reproduce a paper's result or compare methods
6
+ side by side. Some included architectures exist to reproduce a published
7
+ result, not because they are the best default — the per-architecture pages
8
+ under `docs/reference/` say which is which. Train, evaluate, and export
9
+ lightweight on-device detectors that run anywhere from an ESP32 to a GPU
10
+ server. Every component exports to ONNX; production inference requires only
11
+ `onnxruntime` and `numpy` — no PyTorch at runtime.
12
+
13
+ An easy training run is not the same thing as a good detector. Loss going
14
+ down and a quickstart command exiting 0 prove the pipeline works, not that
15
+ the result is safe to ship — see
16
+ [`docs/guides/expectations.md`](docs/guides/expectations.md) for what a
17
+ deployable wake word actually looks like in false-accept and false-reject
18
+ numbers, and how much data each tier needs to get there.
8
19
 
9
20
  ## What is a wake word?
10
21
 
11
22
  A short phrase ("hey jarvis", "computer", "alexa") that a device listens for
12
23
  continuously. When detected, downstream STT/NLU runs. A useful detector must
13
24
  run on tiny hardware (sub-100 KB, <10 % CPU, no internet), tolerate noise and
14
- distance, almost never false-fire (< 1 FA / hour), and trigger reliably when
15
- spoken (> 90 % recall at that operating point). ww-trainer is the toolchain
16
- that builds such a detector from a single phrase — synthesise data, train,
17
- evaluate, export, deploy.
25
+ distance, almost never false-fire, and trigger reliably when spoken. wakeforge
26
+ is the toolchain that builds such a detector from a single phrase —
27
+ synthesise data, train, evaluate, export, deploy. What counts as "almost
28
+ never" and "reliably" in numbers is in
29
+ [`docs/guides/expectations.md`](docs/guides/expectations.md), not repeated
30
+ here.
18
31
 
19
32
  ## Who is this for?
20
33
 
@@ -105,11 +118,11 @@ run with `uv run pytest`.
105
118
  ## Citation
106
119
 
107
120
  ```bibtex
108
- @software{ww_trainer,
109
- title = {ww-trainer: a research suite for on-device wake-word detection},
121
+ @software{wakeforge,
122
+ title = {wakeforge: a research framework for on-device wake-word detection},
110
123
  author = {TigreGotico contributors},
111
124
  year = {2026},
112
- url = {https://github.com/TigreGotico/ww-trainer},
125
+ url = {https://github.com/TigreGotico/wakeforge},
113
126
  note = {Funded by NGI0 Commons Fund / NLnet, grant 101135429}
114
127
  }
115
128
  ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wakeforge
3
- Version: 0.4.2a1
3
+ Version: 0.4.2a2
4
4
  Summary: Full training and research suite for wake words — MFCC to HuBERT, all exported to ONNX
5
5
  Author-email: JarbasAi <jarbasai@mailfence.com>
6
6
  License: Apache-2.0
@@ -70,23 +70,36 @@ Requires-Dist: ovos-tts-plugin-edge-tts; extra == "notebooks"
70
70
  Requires-Dist: vadonnx>=0.1.0; extra == "notebooks"
71
71
  Dynamic: license-file
72
72
 
73
- # Wake Word Trainer
74
-
75
- A research-grade training suite for **wake-word detection** — the always-on
76
- keyword spotter that wakes "Hey Siri", "OK Google", or your own custom phrase.
77
- Train, evaluate, and ship lightweight on-device detectors that run anywhere
78
- from an ESP32 to a GPU server. Every component exports to ONNX; production
79
- inference requires only `onnxruntime` and `numpy` — no PyTorch at runtime.
73
+ # wakeforge
74
+
75
+ wakeforge is a research framework for **wake-word detection**. It implements
76
+ architectures, losses, and featurizers from the published wake-word
77
+ literature, so you can reproduce a paper's result or compare methods
78
+ side by side. Some included architectures exist to reproduce a published
79
+ result, not because they are the best default — the per-architecture pages
80
+ under `docs/reference/` say which is which. Train, evaluate, and export
81
+ lightweight on-device detectors that run anywhere from an ESP32 to a GPU
82
+ server. Every component exports to ONNX; production inference requires only
83
+ `onnxruntime` and `numpy` — no PyTorch at runtime.
84
+
85
+ An easy training run is not the same thing as a good detector. Loss going
86
+ down and a quickstart command exiting 0 prove the pipeline works, not that
87
+ the result is safe to ship — see
88
+ [`docs/guides/expectations.md`](docs/guides/expectations.md) for what a
89
+ deployable wake word actually looks like in false-accept and false-reject
90
+ numbers, and how much data each tier needs to get there.
80
91
 
81
92
  ## What is a wake word?
82
93
 
83
94
  A short phrase ("hey jarvis", "computer", "alexa") that a device listens for
84
95
  continuously. When detected, downstream STT/NLU runs. A useful detector must
85
96
  run on tiny hardware (sub-100 KB, <10 % CPU, no internet), tolerate noise and
86
- distance, almost never false-fire (< 1 FA / hour), and trigger reliably when
87
- spoken (> 90 % recall at that operating point). ww-trainer is the toolchain
88
- that builds such a detector from a single phrase — synthesise data, train,
89
- evaluate, export, deploy.
97
+ distance, almost never false-fire, and trigger reliably when spoken. wakeforge
98
+ is the toolchain that builds such a detector from a single phrase —
99
+ synthesise data, train, evaluate, export, deploy. What counts as "almost
100
+ never" and "reliably" in numbers is in
101
+ [`docs/guides/expectations.md`](docs/guides/expectations.md), not repeated
102
+ here.
90
103
 
91
104
  ## Who is this for?
92
105
 
@@ -177,11 +190,11 @@ run with `uv run pytest`.
177
190
  ## Citation
178
191
 
179
192
  ```bibtex
180
- @software{ww_trainer,
181
- title = {ww-trainer: a research suite for on-device wake-word detection},
193
+ @software{wakeforge,
194
+ title = {wakeforge: a research framework for on-device wake-word detection},
182
195
  author = {TigreGotico contributors},
183
196
  year = {2026},
184
- url = {https://github.com/TigreGotico/ww-trainer},
197
+ url = {https://github.com/TigreGotico/wakeforge},
185
198
  note = {Funded by NGI0 Commons Fund / NLnet, grant 101135429}
186
199
  }
187
200
  ```
@@ -2,7 +2,7 @@
2
2
  VERSION_MAJOR = 0
3
3
  VERSION_MINOR = 4
4
4
  VERSION_BUILD = 2
5
- VERSION_ALPHA = 1
5
+ VERSION_ALPHA = 2
6
6
  # END_VERSION_BLOCK
7
7
 
8
8
  __version__ = f"{VERSION_MAJOR}.{VERSION_MINOR}.{VERSION_BUILD}" + (f"a{VERSION_ALPHA}" if VERSION_ALPHA else "")
File without changes
File without changes
File without changes