feat(fillers): zufällige, übersetzte Senioren-Beruhigungssätze + Geduld-Schleife
Ersetzt die statischen 3-Satz-Filler durch einen kreativen, weniger roboterhaften Mechanismus für schnelles Feedback waehrend der Web-Suche. - app/pipeline/fillers.py: EINZIGE Pflege-Stelle. Englische Master-Listen (12 OPENING + 16 PATIENCE). Zur Laufzeit einmal je Sprache uebersetzt und gecacht (durchgaengig hoefliche Anrede "Sie"/"vous"/"usted"...), Fallback Englisch. Zufaellige Auswahl statt fester Reihenfolge. - Geduld-Schleife: bei laengerer Recherche schiebt ein Hintergrund-Task alle FILLER_PATIENCE_INTERVAL Sekunden einen zufaelligen PATIENCE-Satz nach; Abbruch beim ersten Antwort-Delta und im finally (keine verwaisten Tasks). - Ephemer wie bisher: laeuft ueber on_token/_dispatch, nie in semantic_response/History. - Standardsprache wird beim Start vorgewaermt (warmup.py) -> erster Such-Turn ohne Uebersetzungs-Latenz. dependencies: get_fillers()-Singleton. Doc: Docs/weg2-tool-calling.md §5.4. Tests: 290 gruen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
c36b884aab
commit
96dcd87ca8
5 changed files with 237 additions and 41 deletions
|
|
@ -85,14 +85,27 @@ selbstständig („hij" → „Rutger Hauer"). **Gegated**: nur bei kurzer Folge
|
|||
|
||||
### 5.4 Filler / Beruhigung
|
||||
`stream()` erhält einen `on_tool_start(language)`-Callback. Der Orchestrator
|
||||
verdrahtet ihn auf: lokalisierten Satz (rotierender Pool je Sprache, Muster wie
|
||||
die `_NOTICE`-Dicts) → `spoken_adapter`/`tts_normalizer`/`tts` → `on_audio` **und**
|
||||
`on_token`. **Ephemeralität (Invariante):** Der Filler läuft über *diesen
|
||||
Callback*, nicht über den Delta-Stream — dadurch landet er **nicht** in
|
||||
`trace.semantic_response` und **nicht** im gespeicherten History-Turn. Bei langen/
|
||||
mehreren Tools gestaffelt eskalieren („Moment …" → „Bitte noch einen Augenblick …").
|
||||
Server-TTS ist ein kleiner Eingriff; **„Im Gerät" ist Fast-follow** (eigener
|
||||
Event-Typ → Browser-`speak()`, Gesten-/Voices-Absicherung).
|
||||
verdrahtet ihn auf zwei Pools (`app/pipeline/fillers.py`): **OPENING** (sofort beim
|
||||
Such-Start) und **PATIENCE** (bei längerer Recherche nachgeschoben). Beide werden
|
||||
**zufällig** gewählt (schnelles Feedback, nicht roboterhaft) und gehen über
|
||||
`spoken_adapter`/`tts_normalizer`/`tts` → `on_audio` **und** `on_token`.
|
||||
|
||||
**Eine Pflege-Stelle, Englisch:** Die Master-Sätze stehen als englische Listen in
|
||||
`fillers.py` (`OPENING_PHRASES`/`PATIENCE_PHRASES`). Zur Laufzeit werden sie **einmal
|
||||
je Sprache übersetzt und gecacht** (`FillerPhrases`, Übersetzer = OpenRouter-Modell,
|
||||
durchgängig höfliche Anrede „Sie"/„vous"/„usted"…). Die **Standardsprache wird beim
|
||||
Start vorgewärmt** (`warmup.py`) → erster Such-Turn ohne Übersetzungs-Latenz; andere
|
||||
Sprachen werden beim ersten Bedarf einmalig übersetzt. Fällt die Übersetzung aus →
|
||||
Fallback Englisch.
|
||||
|
||||
**Geduld-Schleife:** Beim Tool-Start läuft ein Hintergrund-Task, der alle
|
||||
`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).
|
||||
|
||||
### 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