Repository navigation
feat(tts): add checked Japanese dictionary and default-off reading experiment - #237
Merged
Merged
Conversation
This was referenced Oct 20, 2026
…ext experiment off
Lucas1479
added a commit
that referenced
this pull request
Oct 20, 2026
…es (#243) ## What and why The required dependency audit now rejects main's aiohttp 3.14.3 pin following the published advisories. Update aiohttp to 3.14.4 and its minimum required yarl to 1.25.1. These are the only two changed package versions in the lock. This extracts the dependency-only patch from draft #237 so security maintenance does not depend on the Japanese pronunciation resource review. Upstream: [advisory](GHSA-2g87-pp6c-29x5), [3.14.4 release](https://github.com/aio-libs/aiohttp/releases/tag/v3.14.4). ## Change class - [x] Routine dependency maintenance Owning layer: dependency pins and generated lock. User-visible effect: patched HTTP dependencies; no feature/configuration change. Compatibility: yarl's required minimum follows aiohttp. Speech/GPU pins and optional profile selections are unchanged. ## Evidence - Clean main-based branch: 98 profile/environment, loopback HTTP and gateway lifecycle tests passed. - `uv lock --check --offline` passes; inspected lock changes show only aiohttp 3.14.3 → 3.14.4 and yarl 1.24.5 → 1.25.1. - Exported locked core/dev requirements pass pip-audit with the existing pytest exception unchanged; no new vulnerability suppression. - The same dependency patch also passed all 18 checks on #237's e59c6fc head. This PR's fresh CI is tracked independently. ## Final check - [x] One coherent maintenance change, two source files only - [x] No runtime fallback, feature, model, voice material or local state included
…ciation-dictionary
Lucas1479
marked this pull request as ready for review
October 20, 2026 07:08
This was referenced Oct 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
The imported English-to-kana CSV contains shifted neighboring-word readings that automatic final-phone screening misses. This change provides a much smaller checked lexical candidate subset, through the existing optional resource installer. The separate Japanese context-reading integration is an explicit default-off experiment because broader testing found real regressions.
Linked public-contract Issue: Refs #244. The separate aiohttp/yarl security PR #243 is merged into main at
79ef387a7e4848046595ddabba0890c9c74c964b. This branch is synchronized with that main commit. The merge changes no committed file content relative to the preceding copy revision.Change class and ownership
Lexical admission belongs to offline data preparation; contextual reading belongs to the upstream native selector; resource transport remains with the existing installer. Both resources are separately installed, independently switchable and never downloaded at startup. Original Japanese text reaches native reading/prosody planning; character weights, references and checkpoint symbol IDs are unchanged. Restart the backend after resource/setting changes.
Dictionary candidate 2026.10.20.3
The user chose only individually checked word/reading pairs, accepting smaller coverage.
japanese_dictionary_reviewed_readings.jsonis a model-assisted lexical candidate ledger against CMU phones/Japanese usage, not independent human/native-speaker sign-off. Maintainer lexical review, accent and listening acceptance remain pending.The English gate independently reads the source ledger and checks every released word in three production clean_text contexts (381 checks), all 129 row memberships and 127 frontend/prosody comparisons. 303 common-word controls include 190 unlisted words required to preserve baseline phones. Also: 52 baseline controls, 32 additional units, 814 base-owned surfaces × 3 contexts, and 26 externally reported sentence contexts. The gate passes with no unit-prosody changes.
Help/learn/Two/with/Production retain correct base readings; let’s uses レッツ. Unreviewed model/welcome/directly/reset/deadline and the new interior-shift examples fall back to the base, sometimes letter spelling. Coverage is deliberately smaller. The former “290 common words passed” wording was incorrect: most were coverage records, not correctness assertions. That claim and the old 125,306-row release candidate are retired.
Context-reading quality remains blocked
Use the existing pyopenjtalk-plus 0.4.1.post9 API and unchanged tsqyomi v5 weights, pinned to model revision
81add61ddba9669d328e307c883d05d77d60f5f4. CPU/local-only loading, three fixed model-file hashes, upstream Aivis MIT attribution, shared plain/prosody selection and native audio-cache identity remain.ENABLE_JAPANESE_CONTEXT_READING now defaults false, including with the model installed. Settings/docs identify known regressions and hundreds of MiB of additional process memory, varying with runtime/workload. The external audit confirmed a different measurement baseline; its earlier range is not directly comparable.
The original 88 curated cases did not generalize. Four complete source sentences now extend the strict gate to 92 targets: base 72/92, model 89/92, three failures and two lost base-correct readings. The native quality command exits nonzero; no failure allowlist or runtime four-word blacklist is added.
The model is not fixed by changing the default. Independent lexical/listening acceptance remains blocked. Model-free CI tests do not certify these weights.
Validation on this revision
The audited code/data head
6e7c9f8af5497f2a342405a4f356b84354d1775bpassed all 18 CI checks. Accepted head:de2b5f4a8bbc3b5ee1ff15e7724cca79300dd6d1; all 18 CI checks passed before normal squash merge. Its committed file tree is identical to documentation/settings-copy revision0d223162b0476b9c455ead69b9058310133f9dc8. The following code/data checks were run on the audited code/data revision; the copy follow-up additionally passed 19 configuration tests, 9 Electron settings tests and the full Electron build.npm run buildpassed..envand unrelated edits preserved by hash checks.Offline reproduction:
Local unpublished dictionary ZIP:
amadeus-japanese-pronunciation-2026.10.20.3.zip, 94,135 bytes, SHA-256eb347fa68545056eac8ab9ff7473bfd11c4d1e02e673e64dc5663e574e53ed8c; CSV SHA-2561becb4959ecaba39ed3886b2bdefb1805cd89210d6c38617de0f0b6b3096571d.Unchanged local model ZIP:
amadeus-japanese-context-reading-2026.10.20.1.zip, SHA-256d7dc9a0145b99918bb247fe7f73e2c9646e11d48027843d06f5cb376597f2395.Follow-up external audit
A further model-based external audit on 6e7c9f8 found no additional code or dictionary-data defect, independently checked all 129 row readings and production-context selection, and confirmed installed context weights remain disabled by default. This is additional model evidence, not human/native-speaker sign-off. It corrected the earlier 玉は5個 probe and recognized that 中立派 is already wrong in the base frontend. Two actual model regressions remain.
The copy follow-up removes the incomparable memory range from the settings card and explicitly documents that an existing legacy CSV is loaded as supplied when the official pack is absent; the official checked-reading ledger does not filter that local source. Installing the official pack replaces its role; disabling the dictionary switch uses the base dictionary. Historical source-recipe JSON remains research evidence for future checked-ledger expansion. Runtime behavior, dictionary data and local resource archives are unchanged.
Code acceptance and resource limitations
The maintainer/user has delegated final technical acceptance and authorized normal merge after checks. Technical acceptance found no new code or lexical-data blocker on the exact head
de2b5f4a8bbc3b5ee1ff15e7724cca79300dd6d1. The integration is accepted within its documented optional-install/default-off boundaries. Human lexical/accent/perceptual listening sign-off (including provisional proposer accent) has not been performed; the context weights still fail their documented quality targets. These remain explicit resource-quality limitations, not claimed passing results. The author has chosen to retain the documented default-off context-reading experiment in this PR. The maintainer/user explicitly retained this scope and authorized technical acceptance/merge. GitHub merge policy remains in force; no self-approval is represented as independent review. Its known quality failures stay visible; model-free CI does not certify the weights, and accepting the integration does not authorize model-resource publication. A local upstream report draft was expanded with directly verified shifted rows; a separate model regression draft has a clean native reproduction. Neither was posted. No model weights, voice/recordings, resource ZIPs or unrelated working-tree changes are committed. No dictionary/model resource archive has been published. The code PR was normally squash-merged after all 18 exact-head CI checks passed, at commit02f485ab7ea4119beac19241831356912d709287.Final delegated technical acceptance, 2026-10-20
Exact head:
de2b5f4a8bbc3b5ee1ff15e7724cca79300dd6d1, synchronized with merged #243. Reused a clean attached worktree at this exact commit to exclude unrelated working-tree changes.Acceptance decision: suitable for code integration under the documented optional boundaries, after all 18 exact-head CI checks passed and the normal repository merge endpoint accepted the request. This decision does not approve or publish dictionary/model resource releases, remove the known model failures, or fabricate independent human listening sign-off.
Final result: normally squash-merged into main as
02f485ab7ea4119beac19241831356912d709287on 2026-10-20. The clean source boundary check passed with 4,152 selected / 127 excluded paths and zero errors or warnings. Repository protection settings were unchanged. No independent reviewer approval or human listening sign-off is fabricated.The proposer English phonemes were additionally checked against Cambridge pronunciation; this supports the lexical review only, not a Japanese pitch-accent certification.