Skip to content

ElevenLabs: docs-first dialect corrections + our own v3 fixture set - #5

Merged
willwade merged 2 commits into
masterfrom
feat/elevenlabs-v3-fixtures
Sep 4, 2026
Merged

ElevenLabs: docs-first dialect corrections + our own v3 fixture set#5
willwade merged 2 commits into
masterfrom
feat/elevenlabs-v3-fixtures

Conversation

@willwade

@willwade willwade commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #4, applying the "support v3 as fully as we can" principle and deliberately preferring ElevenLabs' documentation over speechmarkdown-js parity (the JS reference never had heavy testing and predates v3):

  • Break durations normalize to the documented seconds format — "Break time should be described in seconds" (help center). 250ms0.25s, still clamped to the 3s limit. The JS-generated corpus fixtures used ms; updated them (submodule bumped to the elevenlabs-v3-fixtures branch of speechmarkdown-test-files).
  • Pre-v3 dialect drops expressive audio tags. Current docs state audio tags are "exclusive to Eleven v3 and are not supported by other models" — pre-v3 models read them aloud as literal text. The JS formatter's passthrough predates that clarity; our v2 dialect now drops them (v3 dialect unchanged — passthrough).
  • Our own v3 fixture set: 8 new elevenlabs-v3-* corpus cases with .elevenlabs-v3.ssml fixtures authored against the Rust formatter — not generator output, since the JS reference has no v3 platform. The corpus runner enforces the new extension; suite is now 217/217.

Together with AACTools/rust-tts-wrapper#35 (with-timestamps degrade fallback), this closes the no-API-key-needed items from the v3 fullness review. Remaining live items need ELEVENLABS_API_KEY.

Test plan

  • 217/217 corpus (incl. 8 new v3 cases + updated ms→s fixtures)
  • cargo clippy --all-features --all-targets clean
  • CI green

… own v3 fixtures

Aligning the pre-v3 dialect to the ElevenLabs docs rather than the
speechmarkdown-js reference (which never had heavy testing):

- break durations normalize to the documented seconds format
  (250ms -> 0.25s) and clamp to the 3s limit
- expressive audio tags ([laugh], …) are dropped in the pre-v3
  dialect: they are eleven_v3-exclusive and pre-v3 models read them
  aloud as literal text
- new elevenlabs-v3-* corpus fixtures authored by us (the JS generator
  has no v3 platform) and enforced by the corpus runner via
  .elevenlabs-v3.ssml; submodule bumped to elevenlabs-v3-fixtures
The runner change was missing from the previous commit — as pushed,
nothing read the new fixtures. Also pushed the submodule commit to
feat/expand-test-fixtures (the branch .gitmodules tracks) so the
gitlink stays reachable from the tracked branch.
@willwade
willwade merged commit 2974114 into master Sep 4, 2026
4 checks 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