Demo Run
1. Materialize audio
Turn public-safe text seeds into local audio under ignored runs/.
2. Transcribe
Run each MLX ASR model through oaj autojudge-mlx-asr.
3. Judge
Gemini scores candidate transcripts against references and semantic rubrics.
4. Publish
Combine model reports into a leaderboard page with category slices.
First Model Set
| Model | Wrapper | Status | Why This Model |
|---|---|---|---|
mlx-community/whisper-large-v3-turbo-asr-fp16 | mlx-audio | 35-case run passed | Strong Whisper-family baseline with MLX conversion. |
mlx-community/Qwen3-ASR-1.7B-8bit | mlx-audio | 35-case run passed | Recent ASR-specific model for comparison against Whisper. |
mlx-community/VibeVoice-ASR-4bit | mlx-audio | 35-case run passed | Compact quantized ASR model to expose speed/quality tradeoffs. |
Verified Leaderboard Results
Generated from runs/asr-leaderboard/full-35-combined/results.jsonl. The verified matrix covers 105 judged transcripts across 3 MLX ASR models and 7 research categories: acoustic_noise_robustness, entity_factual_integrity, negation_modality_scope, numeric_unit_integrity, semantic_paraphrase_preservation, temporal_scheduling_accuracy, transcription_accuracy_wer.
| Model | Cases | Gemini Samples | Average Score | Labels |
|---|---|---|---|---|
mlx-community/VibeVoice-ASR-4bit | 35/35 ok | 105 | 96.5 | 33 accurate, 1 needs_review, 1 inaccurate |
mlx-community/Qwen3-ASR-1.7B-8bit | 35/35 ok | 105 | 95.2 | 31 accurate, 3 needs_review, 1 inaccurate |
mlx-community/whisper-large-v3-turbo-asr-fp16 | 35/35 ok | 105 | 93.4 | 30 accurate, 3 needs_review, 2 inaccurate |
Category Breakdown
| Model | WER | Numeric/Unit | Negation/Modality | Temporal | Entity | Paraphrase | Acoustic Noise |
|---|---|---|---|---|---|---|---|
mlx-community/VibeVoice-ASR-4bit | 5 cases, 96.2 avg, 5 accurate | 5 cases, 99.2 avg, 5 accurate | 5 cases, 99.6 avg, 5 accurate | 5 cases, 98.8 avg, 5 accurate | 5 cases, 90.2 avg, 4 accurate, 1 inaccurate | 5 cases, 98.4 avg, 5 accurate | 5 cases, 92.8 avg, 4 accurate, 1 needs_review |
mlx-community/Qwen3-ASR-1.7B-8bit | 5 cases, 92.8 avg, 4 accurate, 1 needs_review | 5 cases, 92.0 avg, 4 accurate, 1 needs_review | 5 cases, 100.0 avg, 5 accurate | 5 cases, 100.0 avg, 5 accurate | 5 cases, 89.0 avg, 4 accurate, 1 inaccurate | 5 cases, 100.0 avg, 5 accurate | 5 cases, 92.4 avg, 4 accurate, 1 needs_review |
mlx-community/whisper-large-v3-turbo-asr-fp16 | 5 cases, 94.8 avg, 4 accurate, 1 needs_review | 5 cases, 92.0 avg, 4 accurate, 1 needs_review | 5 cases, 93.4 avg, 4 accurate, 1 needs_review | 5 cases, 90.6 avg, 4 accurate, 1 inaccurate | 5 cases, 88.6 avg, 4 accurate, 1 inaccurate | 5 cases, 97.6 avg, 5 accurate | 5 cases, 96.6 avg, 5 accurate |
Total Gemini judge samples: 315. Refresh this block with .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py after rerunning the verified ASR model jobs. The combined local report is runs/asr-leaderboard/full-35-combined/report.html and the committed summary artifact is docs/asr-leaderboard-summary.json. The generated refresh report is docs/asr-leaderboard-refresh-report.md, and the generated shell playbook is docs/asr-leaderboard-refresh-commands.sh. The committed run manifest is docs/asr-leaderboard-run-manifest.json, with coverage validation in docs/asr-leaderboard-manifest-validation.json and seed-manifest validation in docs/asr-seed-manifest-validation.json. The next-refresh plan is docs/asr-leaderboard-next-runs.json, and the hosted artifact manifest is docs/asr-leaderboard-hosted-manifest.json. The artifact bundle index is docs/asr-leaderboard-artifacts.json. Runtime readiness is tracked in docs/asr-leaderboard-runtime-status.json; together they include the source result files, complete model/category matrix, missing-cell guidance, hosted copy map, and reproducible refresh workflow. Pass ASR_LEADERBOARD_HOSTED_DIR with --hosted-dir-from-env to copy the same verified artifacts into the hosted Pages checkout. Use docs/asr-leaderboard-report-index.md as the generated map from the demo page to the combined full-35 report and per-source run reports; use docs/asr-leaderboard-report-links.json for the same map in machine-readable form.
Generated Refresh Workflow
These commands are generated from the same workflow metadata written to docs/asr-leaderboard-summary.json and docs/asr-leaderboard-refresh-report.md.
| Step | Command |
|---|---|
| Preflight refresh inputs | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py --check-only |
| Require audio manifest readiness | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py --check-only --require-audio-ready |
| Validate seed manifest | .venv/bin/python scripts/validate_asr_seed_manifest.py --summary-out docs/asr-seed-manifest-validation.json |
| Materialize audio | .venv/bin/python scripts/synthesize_tts_cases.py --cases examples/asr_research_cases.jsonl --out runs/asr-research-audio --discard-text-sidecars --summary-out runs/asr-research-audio/summary.json |
| Check MLX ASR runtime | PYTHONPATH=src .venv/bin/python -m open_audio_judge.cli check-mlx-asr-runtime --python-bin .venv/bin/python --model mlx-community/whisper-large-v3-turbo-asr-fp16 |
| Run one MLX ASR model | .venv/bin/oaj autojudge-mlx-asr --python-bin .venv/bin/python --cases runs/asr-research-audio/tts_audio_cases.jsonl --model <mlx-community/model-id> --judge-provider gemini --judge-samples 3 --out runs/asr-leaderboard/<run-name> |
| Discover latest complete runs | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py --discover-complete-model-runs --update-run-manifest |
| Refresh committed artifacts | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py |
| Run refresh shell playbook | bash docs/asr-leaderboard-refresh-commands.sh |
| Check generated page | .venv/bin/python scripts/check_asr_leaderboard_page.py |
| Verify generated artifacts are fresh | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py --check-only --require-generated-fresh |
| Sync hosted artifacts | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py --hosted-dir-from-env |
| Check hosted mirror | .venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py --check-only --hosted-dir-from-env |
Generated Model Refresh Commands
Load the Gemini secret only in the local shell before running live judge calls: source /Users/wangyauli/.openclaw/secrets/open-audio-judge-gemini.env.
| Model | Run Command |
|---|---|
mlx-community/whisper-large-v3-turbo-asr-fp16 | .venv/bin/oaj autojudge-mlx-asr --python-bin .venv/bin/python --cases runs/asr-research-audio/tts_audio_cases.jsonl --model mlx-community/whisper-large-v3-turbo-asr-fp16 --judge-provider gemini --judge-samples 3 --out runs/asr-leaderboard/whisper-large-v3-turbo-refresh |
mlx-community/Qwen3-ASR-1.7B-8bit | .venv/bin/oaj autojudge-mlx-asr --python-bin .venv/bin/python --cases runs/asr-research-audio/tts_audio_cases.jsonl --model mlx-community/Qwen3-ASR-1.7B-8bit --judge-provider gemini --judge-samples 3 --out runs/asr-leaderboard/qwen3-asr-1.7b-refresh |
mlx-community/VibeVoice-ASR-4bit | .venv/bin/oaj autojudge-mlx-asr --python-bin .venv/bin/python --cases runs/asr-research-audio/tts_audio_cases.jsonl --model mlx-community/VibeVoice-ASR-4bit --judge-provider gemini --judge-samples 3 --out runs/asr-leaderboard/vibevoice-asr-refresh |
If a primary MLX ASR model is unsupported locally, record that blocked state in the run notes before trying the documented fallbacks: mlx-community/whisper-small.en-asr-4bit, mlx-community/parakeet-rnnt-0.6b, mlx-community/GLM-ASR-Nano-2512-4bit.
Generated Artifacts
| Path | Purpose |
|---|---|
runs/asr-leaderboard/full-35-combined/results.jsonl | Combined ASR judge results used by the generated page and report. |
runs/asr-leaderboard/full-35-combined/report.html | Local combined HTML report with per-case judge details. |
docs/asr-leaderboard-summary.json | Machine-readable leaderboard summary and reproducible refresh workflow. |
docs/asr-leaderboard-refresh-report.md | Human-readable coverage, score, source-file, and command report. |
docs/asr-leaderboard-report-index.md | Human-readable index linking the demo page, combined report, and source run reports. |
docs/asr-leaderboard-report-links.json | Machine-readable map linking the demo page to combined and source ASR reports. |
docs/asr-leaderboard-refresh-commands.sh | Generated shell playbook for repeatable ASR leaderboard refreshes. |
docs/asr-leaderboard-run-manifest.json | Committed source result manifest for manifest-based refreshes. |
docs/asr-leaderboard-manifest-validation.json | Coverage validation for the model/category result matrix. |
docs/asr-seed-manifest-validation.json | Seed-manifest validation proving public-safe ASR cases keep exact category coverage. |
docs/asr-leaderboard-next-runs.json | Machine-readable next-refresh plan for missing ASR model/category cells. |
docs/asr-leaderboard-hosted-manifest.json | Machine-readable manifest of ASR demo artifacts mirrored to the hosted Pages checkout. |
docs/asr-leaderboard-artifacts.json | Single machine-readable index for the ASR leaderboard artifact bundle. |
docs/asr-leaderboard-runtime-status.json | Machine-readable MLX ASR and Gemini readiness status for refresh automation. |
Source Run Reports
Each source run keeps its own local report alongside the JSONL file that feeds the combined 35-case leaderboard.
| Result File | Local Report | Cases | Categories |
|---|---|---|---|
runs/asr-leaderboard/whisper-large-v3-turbo-smoke/judge-report/results.jsonl | runs/asr-leaderboard/whisper-large-v3-turbo-smoke/judge-report/report.html | 3/3 ok | transcription_accuracy_wer: 3 |
runs/asr-leaderboard/whisper-large-v3-turbo-full-gap/judge-report/results.jsonl | runs/asr-leaderboard/whisper-large-v3-turbo-full-gap/judge-report/report.html | 12/12 ok | negation_modality_scope: 3, numeric_unit_integrity: 3, temporal_scheduling_accuracy: 4, transcription_accuracy_wer: 2 |
runs/asr-leaderboard/whisper-large-v3-turbo-semantic-smoke/judge-report/results.jsonl | runs/asr-leaderboard/whisper-large-v3-turbo-semantic-smoke/judge-report/report.html | 5/5 ok | negation_modality_scope: 2, numeric_unit_integrity: 2, temporal_scheduling_accuracy: 1 |
runs/asr-leaderboard/whisper-large-v3-turbo-entity-smoke/judge-report/results.jsonl | runs/asr-leaderboard/whisper-large-v3-turbo-entity-smoke/judge-report/report.html | 5/5 ok | entity_factual_integrity: 5 |
runs/asr-leaderboard/whisper-large-v3-turbo-paraphrase-smoke/judge-report/results.jsonl | runs/asr-leaderboard/whisper-large-v3-turbo-paraphrase-smoke/judge-report/report.html | 5/5 ok | semantic_paraphrase_preservation: 5 |
runs/asr-leaderboard/whisper-large-v3-turbo-noise-smoke/judge-report/results.jsonl | runs/asr-leaderboard/whisper-large-v3-turbo-noise-smoke/judge-report/report.html | 5/5 ok | acoustic_noise_robustness: 5 |
runs/asr-leaderboard/qwen3-asr-1.7b-smoke/judge-report/results.jsonl | runs/asr-leaderboard/qwen3-asr-1.7b-smoke/judge-report/report.html | 3/3 ok | transcription_accuracy_wer: 3 |
runs/asr-leaderboard/qwen3-asr-1.7b-full-gap/judge-report/results.jsonl | runs/asr-leaderboard/qwen3-asr-1.7b-full-gap/judge-report/report.html | 12/12 ok | negation_modality_scope: 3, numeric_unit_integrity: 3, temporal_scheduling_accuracy: 4, transcription_accuracy_wer: 2 |
runs/asr-leaderboard/qwen3-asr-1.7b-semantic-smoke/judge-report/results.jsonl | runs/asr-leaderboard/qwen3-asr-1.7b-semantic-smoke/judge-report/report.html | 5/5 ok | negation_modality_scope: 2, numeric_unit_integrity: 2, temporal_scheduling_accuracy: 1 |
runs/asr-leaderboard/qwen3-asr-1.7b-entity-smoke/judge-report/results.jsonl | runs/asr-leaderboard/qwen3-asr-1.7b-entity-smoke/judge-report/report.html | 5/5 ok | entity_factual_integrity: 5 |
runs/asr-leaderboard/qwen3-asr-1.7b-paraphrase-smoke/judge-report/results.jsonl | runs/asr-leaderboard/qwen3-asr-1.7b-paraphrase-smoke/judge-report/report.html | 5/5 ok | semantic_paraphrase_preservation: 5 |
runs/asr-leaderboard/qwen3-asr-1.7b-noise-smoke/judge-report/results.jsonl | runs/asr-leaderboard/qwen3-asr-1.7b-noise-smoke/judge-report/report.html | 5/5 ok | acoustic_noise_robustness: 5 |
runs/asr-leaderboard/vibevoice-asr-smoke/judge-report/results.jsonl | runs/asr-leaderboard/vibevoice-asr-smoke/judge-report/report.html | 3/3 ok | transcription_accuracy_wer: 3 |
runs/asr-leaderboard/vibevoice-asr-full-gap/judge-report/results.jsonl | runs/asr-leaderboard/vibevoice-asr-full-gap/judge-report/report.html | 12/12 ok | negation_modality_scope: 3, numeric_unit_integrity: 3, temporal_scheduling_accuracy: 4, transcription_accuracy_wer: 2 |
runs/asr-leaderboard/vibevoice-asr-semantic-smoke/judge-report/results.jsonl | runs/asr-leaderboard/vibevoice-asr-semantic-smoke/judge-report/report.html | 5/5 ok | negation_modality_scope: 2, numeric_unit_integrity: 2, temporal_scheduling_accuracy: 1 |
runs/asr-leaderboard/vibevoice-asr-entity-smoke/judge-report/results.jsonl | runs/asr-leaderboard/vibevoice-asr-entity-smoke/judge-report/report.html | 5/5 ok | entity_factual_integrity: 5 |
runs/asr-leaderboard/vibevoice-asr-paraphrase-smoke/judge-report/results.jsonl | runs/asr-leaderboard/vibevoice-asr-paraphrase-smoke/judge-report/report.html | 5/5 ok | semantic_paraphrase_preservation: 5 |
runs/asr-leaderboard/vibevoice-asr-noise-smoke/judge-report/results.jsonl | runs/asr-leaderboard/vibevoice-asr-noise-smoke/judge-report/report.html | 5/5 ok | acoustic_noise_robustness: 5 |
Eval Categories
transcription_accuracy_wer
Classic edit-distance calibration: substitutions, deletions, insertions, homophones, punctuation, and disfluency policy.
entity_factual_integrity
Names, addresses, organizations, product labels, and alphanumeric identifiers.
numeric_unit_integrity
Amounts, dosages, decimals, percentages, account numbers, and value-changing numeric pairs.
negation_modality_scope
Negation, permission, prohibition, modality, only-scope, and exception boundaries.
temporal_scheduling_accuracy
Dates, times, durations, AM/PM, relative ordering, and deadlines.
semantic_paraphrase_preservation
Events, causal relations, metric tradeoffs, coreference, and conditional instructions.
acoustic_noise_robustness
Cafe noise, vehicle noise, industrial background noise, reverberant rooms, and overlapping speech.
Command Flow
source /Users/wangyauli/.openclaw/secrets/open-audio-judge-gemini.env
oaj autojudge-mlx-asr \
--python-bin .venv/bin/python \
--cases runs/asr-research-audio/tts_audio_cases.jsonl \
--model mlx-community/whisper-large-v3-turbo-asr-fp16 \
--judge-provider gemini \
--judge-samples 3 \
--out runs/asr-leaderboard/whisper-large-v3-turbo-full-gap
oaj autojudge-mlx-asr \
--python-bin .venv/bin/python \
--cases runs/asr-research-audio/tts_audio_cases.jsonl \
--model mlx-community/Qwen3-ASR-1.7B-8bit \
--judge-provider gemini \
--judge-samples 3 \
--out runs/asr-leaderboard/qwen3-asr-1.7b-full-gap
oaj autojudge-mlx-asr \
--python-bin .venv/bin/python \
--cases runs/asr-research-audio/tts_audio_cases.jsonl \
--model mlx-community/VibeVoice-ASR-4bit \
--judge-provider gemini \
--judge-samples 3 \
--out runs/asr-leaderboard/vibevoice-asr-full-gap
.venv/bin/python scripts/refresh_asr_leaderboard_artifacts.py
Expected Output Files
| Path | Purpose |
|---|---|
candidate_cases.jsonl | Source cases plus MLX-generated candidate transcripts. |
model_summary.json | Model id, transcriber, category/slice coverage, and candidate coverage. |
judge-report/results.jsonl | Gemini structured scores, reasons, semantic categories, and sample aggregates. |
judge-report/report.html | Per-model HTML report. |
combined/report.html | Combined ASR leaderboard report. |
Representative Result JSON
{
"case_id": "asr-numeric-transfer-001",
"provider": "gemini",
"overall_score": 42,
"meaning_preservation": "major_loss",
"error_categories": ["number_error", "contrast_error"],
"metadata": {
"candidate_model": "mlx-community/whisper-large-v3-turbo-asr-fp16",
"eval_category": "numeric_unit_integrity",
"asr_slice": "amount_contrast",
"judge_sample_count": 3
}
}
Research Notes
See docs/asr-eval-taxonomy.md for the category rationale and examples/asr_research_cases.jsonl for the seed manifest. These leaderboard results are verified local artifacts from all seven categories, with private/generated audio kept out of the repository.