WIP: Hermes: combine multilingual Piper with Whisper language routing #44

Closed
hermes-automation wants to merge 2 commits from feature/hermes-combined-multilingual-voice-v2 into main

Supersedes PR #26, PR #27, and PR #39.

Brad, please close all three superseded PRs (#26, #27, and #39) and use this combined draft as the single review-and-merge surface.

Combined scope

  • Reuses verified PR #39 head 7fb557710e for the pinned Amy, Irina, and Claude Piper models, server-side mapping/security, no-voice-selector policy, and deployment-safe split.
  • Ports original #27 commit 876b3dbee3 forward so private Whisper language is carried through the local STT sidecar and WebUI boundary to the one TTS response for that spoken turn.
  • Reuses only the strict trust-boundary improvement from 207c16ab: only exact en/ru/es is forwarded; absent or malformed language is omitted and Piper defaults to Amy. Its user-visible selector and broader conversation-language design are intentionally excluded.

Locked policy

  • No user-visible TTS voice selector.
  • No client-side voice field in any request body.
  • Server mapping only: English to Amy, Russian to Irina, Spanish to Claude; unknown, absent, or malformed input to Amy.
  • Hostile or stray client voice values are ignored and covered by regression tests.

Verification

  • Exact base: 5f9c600f6e
  • Exact head: 6f1b0065f1
  • Focused combined voice suite: 152 passed.
  • Full branch suite: 8 failed, 2692 passed, 6 skipped.
  • Pristine current-main suite: the same 8 failed, 2556 passed, 6 skipped. All eight failure IDs reproduce on main; this branch adds no failure or skip.
  • kubectl kustomize hermes-tts Deployment diff: empty.
  • kubectl kustomize hermes-tts pod-template diff: empty; both SHA-256 9571aa126f71a2f5e5303629aef57b57abb2bf8de9903b6a2929729bb781654b.
  • services/hermes/voice-deployment.yaml is unchanged and no image digest is bumped.

PR #43 remains separate and unmerged; this change does not reimplement or revert its WebM/EBML repair.

After review, this PR needs one merge. Atomic TTS image activation remains a separate later PR.

Supersedes PR #26, PR #27, and PR #39. Brad, please close all three superseded PRs (#26, #27, and #39) and use this combined draft as the single review-and-merge surface. ## Combined scope - Reuses verified PR #39 head 7fb557710e89405372a36e5b38a7f00d72f1b080 for the pinned Amy, Irina, and Claude Piper models, server-side mapping/security, no-voice-selector policy, and deployment-safe split. - Ports original #27 commit 876b3dbee3cce3caa87f036181a367f88932d334 forward so private Whisper language is carried through the local STT sidecar and WebUI boundary to the one TTS response for that spoken turn. - Reuses only the strict trust-boundary improvement from 207c16ab: only exact en/ru/es is forwarded; absent or malformed language is omitted and Piper defaults to Amy. Its user-visible selector and broader conversation-language design are intentionally excluded. ## Locked policy - No user-visible TTS voice selector. - No client-side voice field in any request body. - Server mapping only: English to Amy, Russian to Irina, Spanish to Claude; unknown, absent, or malformed input to Amy. - Hostile or stray client voice values are ignored and covered by regression tests. ## Verification - Exact base: 5f9c600f6e7dea25f4e9468bdb03045f2736b9d6 - Exact head: 6f1b0065f1089673281299f5f3f1b10c9389a17b - Focused combined voice suite: 152 passed. - Full branch suite: 8 failed, 2692 passed, 6 skipped. - Pristine current-main suite: the same 8 failed, 2556 passed, 6 skipped. All eight failure IDs reproduce on main; this branch adds no failure or skip. - kubectl kustomize hermes-tts Deployment diff: empty. - kubectl kustomize hermes-tts pod-template diff: empty; both SHA-256 9571aa126f71a2f5e5303629aef57b57abb2bf8de9903b6a2929729bb781654b. - services/hermes/voice-deployment.yaml is unchanged and no image digest is bumped. PR #43 remains separate and unmerged; this change does not reimplement or revert its WebM/EBML repair. After review, this PR needs one merge. Atomic TTS image activation remains a separate later PR.
hermes-automation added 2 commits 2026-08-21 12:01:04 +00:00
Supersede draft PR #26 with a merge-safe prerequisite: bake and preload the amy, irina, and claude Piper models, route only validated server-side language to fixed voices, and leave the live voice deployment manifest unchanged.

Remove the pinned WebUI speaker selector and its persisted preference, omit client voice fields from every outbound TTS path, and keep hands-free Voice Mode and the conversation instrument intact. Hostile or legacy voice fields remain ignored by the Piper server.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Port the original #27 detected-language pipeline onto the verified PR #39 prerequisite while preserving the current-main conversation instrument and host continuity changes.

Keep voice selection server-side with no user selector or client voice field. Reuse 207c16ab only for its stricter exact-code trust boundary, omitting malformed or absent language so Piper defaults to Amy.
bstein closed this pull request 2026-08-22 20:21:54 +00:00

Pull request closed

Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: titan/atlas-iac#44
No description provided.