WIP: Prepare fixed multilingual Piper voices without deployment activation (supersedes #26) #39
Closed
hermes-automation
wants to merge 1 commits from
hermes/tts-voice-multilingual-prerequisite into main
pull from: hermes/tts-voice-multilingual-prerequisite
merge into: titan:main
titan:main
titan:feature/hermes-agent-build-mirrors
titan:feature/hermes-agent-multiarch
titan:feature/hermes-next-hux
titan:feature/hermes-hux-contracts
titan:feature/t_39cf1905-webui-build-token
titan:feature/t_26da4c88-titan-capacity-guardrails-v4
titan:feature/t_26da4c88-titan-capacity-guardrails-v3
titan:feature/t_26da4c88-titan-capacity-guardrails-v2
titan:feature/t_26da4c88-titan-capacity-guardrails
titan:fix/t_39cf1905-jenkins-controller-priority
titan:feature/t_8cbe6a55-hermes-webui-release-v2
titan:feature/t_8cbe6a55-hermes-webui-release
titan:feature/hermes-domain-rename-agent-worker-v2
titan:hermes/t_65356568-multiuser-capacity-assessment
titan:fix/cli-auto-failover-effort
titan:feature/hermes-pr44-after-pr43
titan:fix/hermes-heartbeat-dead-reclaim-replacement
titan:handoff/t_1a2c627b
titan:feature/hermes-combined-multilingual-voice-v2
titan:fix/hermes-handsfree-stt-webm
titan:fix/hermes-restore-legacy-chat-triage-hosts-v2
titan:feature/hermes-domain-rename-agent-worker-bstein
titan:fix/hermes-restore-legacy-chat-triage-hosts-v3
titan:fix/hermes-restore-legacy-chat-triage-hosts
titan:fix/hermes-oidc-ensure-rerun-hostname-rollout
titan:feature/hermes-direct-cli-lane-concurrency-2-replacement
titan:feature/hermes-domain-rename-chat-bstein-triage
titan:feature/hermes-kanban-profile-concurrency-2
titan:feature/hermes-zombie-lane-heartbeat-reclaim
titan:hermes/repair-pr26-voice-split
titan:feature/hermes-durable-two-worker-cli-concurrency
titan:hermes/chat-voice-conversation-instrument
titan:feature/hermes-domain-rename-chat-triage
titan:hermes/voice-stt-tts-language-routing
titan:hermes/voice-stt-language-routing
titan:hermes/tts-voice-multilingual
titan:fix/hermes-chat-session-continuity-contract
titan:hermes/tts-voice-hfc-female
titan:hermes/fix-grafana-no-data-vm-storage
titan:feature/ci-gitops
titan:fix/jenkins-quality-gate-discovery
titan:feature/hermes-inpod-supervisor
titan:feature/hermes-chat-smoothness
titan:wt/t_1e95ea6d
titan:feature/hermes-full-handoff-acceptance
titan:feature/hermes-distributed-worker-pool
titan:feature/hermes-review-goal-semantics
titan:feature/hermes-cli-auto-quota-routing
titan:fix/hermes-result-decomposition-reliability
titan:feature/hermes-safe-gitea-pr-client
titan:feature/hermes-unprivileged-image-builder
titan:feature/hermes-cli-process-reaping
titan:feature/hermes-three-lane-placement
titan:wt/t_cca008de
titan:codex/cassandra-generator-08105
titan:cassandra-0851-rollout
titan:cassandra-0821-deploy
titan:codex/testing-dashboard-health-20260604
titan:feature/ariadne
titan:feature/pi-usb-scratch-rollout
titan:feature/sso-hardening
titan:codex/titan-iac-work-quality-gate
titan:codex/titan-iac-main-platform-metrics
titan:codex/titan-iac-platform-metrics
titan:feature/atlas-jobs-schedule-observability
titan:lane2/jenkins-cleanup-activate
titan:lane2/jenkins-cleanup-wiring-split
titan:codex-ananke-fixes
titan:feature/atlasbot-ananke-recovery
titan:feature/atlasbot
titan:deploy
titan:feature/vault-consumption
titan:feature/postgres-migration
titan:feature/bstein-dev-home
titan:feature/mailu
titan:feature/sso
titan:feature/atlas-monitoring
titan:restructure/hybrid-clusters
titan:fea/titan24-gpu
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "hermes/tts-voice-multilingual-prerequisite"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Multilingual Piper prerequisite (supersedes PR #26; deployment activation intentionally split)
This draft supersedes unmerged PR #26. PR #26 cannot be repaired in place and
Brad will close it unmerged. This successor is one clean commit on current
mainbasee3de466ad1a267c01aaf2ea58f49743861f458e2.Scope
This PR prepares the next
hermes-ttsimage for server-side multilingualPiper routing without activating that image in the live deployment:
existing lessac assets and loads all pinned models during the image build;
languageallow-list to English amy, Russianirina, or Spanish claude, with missing/unknown/malformed values falling back
to amy;
patch removes the actual settings selector, label/description translations,
browser/server preference persistence, and legacy browser preference;
voicefrom normal, auto-read, extension, and hands-free TTSrequests while retaining the server-side defense that ignores any hostile or
legacy
voicefield;Mode, and the conversation instrument;
baked asset is missing;
language-routing plus final-patched-artifact coverage.
Users choose no voice. The Piper server maps only validated language to fixed
local voices:
en-> amy,ru-> irina,es-> claude, with amy as thefallback.
services/hermes/voice-deployment.yamlhas zero delta frommainin thisPR. It therefore retains all four currently deployed values together:
registry.bstein.dev/bstein/hermes-jetson-tts@sha256:5cb9e57faab46365bff606c559af57b9505892be2909aea1ac523568d478b2ccHERMES_TTS_VOICE=en_US-lessac-mediumai.bstein.dev/model=piper-en-us-lessac-medium512MiThat is deliberate. Flux tracks
main, so merging this prerequisite alone isa no-op for the
hermes-ttspod template. The old digest continues running theold lessac-compatible server. The new server's rejection of lessac remains
latent in source until an image built from merged
mainis activated.The image/server
DEFAULT_VOICE_NAMEremainsen_US-amy-medium. Amy is thefixed English fallback and a member of the new server's three-name baked
allow-list; lessac is intentionally not in that allow-list. Changing the new
server default back to lessac would make the newly built image internally
invalid, while it would not improve live safety because this PR does not change
the live digest or environment.
Required post-merge activation sequence
Dockerfile.hermes-jetson-ttsfrom the resulting mergedmaincommitand record the immutable image digest.
HERMES_TTS_VOICEtoen_US-amy-medium, the multilingual model annotation,and the memory request to
768Mitogether.change and verify startup/health.
Do not deploy the new image first under the old lessac environment, and do not
land the amy environment before the new digest. Either partial ordering is
incompatible; the four activation values must move together.
The activation follow-up is intentionally not opened here. It depends on Brad
merging this PR first and on the image being built from merged
main.Verification
54 passed.5 passed.7fb557710e89405372a36e5b38a7f00d72f1b080:2663 passed, 4 failed, 4 skipped.origin/main(e3de466ad1a267c01aaf2ea58f49743861f458e2)baseline:
2620 passed, 4 failed, 4 skipped.the candidate adds 43 passing tests and no new pytest failure.
findings (two UP041 in
scm_broker.py, one B905 intest_hermes_image_builder_fresh_review.py); the candidate-touched Ruffsubset passes.
WebUI revision
7a94e34a6d639576576baa9131acf6765f6d2b98; the final patched DOM/staticsources contain no voice selector/persisted preference/request field, while
hands-free Voice Mode and the conversation instrument remain.
kustomize build services/hermes, Python compilation, andgit diff --checkpass.
hermes-ttspod template is byte-identical to pristine currentmain, with matching SHA-256
9571aa126f71a2f5e5303629aef57b57abb2bf8de9903b6a2929729bb781654b.The four pre-existing failures are:
testing/tests/test_hermes_agent_layout.py::test_cli_lane_reserves_cpu_headroom_for_ui_and_authtesting/tests/test_hermes_agent_layout.py::test_agent_avoids_unhealthy_nodes_and_fits_its_remaining_capacitytesting/tests/test_hermes_gitea_pr_integration.py::test_http_error_path_redacts_tokentesting/tests/test_hermes_kanban_supervisor.py::test_auto_supervise_flag_defaults_false_in_configmapFiles changed
dockerfiles/Dockerfile.hermes-jetson-ttsdockerfiles/hermes-jetson-tts-server.pydockerfiles/hermes-webui-atlas-patch.pyservices/hermes/NOTES.mdtesting/fixtures/hermes-webui-0.52.181/api/config.pytesting/fixtures/hermes-webui-0.52.181/static/boot.jstesting/fixtures/hermes-webui-0.52.181/static/i18n.jstesting/fixtures/hermes-webui-0.52.181/static/index.htmltesting/fixtures/hermes-webui-0.52.181/static/panels.jstesting/fixtures/hermes-webui-0.52.181/static/ui.jstesting/tests/test_hermes_chat_quality.pytesting/tests/test_hermes_tts_language_routing.pytesting/tests/test_hermes_voice_instrument.pyPull request closed