Hermes Agent
ab13edf1ab
feat(hermes-tts): multilingual Piper voice policy (en=amy, ru=irina, es=claude)
...
Supersedes draft PR #24 (hermes/tts-voice-hfc-female): Brad changed the
decision after that task landed, so this starts fresh from origin/main
instead of building on it.
Bakes three checksum-pinned Piper voices (en_US-amy-medium,
ru_RU-irina-medium, es_MX-claude-high) alongside the existing lessac set,
and adds deterministic, allow-listed language routing to
hermes-jetson-tts-server.py: an explicit request "language" field maps
through a fixed dict to one of the three baked voices, with unknown,
missing, or malformed input always falling back to English amy. A
client-supplied "voice" field is never read, so no client input can reach
a filesystem path. All three voices are eagerly preloaded at process
start (measured ~243MB RSS for three vs. ~88MB for one).
The WebUI has no signal for the language of the text it is about to
speak (verified: hermes-webui-atlas-voice.js sends only text and engine),
so no client- or server-side language detection is added; this gap is
documented in NOTES.md and the PR description rather than papered over.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 05:21:42 +00:00
..
2026-08-17 17:27:11 +00:00
2026-08-18 06:28:18 -03:00
2026-08-16 05:13:20 -03:00
2026-08-18 00:42:53 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 15:33:56 +00:00
2026-08-17 15:33:56 +00:00
2026-08-17 15:33:56 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:29:29 +00:00
2026-08-17 07:58:44 -03:00
2026-08-17 16:29:29 +00:00
2026-08-17 16:31:15 +00:00
2026-08-21 05:21:42 +00:00
2026-08-17 07:58:44 -03:00
2026-08-20 18:14:55 +00:00
2026-08-17 14:39:21 +00:00
2026-08-17 16:29:29 +00:00
2026-08-15 22:15:40 -03:00
2026-08-18 01:43:39 -03:00
2026-08-18 02:00:19 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 07:19:10 -03:00
2026-08-18 01:43:39 -03:00
2026-08-18 02:00:19 -03:00
2026-08-18 01:43:39 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 15:03:59 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 15:03:59 -03:00
2026-08-17 20:31:12 -03:00
2026-08-18 01:18:06 -03:00
2026-08-17 20:31:12 -03:00
2026-08-17 07:19:10 -03:00
2026-08-18 00:57:54 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 15:03:59 -03:00
2026-08-17 07:19:10 -03:00
2026-08-18 01:43:39 -03:00
2026-08-17 20:31:12 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 08:16:35 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 20:46:00 -03:00
2026-08-17 20:31:12 -03:00
2026-08-18 01:43:39 -03:00
2026-08-17 15:03:59 -03:00
2026-08-17 15:03:59 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 17:27:11 +00:00
2026-08-17 17:27:11 +00:00
2026-08-17 17:27:11 +00:00
2026-08-18 01:18:06 -03:00
2026-08-17 17:27:11 +00:00
2026-08-17 20:46:00 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 07:19:10 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 16:29:29 +00:00
2026-08-17 07:58:44 -03:00
2026-08-17 15:15:35 -03:00
2026-08-17 20:37:30 -03:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-18 02:00:19 -03:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 16:31:15 +00:00
2026-08-17 15:15:47 -03:00
2026-08-17 15:15:35 -03:00
2026-08-17 15:15:35 -03:00
2026-08-18 18:21:38 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 16:31:15 +00:00
2026-08-17 07:58:44 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 13:11:34 +00:00
2026-08-18 18:21:38 -03:00
2026-08-17 13:11:34 +00:00
2026-08-17 16:24:37 +00:00
2026-08-18 16:28:25 -03:00
2026-08-18 18:21:38 -03:00
2026-08-17 13:11:34 +00:00
2026-08-17 13:11:34 +00:00
2026-08-17 16:24:37 +00:00
2026-08-18 18:21:38 -03:00
2026-08-17 13:11:34 +00:00
2026-08-18 18:21:38 -03:00
2026-08-17 16:24:37 +00:00
2026-08-17 13:11:34 +00:00
2026-08-17 16:24:37 +00:00
2026-08-17 08:25:52 -03:00
2026-08-17 15:10:17 -03:00
2026-08-17 08:25:52 -03:00
2026-08-17 08:25:52 -03:00
2026-08-17 08:25:52 -03:00
2026-08-17 21:07:06 -03:00
2026-08-17 08:25:52 -03:00
2026-08-16 04:49:02 -03:00
2026-08-18 06:51:36 -03:00
2026-08-18 06:51:36 -03:00
2026-08-15 03:44:00 -03:00
2026-08-11 23:12:43 -03:00
2026-08-17 07:58:44 -03:00
2026-08-18 16:28:25 -03:00
2026-08-17 16:31:15 +00:00
2026-08-17 07:58:44 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 20:37:30 -03:00
2026-08-17 07:58:44 -03:00
2026-08-18 16:28:25 -03:00
2026-08-17 20:37:30 -03:00
2026-08-17 15:15:47 -03:00
2026-08-17 15:15:47 -03:00
2026-08-18 02:00:19 -03:00
2026-08-18 02:00:19 -03:00
2026-08-18 02:00:19 -03:00
2026-08-17 15:15:35 -03:00
2026-08-17 07:58:44 -03:00
2026-08-17 15:15:47 -03:00
2026-08-17 15:15:35 -03:00
2026-08-17 15:15:47 -03:00
2026-08-17 15:15:47 -03:00
2026-08-18 02:00:19 -03:00
2026-08-17 07:58:44 -03:00
2026-08-15 00:34:08 -03:00
2026-08-21 05:21:42 +00:00
2026-08-20 23:13:51 +00:00
2026-08-17 07:19:10 -03:00
2026-08-09 14:38:51 -03:00
2026-04-21 11:39:13 -03:00
2026-08-05 16:21:36 -03:00
2026-08-05 16:21:36 -03:00
2026-08-18 06:28:18 -03:00
2026-08-18 06:28:18 -03:00
2026-04-20 15:29:46 -03:00
2026-08-17 15:10:17 -03:00
2026-08-17 15:10:17 -03:00
2026-08-05 16:21:36 -03:00
2026-08-18 06:28:18 -03:00
2026-08-05 16:21:36 -03:00