fix(tts): voice_gender im UserPrefs-Schema -> Stimmwahl wirkt endlich

Eigentliche Ursache für 'immer weibliche Stimme, egal welcher Provider':
UserPrefs kannte kein Feld voice_gender, daher verwarf pydantic in
PUT /api/me/prefs die Geschlechtswahl still. resolve_route sah immer 'any'
-> Piper/Cartesia lieferten die weibliche Stimme (kerstin bzw. Alina).

- voice_gender zum Schema hinzugefügt; Frontend sendet es bereits, resolve_route
  liest es bereits (ROUTE_KEYS), voice_for_route mappt m/f bereits.
- Regressions-Test: voice_gender persistiert über /api/me/prefs.
- Docs/stimmen-inventar.md: zentrale Übersicht aller Stimmen je Provider/
  Sprache/Geschlecht (Name, Datei, UUID) inkl. Fundstellen im Code.

Live verifiziert (Profil jamulix, de): m -> de_DE-thorsten-high,
f -> de_DE-kerstin-low.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-27 03:13:27 +02:00
commit 6bf281fc30
3 changed files with 123 additions and 0 deletions

View file

@ -95,6 +95,7 @@ class UserPrefs(BaseModel):
llm_provider: str | None = None
tts_provider: str | None = None
language: str | None = None
voice_gender: str | None = None # "m" | "f" | "any" — sonst verwirft pydantic die Stimmwahl
class MemoryCreate(BaseModel):