-
Notifications
You must be signed in to change notification settings - Fork 0
Development
Rana Faraz edited this page Jun 23, 2026
·
1 revision
git clone https://github.com/ranafaraz/VoxTutor.git
cd VoxTutor
python -m venv .venv
# Linux/macOS:
source .venv/bin/activate
# Windows:
.venv\Scripts\activate
pip install -e ".[dev]"
pytest -q # 56 tests, all should passpip install -e ".[scipy]" # enables scipy cross-check tests (DTW + AUROC)# Full table + RESULTS.md
python -m evals.harness
# Dissociation gate (used in CI)
python -m evals.gate
# Interactive CLI
voxtutor compare --regime warped
voxtutor score --method gop --regime noisy
voxtutor regimesVoxTutor/
voxtutor/
synthesis/ -- phoneme inventory, utterance generator, mispronunciation injector
scorers/ -- naive.py, aligned.py, normalized.py, gop.py, random_scorer.py
regimes/ -- clean.py, warped.py, noisy.py
eval/ -- auroc.py, gate.py
cli.py -- voxtutor CLI entry point
evals/
harness.py -- writes evals/RESULTS.md
gate.py -- asserts the 2x2 dissociation
tests/ -- 56 pytest tests
docs/ -- ARCHITECTURE.md, DECISIONS.md, demo.gif
.env.example
Dockerfile
pyproject.toml
- Create
voxtutor/scorers/my_scorer.pyimplementing ascore(utterance, phonemes) -> np.ndarrayfunction that returns a per-position score (higher = more likely mispronounced). - Register the scorer in
voxtutor/scorers/__init__.pyunder a string key (e.g.,"my_scorer"). - Add tests in
tests/test_scorers.pycovering at least: output shape, output range, and that a clean utterance scores lower than a mispronounced one. - Run
voxtutor compare --regime cleanto check it appears in the table with a non-degenerate AUROC. - Add the key to
VOXTUTOR_METHODaccepted values inConfiguration.
- Create
voxtutor/regimes/my_regime.pyimplementingapply(utterance, rng) -> utterancethat returns a distorted copy of the utterance (frames array + metadata). - Register the regime in
voxtutor/regimes/__init__.pyunder a string key. - Add a description string to
voxtutor/regimes/descriptions.py(shown byvoxtutor regimes). - Add tests in
tests/test_regimes.pyverifying: the regime does not change the ground-truth labels, a clean scorer degrades on this regime relative toclean, and the regime is reversible (or at least deterministic given the same RNG state). - Add the key to
VOXTUTOR_REGIMEaccepted values inConfiguration.
GitHub Actions runs pytest -q and python -m evals.gate on Python 3.10, 3.11, and 3.12.
No secrets are required -- the benchmark is fully offline.
- Format with
black, lint withruff(configured inpyproject.toml). - Type annotations are encouraged but not enforced.
- All random state must flow through
np.random.default_rng(seed)for reproducibility -- never usenp.random.seed()or module-level state.