feat(fillers): Beruhigungssätze auch im Geräte-TTS-Modus sprechen
Bisher wurde der Filler im "Im Gerät"-Modus (Web Speech API) nur angezeigt,
aber nicht gesprochen (Server-Audio ist dort aus). Jetzt eigener Kanal:
- Orchestrator: chat_stream bekommt on_filler; _emit_filler bevorzugt den
dedizierten Filler-Kanal (sonst Fallback on_token). Ephemer wie bisher.
- ws.py: on_filler -> {type:"filler", text}.
- Frontend (app.js): {type:"filler"} -> transient in der STATUS-Zeile (nicht
in der Antwort-Bubble) und im Geräte-Modus sofort speechSynthesis.speak()
OHNE cancel (mehrere Filler -> Queue; die Antwort cancelt spaeter und
uebernimmt). Abgesichert ueber deviceVoicesReady()/deviceVoiceReady(lang) —
keine Verschaerfung der bekannten deviceVoiceReady-Regression.
Server-TTS-Modus unveraendert (Filler zusaetzlich als "Satz null" gesprochen),
zeigt den Filler nun ebenfalls in der Status-Zeile statt in der Bubble.
Tests: 312 gruen; JS-Syntax geprueft. Doc §5.4.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6cd6e783aa
commit
fdf65e8623
4 changed files with 36 additions and 7 deletions
|
|
@ -102,10 +102,17 @@ Fallback Englisch.
|
|||
`FILLER_PATIENCE_INTERVAL` Sekunden einen zufälligen PATIENCE-Satz nachschiebt; er
|
||||
wird beim ersten Antwort-Delta (Antwort beginnt) und im `finally` abgeräumt.
|
||||
|
||||
**Ephemeralität (Invariante):** Filler laufen über den Callback, nicht über den
|
||||
Delta-Stream — sie landen **nicht** in `trace.semantic_response` und **nicht** im
|
||||
gespeicherten History-Turn. Server-TTS ist verdrahtet; **„Im Gerät" ist Fast-follow**
|
||||
(eigener Event-Typ → Browser-`speak()`, Gesten-/Voices-Absicherung).
|
||||
**Ephemeralität (Invariante):** Filler laufen über den `on_filler`-Callback, nicht
|
||||
über den Delta-Stream — sie landen **nicht** in `trace.semantic_response` und
|
||||
**nicht** im gespeicherten History-Turn.
|
||||
|
||||
**Kanal:** Der Orchestrator emittiert Filler über `on_filler`; die WS-Schicht sendet
|
||||
`{type:"filler", text}`. Das Frontend zeigt ihn **transient in der Status-Zeile**
|
||||
(nicht in der Antwort-Bubble) und spricht ihn im **Geräte-TTS-Modus** sofort per
|
||||
`speechSynthesis.speak()` **ohne `cancel`** (mehrere Filler laufen in die Queue; die
|
||||
Antwort `cancelt` später und übernimmt) — abgesichert über `deviceVoicesReady()`/
|
||||
`deviceVoiceReady(lang)` (keine Verschärfung der bekannten Regression). Im Server-TTS-
|
||||
Modus wird der Filler zusätzlich als „Satz null" über die Chunk-Queue gesprochen.
|
||||
|
||||
### 5.5 Konfiguration & Opt-out
|
||||
`web_search_enabled: bool = True` — **global an per Default**, pro Nutzer/Profil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue