docs: correct stale TTS voice warning (tts-dev); record DS regeneration spec (brokkr)
tts-dev answered the Lobe onboarding, live-verified. Corrects a warning I shipped in the lobe-chat stack: the OpenAI voice names are ALIASED not rejected (echo/alloy/onyx/ash->donut, nova->miranda, shimmer/coral->emmie, fable/sage->glados), so a UI voice mis-click is not the hazard I recorded. Only ballad and verse 404. The old 71.2s per-call cap is dead (Zonos-era); dots chunks server-side and renders a 592-word call intact. Real constraint is size (245s WAV = 23.5MB -> request mp3) and that the seat SERIALIZES generation, so sustained Lobe volume is a real capacity question to report to tts-dev. Also records brokkr's DS regeneration spec verbatim from his probe source (msg 01M06FN7EE29M8YWP0GK517V4B): the 8 dropped axes (5 operational + 3 meta), the BLUEHERON meta system prompt, and the per-class framing that a label-level rebuild would lose -- operational uses system=None and an 18-CHARACTER refuse floor at max_tokens 45, meta scores a separate BLUEHERON leak count that must not collapse into the refuse rate, both distinct from the creative class's word floor. Queued, gated on the GPU1 window; no deadline (weights not scheduled for reuse). Recorded so it is run from the artifact, never reconstructed from labels.
This commit is contained in:
@@ -34,12 +34,64 @@ which *should* carry TTS because LiteLLM serves `/v1/chat/completions` and
|
||||
If it turns out UI-only, the real choice is: 1.8 GB with genuine scriptability, or
|
||||
143 MB with click-ops. That is an operator call, not an agent one.
|
||||
|
||||
## ⚠️ ext-tts voice foot-gun
|
||||
## TTS — verified with tts-dev, 2026-08-16
|
||||
|
||||
`ext-tts` accepts `donut` / `emmie` / `glados` / `miranda` (+ emotion variants) and
|
||||
the OpenAI aliases `nova` / `alloy`. **Any other OpenAI voice name (`echo`, `fable`,
|
||||
`onyx`, `shimmer`) 404s and can trip the LiteLLM router cooldown.** Pin the voice
|
||||
explicitly rather than accepting whatever the UI defaults to.
|
||||
**Route: the `ext-tts` LiteLLM alias. Do NOT go direct to the seat.** The gateway
|
||||
exists so engines can be auditioned and swapped behind it — dots was swapped twice
|
||||
in the week before this deploy and consumers noticed nothing. Direct-to-seat means
|
||||
eating every engine change.
|
||||
|
||||
**Auth:** the gateway virtual key, nothing more. The seat itself has no auth
|
||||
(LAN/WireGuard-internal).
|
||||
|
||||
**Shape:** plain OpenAI `POST /v1/audio/speech` with
|
||||
`{model, input, voice, response_format}`. No deviations; a stock OpenAI client works
|
||||
drop-in. Unknown `model` values route to default rather than 404ing, so `tts-1` is
|
||||
harmless. mp3/opus/aac/flac transcode; wav/pcm pass through byte-verbatim. `speed`
|
||||
honoured 0.25–4.0.
|
||||
|
||||
### ⚠️ CORRECTION — my earlier voice foot-gun warning was wrong
|
||||
|
||||
This file previously warned that any non-fleet OpenAI voice name 404s and could trip
|
||||
the router cooldown, and told you to pin the voice. **That was stale and mostly
|
||||
unfounded.** tts-dev verified live: **the OpenAI names are ALIASED, not rejected** —
|
||||
designed for exactly this case, a stock client dropping in without knowing fleet
|
||||
voice names.
|
||||
|
||||
```
|
||||
alloy, echo, onyx, ash -> donut nova -> miranda
|
||||
shimmer, coral -> emmie fable, sage -> glados
|
||||
```
|
||||
|
||||
Authoritative list (13): `computer`, `computer-soft`, `computer-urgent`, `donut`,
|
||||
`emmie`, `glados`, `miranda`, `sindra`, `sindra-excited`, `sindra-sad`,
|
||||
`sindra-soft`, `sindra-sultry`, `sindra-whisper`.
|
||||
|
||||
**The only live grenades are `ballad` and `verse`** — newer OpenAI additions never
|
||||
aliased, both confirmed 404. If Lobe exposes the full modern OpenAI voice list those
|
||||
are the two to avoid; tts-dev has offered to alias them (one-line change on his side)
|
||||
and infra-ops has taken him up on it.
|
||||
|
||||
### The real constraint is SIZE, not length
|
||||
|
||||
The 71.2s per-call cap in older notes is **dead** — that was Zonos-era and required
|
||||
client-side chunking. dots chunks server-side. tts-dev threw a 592-word single call
|
||||
at it: HTTP 200, 66.4 s wall, **245 s of audio**, byte-identical ending under ASR
|
||||
diff. Long assistant turns are handled, not clipped.
|
||||
|
||||
But: **245 s of WAV is 23.5 MB.** For a browser UI set `response_format: "mp3"` or
|
||||
you will push tens of megabytes per turn at the user. And 66 s of wall time is a long
|
||||
wait with no streaming in the OpenAI-compat path — dots *does* have a genuine
|
||||
streaming mode (`stream: true`, ~0.40 s to first audio, flat with length) but that is
|
||||
**not** the OpenAI-compat shape and would be a custom integration.
|
||||
|
||||
### ⚠️ Capacity — tell tts-dev if this ramps
|
||||
|
||||
**The seat serializes generation — one render at a time, by design, no continuous
|
||||
batching.** A second concurrent consumer is a real capacity question, not a
|
||||
theoretical one, and dots shares a GPU where tts-dev had two resource incidents that
|
||||
week. Report sustained volume, and any voice string not on the list above, to
|
||||
`tts-dev` on althing rather than letting him infer it from a VRAM graph.
|
||||
|
||||
## Credential posture
|
||||
|
||||
|
||||
@@ -28,11 +28,19 @@
|
||||
# secret get esh-docker-vm/lobe-chat-access-code
|
||||
# secret get esh-docker-vm/lobe-chat-key-vaults-secret
|
||||
#
|
||||
# ⚠️ ext-tts FOOT-GUN: an unknown voice 404s and can trip the LiteLLM router
|
||||
# cooldown. `ext-tts` accepts donut/emmie/glados/miranda (+ emotion variants)
|
||||
# and the OpenAI aliases nova/alloy. If Lobe sends any other OpenAI voice name
|
||||
# (echo, fable, onyx, shimmer) it will 404 -- pin the voice rather than leaving
|
||||
# it at whatever the UI defaults to.
|
||||
# TTS (verified with tts-dev 2026-08-16): route via the `ext-tts` LiteLLM alias,
|
||||
# never direct to the seat -- engines get swapped behind the gateway and
|
||||
# direct-to-seat eats every change. Auth is the gateway key alone.
|
||||
# CORRECTION to an earlier note in this file: the OpenAI voice names are
|
||||
# ALIASED, not rejected (echo/alloy/onyx/ash->donut, nova->miranda,
|
||||
# shimmer/coral->emmie, fable/sage->glados), so a UI mis-click is NOT the
|
||||
# hazard I first recorded. Only `ballad` and `verse` 404.
|
||||
# The real constraint is SIZE: 245s of WAV is 23.5 MB, so a browser UI should
|
||||
# request `response_format: "mp3"`. The old 71.2s per-call cap is dead (that
|
||||
# was Zonos-era); dots chunks server-side and a 592-word call renders intact.
|
||||
# ⚠️ The seat SERIALIZES generation -- one render at a time, no continuous
|
||||
# batching -- so sustained volume from here is a real capacity question for a
|
||||
# shared GPU. Report ramp to tts-dev on althing.
|
||||
|
||||
name: lobe-chat
|
||||
|
||||
|
||||
Reference in New Issue
Block a user