voicerender 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {voicerender-0.2.2 → voicerender-0.2.3}/.github/workflows/tests.yml +3 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +5 -0
- voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/audit/commit-audit.yaml +74 -0
- voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/entries/entry-0001.md +32 -0
- voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/entries/entry-0002.md +34 -0
- voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/release.md +27 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/audit-decisions.yaml +31 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/audit.yaml +53 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/entries.yaml +45 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/evidence/67e4d8e.patch +145 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/evidence/b17f1a9.patch +1868 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/evidence/manifest.json +45 -0
- voicerender-0.2.3/.ledger/releaseledger/work/0.2.3/range.json +13 -0
- {voicerender-0.2.2/voicerender.egg-info → voicerender-0.2.3}/PKG-INFO +25 -3
- {voicerender-0.2.2 → voicerender-0.2.3}/README.md +21 -1
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/changelog.md +12 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/pyproject.toml +3 -1
- voicerender-0.2.3/tests/test_chatterboxsynth_engine.py +668 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_engine_registry.py +68 -6
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_kittensynth_engine.py +30 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_preflight.py +37 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/wheel_smoke.py +3 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/_version.py +3 -3
- voicerender-0.2.3/voicerender/engines/chatterboxsynth.py +906 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/kittensynth.py +5 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/registry.py +7 -0
- {voicerender-0.2.2 → voicerender-0.2.3/voicerender.egg-info}/PKG-INFO +25 -3
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender.egg-info/SOURCES.txt +13 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender.egg-info/requires.txt +4 -1
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender.egg-info/scm_file_list.json +13 -0
- voicerender-0.2.3/voicerender.egg-info/scm_version.json +8 -0
- voicerender-0.2.2/voicerender.egg-info/scm_version.json +0 -8
- {voicerender-0.2.2 → voicerender-0.2.3}/.codecrate.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.github/workflows/codecov.yml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.github/workflows/pre-commit.yml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.github/workflows/python-publish.yml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.gitignore +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/ledger.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/.ledger-project.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/config.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/audit/commit-audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/entries/entry-0001.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.1.1/release.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/audit/commit-audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0001.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0002.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0003.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0004.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0005.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0006.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/entries/entry-0007.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.0/release.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/audit/commit-audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0001.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0002.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0003.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0004.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0005.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/entries/entry-0006.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.1/release.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/audit/commit-audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0001.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0002.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0003.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/entries/entry-0004.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/0.2.2/release.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/audit/commit-audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0001.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0002.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0003.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0004.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/entries/entry-0005.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/releases/v0.1.0/release.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.1.1/audit-decisions.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.1.1/entries.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/audit-decisions.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/entries.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/19f5b06.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/245ca9f.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/42a90e3.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/480cbea.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/4eb3c28.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/50f298e.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/56ae327.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/57f1e24.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/6dae2b6.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/84f29db.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/a390661.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/a431dfa.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/c2be7b3.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/da15247.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/ede34ea.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/evidence/manifest.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.0/range.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/audit-decisions.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/entries.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/evidence/3342e15.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/evidence/3c82349.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/evidence/7f466cc.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/evidence/84f629e.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/evidence/b7e1917.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/evidence/manifest.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.1/range.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/audit-decisions.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/audit.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/entries.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/evidence/6510540.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/evidence/8861791.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/evidence/f093d36.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/evidence/fdb106d.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/evidence/manifest.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/0.2.2/range.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/audit-decisions.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/entries.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/evidence/264eb9b.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/evidence/774f6f2.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/evidence/9e71e84.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/evidence/c4a2872.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/evidence/fb7faaf.patch +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/work/v0.1.0/evidence/manifest.json +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/write.lock +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/taskledger/.ledger-project.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.ledger/taskledger/config.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/.pre-commit-config.yaml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/LICENSE +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/MANIFEST.in +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/Makefile +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/conf.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/index.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/make.bat +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/make.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/renderprofile.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/docs/requirements.txt +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/examples/README.md +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/examples/plans/chapter.renderplan.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/examples/plans/chapter.voiceplan.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/examples/voices/narration.renderprofile.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/examples/voices/piper.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/examples/voices/pocket-reference.toml +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/setup.cfg +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_backends.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_capacity.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_cli.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_control_surface_exports.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_engine_contracts.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_engine_options.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_inflectsynth_engine.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_kokoro_reference.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_managed_voices.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_model_management_api.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_model_management_cli.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_package_metadata.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_pocketsynth_managed.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_profile_roles.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_profile_roles_cli.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_progress.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_qwen3_voice_design.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_qwen3synth_engine.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_render_book.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_renderer.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_renderplan_input.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_renderplan_render.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_renderprofile.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_soprosynth_engine.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_storage.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_voice_clone.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_voice_clone_cli.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_voice_descriptors.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_voice_source_cli.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_voice_source_codec.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/tests/test_voice_sources.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/__init__.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/__main__.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/book.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/book_contract.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/book_layout.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/capacity.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/cli.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/__init__.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/api_probe.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/assets.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/base.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/catalog.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/inflectsynth.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/kokoro.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/metadata.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/options.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/piper.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/pipersynth.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/pocket.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/pocketsynth.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/profiles.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/qwen3synth.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/selection.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/soprosynth.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/engines/supertonicsynth.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/errors.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/estimates.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/events.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/lexicons.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/managed_voices.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/models.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/models_api.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/preflight.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/profile_roles.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/progress.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/py.typed +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/render.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/renderplan_input.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/renderplan_render.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/renderprofile.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/storage.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/voice_clone.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/voice_design.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/voice_source_codec.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/voice_sources.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender/voices_api.py +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender.egg-info/dependency_links.txt +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender.egg-info/entry_points.txt +0 -0
- {voicerender-0.2.2 → voicerender-0.2.3}/voicerender.egg-info/top_level.txt +0 -0
|
@@ -197,6 +197,7 @@ jobs:
|
|
|
197
197
|
):
|
|
198
198
|
base_requirements.add(requirement.name.lower())
|
|
199
199
|
engine_sdks = {
|
|
200
|
+
"chatterboxsynth",
|
|
200
201
|
"inflectsynth", "kittensynth", "pykokoro", "pipersynth",
|
|
201
202
|
"pocketsynth", "soprosynth", "supertonicsynth",
|
|
202
203
|
"qwen3synth",
|
|
@@ -235,6 +236,7 @@ jobs:
|
|
|
235
236
|
assert resources.files("voicerender").joinpath("book_layout.py").is_file()
|
|
236
237
|
assert RenderPlanSet is not None
|
|
237
238
|
assert {item["id"] for item in list_engines()} == {
|
|
239
|
+
"chatterbox",
|
|
238
240
|
"inflect",
|
|
239
241
|
"kitten",
|
|
240
242
|
"kokoro",
|
|
@@ -246,6 +248,7 @@ jobs:
|
|
|
246
248
|
}
|
|
247
249
|
assert not any(
|
|
248
250
|
name.split(".", 1)[0] in {
|
|
251
|
+
"chatterboxsynth",
|
|
249
252
|
"inflectsynth", "kittensynth", "pykokoro", "pipersynth",
|
|
250
253
|
"pocketsynth", "soprosynth", "supertonicsynth", "utterplan",
|
|
251
254
|
"qwen3synth",
|
{voicerender-0.2.2 → voicerender-0.2.3}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl
RENAMED
|
@@ -28,3 +28,8 @@
|
|
|
28
28
|
{"data":{"updated_rows":4},"event":"audit.updated","event_id":"event-0028","record_revisions":{"commit_audit_sheet":2},"release_version":"0.2.2","schema_version":2}
|
|
29
29
|
{"data":{"entry_ids":["entry-0001","entry-0002","entry-0003","entry-0004"],"synced_audit_rows":4},"event":"entry.batch_added","event_id":"event-0029","record_revisions":{"commit_audit_sheet":3,"entry:0.2.2/entry-0001":1,"entry:0.2.2/entry-0002":1,"entry:0.2.2/entry-0003":1,"entry:0.2.2/entry-0004":1,"release:0.2.2":3},"release_version":"0.2.2","schema_version":2}
|
|
30
30
|
{"data":{"released_at":"2026-10-17"},"event":"release.finalized","event_id":"event-0030","record_revisions":{"release:0.2.2":4},"release_version":"0.2.2","schema_version":2}
|
|
31
|
+
{"data":{"status":"planned"},"event":"release.created","event_id":"event-0031","record_revisions":{"release:0.2.3":1},"release_version":"0.2.3","schema_version":2}
|
|
32
|
+
{"data":{"fields":["git_base_ref","git_base_sha","git_commit_count","git_head_ref","git_head_sha","git_range"]},"event":"release.updated","event_id":"event-0032","record_revisions":{"release:0.2.3":2},"release_version":"0.2.3","schema_version":2}
|
|
33
|
+
{"data":{"row_count":2},"event":"audit.created","event_id":"event-0033","record_revisions":{"commit_audit_sheet":1},"release_version":"0.2.3","schema_version":2}
|
|
34
|
+
{"data":{"updated_rows":2},"event":"audit.updated","event_id":"event-0034","record_revisions":{"commit_audit_sheet":2},"release_version":"0.2.3","schema_version":2}
|
|
35
|
+
{"data":{"entry_ids":["entry-0001","entry-0002"],"synced_audit_rows":2},"event":"entry.batch_added","event_id":"event-0035","record_revisions":{"commit_audit_sheet":3,"entry:0.2.3/entry-0001":1,"entry:0.2.3/entry-0002":1,"release:0.2.3":3},"release_version":"0.2.3","schema_version":2}
|
voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/audit/commit-audit.yaml
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 3
|
|
6
|
+
release_version: 0.2.3
|
|
7
|
+
git_base_ref: v0.2.2
|
|
8
|
+
git_base_sha: aecc0461fdecf55f60f20991e796efd1c240679a
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
11
|
+
git_range: aecc0461fdecf55f60f20991e796efd1c240679a..b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
12
|
+
commit_count: 2
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
15
|
+
source_ref: git:67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
16
|
+
short_sha: 67e4d8e
|
|
17
|
+
changed_paths:
|
|
18
|
+
- pyproject.toml
|
|
19
|
+
- tests/test_kittensynth_engine.py
|
|
20
|
+
- tests/test_preflight.py
|
|
21
|
+
- voicerender/engines/kittensynth.py
|
|
22
|
+
stats:
|
|
23
|
+
files_changed: 4
|
|
24
|
+
insertions: 73
|
|
25
|
+
deletions: 1
|
|
26
|
+
inspected: true
|
|
27
|
+
inspected_paths:
|
|
28
|
+
- pyproject.toml
|
|
29
|
+
- tests/test_kittensynth_engine.py
|
|
30
|
+
- tests/test_preflight.py
|
|
31
|
+
- voicerender/engines/kittensynth.py
|
|
32
|
+
observed_behavior:
|
|
33
|
+
Preflight now classifies managed model dependency failures as
|
|
34
|
+
non-replanable runtime rejects, preserving native error context instead of treating
|
|
35
|
+
the failure as a text-capacity issue; the KittenSynth optional dependency floor
|
|
36
|
+
is raised to 0.1.6.
|
|
37
|
+
public_impact: public
|
|
38
|
+
decision: accepted
|
|
39
|
+
stale: false
|
|
40
|
+
evidence_subject: "feat: raise kittensynth floor"
|
|
41
|
+
target_entry_id: entry-0001
|
|
42
|
+
notes: ""
|
|
43
|
+
- sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
44
|
+
source_ref: git:b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
45
|
+
short_sha: b17f1a9
|
|
46
|
+
changed_paths:
|
|
47
|
+
- README.md
|
|
48
|
+
- pyproject.toml
|
|
49
|
+
- tests/test_chatterboxsynth_engine.py
|
|
50
|
+
- tests/test_engine_registry.py
|
|
51
|
+
- voicerender/engines/chatterboxsynth.py
|
|
52
|
+
- voicerender/engines/registry.py
|
|
53
|
+
stats:
|
|
54
|
+
files_changed: 6
|
|
55
|
+
insertions: 1672
|
|
56
|
+
deletions: 7
|
|
57
|
+
inspected: true
|
|
58
|
+
inspected_paths:
|
|
59
|
+
- README.md
|
|
60
|
+
- pyproject.toml
|
|
61
|
+
- tests/test_chatterboxsynth_engine.py
|
|
62
|
+
- tests/test_engine_registry.py
|
|
63
|
+
- voicerender/engines/chatterboxsynth.py
|
|
64
|
+
- voicerender/engines/registry.py
|
|
65
|
+
observed_behavior:
|
|
66
|
+
Adds optional English-only ChatterboxSynth rendering with installed-model
|
|
67
|
+
discovery, pinned local or managed reference voices, exact preflight measurement,
|
|
68
|
+
and lazy voice preparation.
|
|
69
|
+
public_impact: public
|
|
70
|
+
decision: accepted
|
|
71
|
+
stale: false
|
|
72
|
+
evidence_subject: "feat: add chatterbox"
|
|
73
|
+
target_entry_id: entry-0002
|
|
74
|
+
notes: ""
|
voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/entries/entry-0001.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0001
|
|
8
|
+
release_version: 0.2.3
|
|
9
|
+
kind: changed
|
|
10
|
+
summary:
|
|
11
|
+
Changed preflight handling so unavailable managed KittenSynth dependencies
|
|
12
|
+
reject without scheduling a replan
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
18
|
+
paths:
|
|
19
|
+
- pyproject.toml
|
|
20
|
+
- tests/test_kittensynth_engine.py
|
|
21
|
+
- tests/test_preflight.py
|
|
22
|
+
- voicerender/engines/kittensynth.py
|
|
23
|
+
issues: []
|
|
24
|
+
prs: []
|
|
25
|
+
sources:
|
|
26
|
+
- git:67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
27
|
+
contributors:
|
|
28
|
+
- "@holgern"
|
|
29
|
+
breaking: false
|
|
30
|
+
internal: false
|
|
31
|
+
order: 1
|
|
32
|
+
---
|
voicerender-0.2.3/.ledger/releaseledger/data/ledgers/main/releases/0.2.3/entries/entry-0002.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release_entry
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 1
|
|
7
|
+
entry_id: entry-0002
|
|
8
|
+
release_version: 0.2.3
|
|
9
|
+
kind: added
|
|
10
|
+
summary:
|
|
11
|
+
Added optional ChatterboxSynth rendering with pinned reference voices and
|
|
12
|
+
installed-model discovery
|
|
13
|
+
status: accepted
|
|
14
|
+
audience: null
|
|
15
|
+
scopes: []
|
|
16
|
+
source_refs:
|
|
17
|
+
- git:b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
18
|
+
paths:
|
|
19
|
+
- README.md
|
|
20
|
+
- pyproject.toml
|
|
21
|
+
- tests/test_chatterboxsynth_engine.py
|
|
22
|
+
- tests/test_engine_registry.py
|
|
23
|
+
- voicerender/engines/chatterboxsynth.py
|
|
24
|
+
- voicerender/engines/registry.py
|
|
25
|
+
issues: []
|
|
26
|
+
prs: []
|
|
27
|
+
sources:
|
|
28
|
+
- git:b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
29
|
+
contributors:
|
|
30
|
+
- "@holgern"
|
|
31
|
+
breaking: false
|
|
32
|
+
internal: false
|
|
33
|
+
order: 2
|
|
34
|
+
---
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
object_type: release
|
|
4
|
+
versioning:
|
|
5
|
+
schema_version: 1
|
|
6
|
+
revision: 3
|
|
7
|
+
version: 0.2.3
|
|
8
|
+
status: planned
|
|
9
|
+
history_state: curated
|
|
10
|
+
title: null
|
|
11
|
+
released_at: null
|
|
12
|
+
previous_version: 0.2.2
|
|
13
|
+
cancel_reason: null
|
|
14
|
+
superseded_by: null
|
|
15
|
+
changelog_file: null
|
|
16
|
+
boundary_ref: null
|
|
17
|
+
source_refs: []
|
|
18
|
+
source_count: null
|
|
19
|
+
entry_count: 2
|
|
20
|
+
artifact_count: 0
|
|
21
|
+
git_base_ref: v0.2.2
|
|
22
|
+
git_base_sha: aecc0461fdecf55f60f20991e796efd1c240679a
|
|
23
|
+
git_head_ref: HEAD
|
|
24
|
+
git_head_sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
25
|
+
git_range: aecc0461fdecf55f60f20991e796efd1c240679a..b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
26
|
+
git_commit_count: 2
|
|
27
|
+
---
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
rows:
|
|
2
|
+
- sha: 67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
3
|
+
inspected: true
|
|
4
|
+
inspected_paths:
|
|
5
|
+
- pyproject.toml
|
|
6
|
+
- tests/test_kittensynth_engine.py
|
|
7
|
+
- tests/test_preflight.py
|
|
8
|
+
- voicerender/engines/kittensynth.py
|
|
9
|
+
observed_behavior: Preflight now classifies managed model dependency failures as non-replanable runtime rejects, preserving native error context instead of treating the failure as a text-capacity issue; the KittenSynth optional dependency floor is raised to 0.1.6.
|
|
10
|
+
public_impact: public
|
|
11
|
+
decision: accepted
|
|
12
|
+
target_entry_key: null
|
|
13
|
+
target_entry_id: null
|
|
14
|
+
notes: ""
|
|
15
|
+
stale: false
|
|
16
|
+
- sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
17
|
+
inspected: true
|
|
18
|
+
inspected_paths:
|
|
19
|
+
- README.md
|
|
20
|
+
- pyproject.toml
|
|
21
|
+
- tests/test_chatterboxsynth_engine.py
|
|
22
|
+
- tests/test_engine_registry.py
|
|
23
|
+
- voicerender/engines/chatterboxsynth.py
|
|
24
|
+
- voicerender/engines/registry.py
|
|
25
|
+
observed_behavior: Adds optional English-only ChatterboxSynth rendering with installed-model discovery, pinned local or managed reference voices, exact preflight measurement, and lazy voice preparation.
|
|
26
|
+
public_impact: public
|
|
27
|
+
decision: accepted
|
|
28
|
+
target_entry_key: null
|
|
29
|
+
target_entry_id: null
|
|
30
|
+
notes: ""
|
|
31
|
+
stale: false
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
object_type: commit_audit_sheet
|
|
3
|
+
versioning:
|
|
4
|
+
schema_version: 1
|
|
5
|
+
revision: 1
|
|
6
|
+
release_version: 0.2.3
|
|
7
|
+
git_base_ref: v0.2.2
|
|
8
|
+
git_base_sha: aecc0461fdecf55f60f20991e796efd1c240679a
|
|
9
|
+
git_head_ref: HEAD
|
|
10
|
+
git_head_sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
11
|
+
git_range: aecc0461fdecf55f60f20991e796efd1c240679a..b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
12
|
+
commit_count: 2
|
|
13
|
+
rows:
|
|
14
|
+
- sha: 67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
15
|
+
source_ref: git:67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
16
|
+
short_sha: 67e4d8e
|
|
17
|
+
changed_paths:
|
|
18
|
+
- pyproject.toml
|
|
19
|
+
- tests/test_kittensynth_engine.py
|
|
20
|
+
- tests/test_preflight.py
|
|
21
|
+
- voicerender/engines/kittensynth.py
|
|
22
|
+
stats:
|
|
23
|
+
files_changed: 4
|
|
24
|
+
insertions: 73
|
|
25
|
+
deletions: 1
|
|
26
|
+
inspected: false
|
|
27
|
+
inspected_paths: []
|
|
28
|
+
observed_behavior: ""
|
|
29
|
+
public_impact: unknown
|
|
30
|
+
decision: needs_review
|
|
31
|
+
stale: false
|
|
32
|
+
evidence_subject: "feat: raise kittensynth floor"
|
|
33
|
+
- sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
34
|
+
source_ref: git:b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
35
|
+
short_sha: b17f1a9
|
|
36
|
+
changed_paths:
|
|
37
|
+
- README.md
|
|
38
|
+
- pyproject.toml
|
|
39
|
+
- tests/test_chatterboxsynth_engine.py
|
|
40
|
+
- tests/test_engine_registry.py
|
|
41
|
+
- voicerender/engines/chatterboxsynth.py
|
|
42
|
+
- voicerender/engines/registry.py
|
|
43
|
+
stats:
|
|
44
|
+
files_changed: 6
|
|
45
|
+
insertions: 1672
|
|
46
|
+
deletions: 7
|
|
47
|
+
inspected: false
|
|
48
|
+
inspected_paths: []
|
|
49
|
+
observed_behavior: ""
|
|
50
|
+
public_impact: unknown
|
|
51
|
+
decision: needs_review
|
|
52
|
+
stale: false
|
|
53
|
+
evidence_subject: "feat: add chatterbox"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
schema: releaseledger.entry-batch.v1
|
|
2
|
+
operation: create
|
|
3
|
+
schema_version: 1
|
|
4
|
+
object_type: release_entry_batch
|
|
5
|
+
release_version: 0.2.3
|
|
6
|
+
git_base_ref: aecc0461fdecf55f60f20991e796efd1c240679a
|
|
7
|
+
git_base_sha: aecc0461fdecf55f60f20991e796efd1c240679a
|
|
8
|
+
git_head_ref: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
9
|
+
git_head_sha: b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
10
|
+
include_merges: nontrivial
|
|
11
|
+
entries:
|
|
12
|
+
- kind: changed
|
|
13
|
+
summary: Changed preflight handling so unavailable managed KittenSynth dependencies reject without scheduling a replan
|
|
14
|
+
status: accepted
|
|
15
|
+
source_refs:
|
|
16
|
+
- git:67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
17
|
+
paths:
|
|
18
|
+
- pyproject.toml
|
|
19
|
+
- tests/test_kittensynth_engine.py
|
|
20
|
+
- tests/test_preflight.py
|
|
21
|
+
- voicerender/engines/kittensynth.py
|
|
22
|
+
sources:
|
|
23
|
+
- git:67e4d8ec44e04f96d7041afa8c87c762bec87b6f
|
|
24
|
+
prs: []
|
|
25
|
+
issues: []
|
|
26
|
+
contributors:
|
|
27
|
+
- "@holgern"
|
|
28
|
+
- kind: added
|
|
29
|
+
summary: Added optional ChatterboxSynth rendering with pinned reference voices and installed-model discovery
|
|
30
|
+
status: accepted
|
|
31
|
+
source_refs:
|
|
32
|
+
- git:b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
33
|
+
paths:
|
|
34
|
+
- README.md
|
|
35
|
+
- pyproject.toml
|
|
36
|
+
- tests/test_chatterboxsynth_engine.py
|
|
37
|
+
- tests/test_engine_registry.py
|
|
38
|
+
- voicerender/engines/chatterboxsynth.py
|
|
39
|
+
- voicerender/engines/registry.py
|
|
40
|
+
sources:
|
|
41
|
+
- git:b17f1a9010849b0e6aec846f222e12a86f04ad79
|
|
42
|
+
prs: []
|
|
43
|
+
issues: []
|
|
44
|
+
contributors:
|
|
45
|
+
- "@holgern"
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
pyproject.toml | 2 +-
|
|
2
|
+
tests/test_kittensynth_engine.py | 30 ++++++++++++++++++++++++++++++
|
|
3
|
+
tests/test_preflight.py | 37 +++++++++++++++++++++++++++++++++++++
|
|
4
|
+
voicerender/engines/kittensynth.py | 5 +++++
|
|
5
|
+
4 files changed, 73 insertions(+), 1 deletion(-)
|
|
6
|
+
|
|
7
|
+
diff --git a/pyproject.toml b/pyproject.toml
|
|
8
|
+
index 5aa5811..17b50ff 100644
|
|
9
|
+
--- a/pyproject.toml
|
|
10
|
+
+++ b/pyproject.toml
|
|
11
|
+
@@ -21,7 +21,7 @@ dependencies = [
|
|
12
|
+
|
|
13
|
+
[project.optional-dependencies]
|
|
14
|
+
inflect = ["inflectsynth[cpu]>=0.1.1,<0.2"]
|
|
15
|
+
-kitten = ["kittensynth[cpu]>=0.1.4,<0.2"]
|
|
16
|
+
+kitten = ["kittensynth[cpu]>=0.1.6,<0.2"]
|
|
17
|
+
kokoro = ["pykokoro>=0.10.5,<0.11"]
|
|
18
|
+
piper = ["pipersynth>=0.2.5,<0.3"]
|
|
19
|
+
pocket = ["pocketsynth[cpu]>=0.2.5,<0.3"]
|
|
20
|
+
diff --git a/tests/test_kittensynth_engine.py b/tests/test_kittensynth_engine.py
|
|
21
|
+
index 8c437ec..9fb2279 100644
|
|
22
|
+
--- a/tests/test_kittensynth_engine.py
|
|
23
|
+
+++ b/tests/test_kittensynth_engine.py
|
|
24
|
+
@@ -301,6 +301,36 @@ def test_synthesis_too_long_error_translates_with_replan_details(
|
|
25
|
+
assert outcome.measurement.maximum == 512
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
+def test_managed_dependency_error_is_a_non_replanable_runtime_reject(
|
|
29
|
+
+ monkeypatch: pytest.MonkeyPatch,
|
|
30
|
+
+) -> None:
|
|
31
|
+
+ module = ModuleType("kittensynth")
|
|
32
|
+
+ native_error_type = type("ManagedModelDependencyError", (Exception,), {})
|
|
33
|
+
+ module.ManagedModelDependencyError = native_error_type # type: ignore[attr-defined]
|
|
34
|
+
+ native_error = native_error_type("managed download transport unavailable")
|
|
35
|
+
+
|
|
36
|
+
+ class FailingKittenVoice:
|
|
37
|
+
+ @classmethod
|
|
38
|
+
+ def from_pretrained(cls, *args: Any, **kwargs: Any) -> Any:
|
|
39
|
+
+ raise native_error
|
|
40
|
+
+
|
|
41
|
+
+ module.KittenVoice = FailingKittenVoice # type: ignore[attr-defined]
|
|
42
|
+
+ monkeypatch.setitem(sys.modules, "kittensynth", module)
|
|
43
|
+
+ selection = EngineSelection(
|
|
44
|
+
+ engine="kitten",
|
|
45
|
+
+ target_id="nano-0.8-int8",
|
|
46
|
+
+ language="en-US",
|
|
47
|
+
+ voice="Jasper",
|
|
48
|
+
+ )
|
|
49
|
+
+
|
|
50
|
+
+ with pytest.raises(EngineBackendError) as caught:
|
|
51
|
+
+ KittenSynthEngineAdapter().open(selection)
|
|
52
|
+
+
|
|
53
|
+
+ assert caught.value.code == "kitten.runtime_dependency_error"
|
|
54
|
+
+ assert caught.value.native_error_type == "ManagedModelDependencyError"
|
|
55
|
+
+ assert classify_measurement(caught.value).disposition is PreflightDisposition.REJECT
|
|
56
|
+
+
|
|
57
|
+
+
|
|
58
|
+
def _synthesis_result(audio: Any) -> SimpleNamespace:
|
|
59
|
+
return SimpleNamespace(
|
|
60
|
+
audio=audio,
|
|
61
|
+
diff --git a/tests/test_preflight.py b/tests/test_preflight.py
|
|
62
|
+
index 3303c9e..1fde38b 100644
|
|
63
|
+
--- a/tests/test_preflight.py
|
|
64
|
+
+++ b/tests/test_preflight.py
|
|
65
|
+
@@ -281,6 +281,7 @@ def _install_fake_kittensynth(
|
|
66
|
+
amount: int,
|
|
67
|
+
maximum: int | None,
|
|
68
|
+
fits: bool | None,
|
|
69
|
+
+ open_error: Exception | None = None,
|
|
70
|
+
) -> list[tuple[str, Any]]:
|
|
71
|
+
events: list[tuple[str, Any]] = []
|
|
72
|
+
model = SimpleNamespace(
|
|
73
|
+
@@ -310,6 +311,9 @@ def _install_fake_kittensynth(
|
|
74
|
+
@classmethod
|
|
75
|
+
def from_pretrained(cls, target_id: str, **kwargs: Any) -> FakeVoice:
|
|
76
|
+
assert target_id == "kitten-test-model"
|
|
77
|
+
+ if open_error is not None:
|
|
78
|
+
+ events.append(("open", target_id))
|
|
79
|
+
+ raise open_error
|
|
80
|
+
return cls()
|
|
81
|
+
|
|
82
|
+
def measure_prepared(self, text: str) -> Any:
|
|
83
|
+
@@ -341,6 +345,8 @@ def _install_fake_kittensynth(
|
|
84
|
+
"measurement_metric": "model_tokens",
|
|
85
|
+
}
|
|
86
|
+
module.KittenVoice = FakeVoice
|
|
87
|
+
+ if open_error is not None:
|
|
88
|
+
+ module.ManagedModelDependencyError = type(open_error) # type: ignore[attr-defined]
|
|
89
|
+
module.SynthesisMeasure = object
|
|
90
|
+
module.SynthesisConfig = object
|
|
91
|
+
module.SynthesisResult = object
|
|
92
|
+
@@ -521,6 +527,37 @@ def test_kitten_preflight_uses_exact_frontend_measurement_without_synthesis(
|
|
93
|
+
assert events[0][1] == "Kitten preflight"
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
+def test_kitten_managed_dependency_error_rejects_preflight_before_measurement(
|
|
97
|
+
+ monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
|
98
|
+
+) -> None:
|
|
99
|
+
+ native_error_type = type("ManagedModelDependencyError", (Exception,), {})
|
|
100
|
+
+ native_error = native_error_type("managed download transport unavailable")
|
|
101
|
+
+ events = _install_fake_kittensynth(
|
|
102
|
+
+ monkeypatch,
|
|
103
|
+
+ amount=180,
|
|
104
|
+
+ maximum=256,
|
|
105
|
+
+ fits=True,
|
|
106
|
+
+ open_error=native_error,
|
|
107
|
+
+ )
|
|
108
|
+
+ binding = {
|
|
109
|
+
+ "renderer": "kitten",
|
|
110
|
+
+ "target_id": "kitten-test-model",
|
|
111
|
+
+ "voice": "Jasper",
|
|
112
|
+
+ }
|
|
113
|
+
+ plan = _plan(
|
|
114
|
+
+ ("Kitten preflight dependency failure", True, "sentence"), binding=binding
|
|
115
|
+
+ )
|
|
116
|
+
+
|
|
117
|
+
+ report = preflight_render_plan(plan, tmp_path / "kitten-dependency-error.toml")
|
|
118
|
+
+
|
|
119
|
+
+ check = report.checks[0]
|
|
120
|
+
+ assert report.status == "reject"
|
|
121
|
+
+ assert check.status == "error"
|
|
122
|
+
+ assert check.source == "kitten.runtime_dependency_error"
|
|
123
|
+
+ assert report.replan == ()
|
|
124
|
+
+ assert [event[0] for event in events] == ["open"]
|
|
125
|
+
+
|
|
126
|
+
+
|
|
127
|
+
def test_kitten_preflight_defers_emphasis_to_composition(
|
|
128
|
+
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
|
129
|
+
) -> None:
|
|
130
|
+
diff --git a/voicerender/engines/kittensynth.py b/voicerender/engines/kittensynth.py
|
|
131
|
+
index 9383225..cb87622 100644
|
|
132
|
+
--- a/voicerender/engines/kittensynth.py
|
|
133
|
+
+++ b/voicerender/engines/kittensynth.py
|
|
134
|
+
@@ -171,6 +171,11 @@ def _translate_kitten_error(
|
|
135
|
+
("InvalidSpeedError", InvalidEngineOptionError, "kitten.invalid_speed"),
|
|
136
|
+
("InvalidVoiceError", InvalidEngineVoiceError, "kitten.voice_unavailable"),
|
|
137
|
+
("UnsupportedModelError", InvalidEngineModelError, "kitten.model_unsupported"),
|
|
138
|
+
+ (
|
|
139
|
+
+ "ManagedModelDependencyError",
|
|
140
|
+
+ EngineBackendError,
|
|
141
|
+
+ "kitten.runtime_dependency_error",
|
|
142
|
+
+ ),
|
|
143
|
+
("OnnxVoiceContractError", EngineBackendError, "kitten.runtime_contract_error"),
|
|
144
|
+
)
|
|
145
|
+
error_type: type[EngineError] = EngineBackendError
|