Skip to content

vox models command, CI/release workflows, neutral whisper-fixes reference - #2

Merged
Pinous merged 4 commits into
masterfrom
feat/models-command-and-ci
Jul 31, 2026
Merged

vox models command, CI/release workflows, neutral whisper-fixes reference#2
Pinous merged 4 commits into
masterfrom
feat/models-command-and-ci

Conversation

@Pinous

@Pinous Pinous commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Three additions ported from crafter-station/trx, which vox was originally inspired by.

vox models

Lists the transcription models available per backend, in table (TTY) or JSON (piped) form, with -b/--backend to filter.

$ vox models
  local   tiny
  local   small
  ...
  openai  gpt-4o-transcribe

The listing is derived from the WhisperModel / OpenAIModel enums rather than hardcoded, so it cannot drift from what --model actually accepts — a round-trip test asserts every displayed name resolves back to its model. Ships with src/vox/schemas/models.json so vox schema models answers like the other commands.

Built test-first: 14 tests across the use case, the CLI (CliRunner), and the model.

CI + release

  • ci.yml — on PR and push to master: uv sync --frozen, ruff check, ruff format --check, pytest. Runs on macos-latest because mlx-whisper only installs on Apple Silicon.
  • release.yml — triggered when pyproject.toml changes: tests on macOS, then a publish job on ubuntu that compares the local version against PyPI and, if it changed, builds and publishes via trusted publishing (OIDC, no stored token), then tags and creates a GitHub Release.

Two caveats worth knowing before merging:

  1. The publish job will fail until the trusted publisher is declared on pypi.org (project vox-transcribe, owner Pinous, repo vox, workflow release.yml).
  2. ty check is deliberately not in the pipeline — it currently reports 18 diagnostics on existing code, which would make the job red from day one. Worth a separate cleanup.

Neutral post-processing reference

skills/vox/references/whisper-fixes.md documents what Whisper actually gets wrong on any audio: hallucinated boilerplate over silence ("Sous-titres réalisés par la communauté d'Amara.org", "Thanks for watching!"), repetition loops, dropped diacritics, homophones, numbers and units, words truncated across segment boundaries, wrong language detection. Domain-agnostic by design, with one framing rule: corrections touch form, never content.

SKILL.md no longer duplicates this guidance — it points at the reference and keeps the four high-value passes.

Verification

ruff check, ruff format --check and the full suite (159 tests) pass locally, and uv lock --check confirms uv sync --frozen will resolve in CI. The workflows themselves are only YAML-validated so far — this PR is their first real run.

Not included

Their auto-chunking of oversized audio on cloud backends was left out on purpose: it only works around the OpenAI 25 MB limit, and the local MLX path has no such constraint. If it lands later it should be opt-in (--chunk), not automatic.

🤖 Generated with Claude Code

https://claude.ai/code/session_01H7cceyUMrUTJrqqVc28bHH

Pinous and others added 4 commits July 31, 2026 14:24
Derives the listing from the WhisperModel and OpenAIModel enums so the
output can never drift from what --model actually accepts, and ships the
matching JSON schema for agent introspection.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7cceyUMrUTJrqqVc28bHH
Tests run on macos-latest since mlx-whisper only installs on Apple
Silicon; the publish job runs on ubuntu and uses PyPI trusted publishing
(OIDC), so no token is stored. Publishing requires declaring the trusted
publisher on pypi.org first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7cceyUMrUTJrqqVc28bHH
Moves post-processing guidance out of SKILL.md into a reference covering
what Whisper actually gets wrong on any audio — silence hallucinations,
repetition loops, diacritics, homophones, segment boundaries — with the
rule that corrections touch form, never content. Also documents the new
models command.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7cceyUMrUTJrqqVc28bHH
Resolves the overlap with the trx-0.4-parity work. Keeps their SKILL.md
post-processing order (ranked by measured frequency) and their reference
as the base, with the domain-specific vocabulary removed so the library
stays general-purpose: brand/instrument tables, house glossary and
domain-absent term lists are gone, the measured decoder-level findings
stay, and multilingual diacritics, homophones and language-detection
guidance are folded in.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7cceyUMrUTJrqqVc28bHH
@Pinous
Pinous merged commit 65187d2 into master Jul 31, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant