Building a Vocal Load Impulse Response Model for voiceMonitor
Engineering voiceMonitor to track acute and chronic vocal strain, estimate recovery, and adapt to each speaker's baseline.
Lab Note & Technical Documentation
voiceMonitor's pipeline originally reported vocal fatigue as a single, independent score per audio window. This described only the present moment: it could not distinguish a passing spike from accumulating strain, and it offered no way to estimate how long a speaker might need before continuing safely. This project set out to close that gap.
What changed. The pipeline moved from independent window level scores to a layered process: exponential smoothing stabilizes the raw signal, an impulse response model converts the smoothed signal into separate acute and chronic strain components, and a signal level recovery estimate is derived from how the acute component decays over time. Personal baseline calibration and auxiliary acoustic feature extraction (jitter, shimmer, harmonics to noise ratio, and CPPS) were added alongside this core pipeline.
The impulse response model. To move beyond a single instantaneous score, I adapted a framework from sports science, where athletic training load is modeled using two parallel leaky integrators, a fast decaying acute component and a slow decaying chronic component, whose difference is used to estimate an athlete's readiness to train again. The vocal fatigue adaptation borrows this two timescale structure but is not a direct transfer of the original formulation. Training load research treats the slow component as accumulated fitness, a genuine positive counterpart to fatigue, while voice has no equivalent. Both components here are instead reinterpreted as strain at different timescales, and the resulting output is a model derived, signal level estimate rather than a measurement of physiological recovery. This reinterpretation is experimental, and to my knowledge has not previously been applied to vocal fatigue in this form, though a systematic literature review was outside this project's scope.
Engineering outcomes. Automated test coverage grew from a single existing test file to 44 tests across eight files, raising overall coverage from 60 to 93 percent. These tests caught two real defects before review, a backward compatibility break in an existing test and a missing dependency step in continuous integration, both resolved prior to merge. A CI workflow now runs the full suite with coverage reporting on every push and pull request.
What I learned. Working through review cycles reinforced concrete engineering habits: keeping decay calculations on the audio stream's own deterministic clock rather than a wall clock that could drift, logging failures instead of swallowing them silently, and shipping small, single purpose pull requests rather than bundling unrelated changes together.
Baseline calibration changed how I approached the underlying problem itself. A fixed threshold treats every voice identically, but a naturally breathy voice and a genuinely strained one can appear identical to a population level model. A calibration window that locks onto a speaker's own baseline, falling back safely when insufficient data is available, was a reminder that a technically correct model can still produce a misleading result if it ignores who it is actually listening to.
Adapting an impulse response framework to a signal it was never designed for, while being explicit about where that adaptation is validated and where it remains experimental, was the central engineering contribution of this work.
Project Repositories & Artifacts
Lead Engineer
Building a Reproducible NLP Dataset Quality Auditor
We built `inference-audit`, a reproducible Python toolkit for systematically auditing NLP dataset quality across five core dimensions. The pipeline combines deterministic checks for label distribution, missing values, near-duplicates, language contamination, and annotation consistency. Extensive testing and real-corpus evaluation exposed performance and reliability issues, leading to targeted fixes and measurable optimizations. The final system emphasizes reproducibility, explicit failure states, citable evidence, and transparent limitations.
Read Report llm-eval-kitBuilding a Deterministic Offline Evaluation Engine for LLM Systems
We redesigned llm-eval-kit into a deterministic, zero-network evaluation pipeline built for reliable continuous evaluation in CI/CD environments. The new architecture introduces a decoupled criteria registry, fail-fast orchestration, hybrid semantic and symbolic verification, and graceful handling of inapplicable evaluation criteria. The implementation reached 93% test coverage across 88 tests, with cross-version CI validation from Python 3.9 to 3.12. The work demonstrates how carefully defined evaluation contracts and offline heuristics can provide reproducible, privacy-preserving model assessment without relying on external LLM-as-a-judge APIs.
Read Report