feat(tts): Emojis/Markdown beim Vorlesen entfernen + Autostart/GPU-Doku
- spoken_response_adapter: Emoji-/Symbol-Strip (Emoticons, Symbole, Flaggen, Pfeile, Dingbats, ZWJ/Variationsselektoren). Markdown wurde bereits entfernt. - Geräte-TTS (app.js v28) liest das bereinigte "spoken"-Feld statt des Rohtexts (automatisch + beim Replay); Anzeige bleibt Originaltext. - deploy/ollama-keepalive.conf: Drop-in OLLAMA_KEEP_ALIVE=5m -> GPU im Leerlauf frei. - Doku §4.10: Dauerbetrieb als Dienst + warum der Gateway die GPU nicht blockiert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
317ad2ff97
commit
bd20a308de
5 changed files with 85 additions and 5 deletions
|
|
@ -280,9 +280,10 @@ function replayBubble(div) {
|
|||
startReplay(info.chunks, btn); // Assistent: gecachtes PCM, sofort & gratis
|
||||
} else if (isDeviceMode()) {
|
||||
stopAudio();
|
||||
deviceSpeakBtn(text, info.lang, btn); // Geräte-TTS: lokal vorlesen, gratis
|
||||
// Geräte-TTS: bereinigtes "spoken" bevorzugen (ohne Markdown/Emojis), sonst Rohtext.
|
||||
deviceSpeakBtn(info.spoken || text, info.lang, btn);
|
||||
} else {
|
||||
speakBubble(text, info.lang, btn); // Server-TTS via /api/speak
|
||||
speakBubble(text, info.lang, btn); // Server-TTS via /api/speak (bereinigt selbst)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -385,8 +386,16 @@ function runTurn(path, onopen) {
|
|||
if (!answerEl) answerEl = addMessage("assistant", "", { lang: turnLang() });
|
||||
if (msg.text) answerEl._textEl.textContent = msg.text;
|
||||
// Sprache final festhalten (für Replay) und im Geräte-Modus lokal vorlesen.
|
||||
if (answerEl._replay) answerEl._replay.lang = turnLang();
|
||||
if (isDeviceMode() && msg.text) deviceSpeak(msg.text, turnLang());
|
||||
// Für TTS das bereinigte "spoken" (ohne Markdown/Emojis) bevorzugen, anzeigen
|
||||
// bleibt der Originaltext.
|
||||
if (answerEl._replay) {
|
||||
answerEl._replay.lang = turnLang();
|
||||
answerEl._replay.spoken = msg.spoken || msg.text || "";
|
||||
}
|
||||
if (isDeviceMode()) {
|
||||
const spoken = msg.spoken || msg.text;
|
||||
if (spoken) deviceSpeak(spoken, turnLang());
|
||||
}
|
||||
scrollToBottom();
|
||||
break;
|
||||
case "emergency":
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue