Bugfixes, Verbesserungen und Mixed-Language-Support
Bugfixes: - Abkürzungen (z.B., d.h., Dr., Prof.) werden nicht mehr als Satzenden erkannt (_ABBREV_MASK_RE) - Multilingual-Import: except Exception → except (ImportError, ModuleNotFoundError) - tts_agent: ReAct-Schleife auf max. 10 Iterationen begrenzt, model_dump → explizites Dict - tts_service: audio_device=None fällt auf 'pulse' zurück - JSON-Fehlerbehandlung für --pronunciation-dict mit aussagekräftiger Meldung - PlaybackWorker: Audio-Device wird vor Stream-Start via sd.query_devices() geprüft - mcp_adapter: Fehlerbehandlung für HTTP-Fehler, Timeout erhöht, session_id ergänzt - tts_agent: Health-Check beim Start, --speed/--first-chunk-len Validierung Neue Features: - Gemischtsprachige Texte: [en]...[/en]-Markierungen für per-Segment language_id - strip_markdown(): entfernt Markdown-Formatierung vor der Synthese (--no-strip-markdown) - Emoji-Entfernung in clean_raw_text() via unicodedata - Pause/Resume: request_pause()/request_resume(), POST /pause, POST /resume, MCP-Tools - Neue Einheiten: °C, °F, kWh, kW, W, V, A, J, kPa, bar, m², m³, m/s, rpm - number_to_words_de/en bis Milliarden - DEFAULT_PRONUNCIATION_DE erweitert (GitHub, YouTube, LinkedIn, Wi-Fi, iPhone, ChatGPT, …) - NON_SPELLED_ACRONYMS erweitert (USB, CPU, GPU, API, CEO, HTML, …) - Nummerierte Listen als separate Chunks behandelt - Modell-Warmup via TTS_PRELOAD_LANG Env-Variable - requirements.txt: Upper-Bounds für fastapi und uvicorn Dokumentation: CLAUDE.md, README.md, BEDIENUNGSANLEITUNG.md vollständig aktualisiert Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
d1971049ce
commit
34a34907a8
8 changed files with 778 additions and 114 deletions
|
|
@ -52,6 +52,18 @@ def _get_or_load_model(lang: str, t3_model: str) -> tuple:
|
|||
return _model_cache[key]
|
||||
|
||||
|
||||
# Optionaler Warmup: TTS_PRELOAD_LANG=de lädt das Modell beim Service-Start,
|
||||
# damit der erste Request keine Modell-Ladezeit hat.
|
||||
_PRELOAD_LANG = __import__("os").environ.get("TTS_PRELOAD_LANG")
|
||||
if _PRELOAD_LANG:
|
||||
_preload_t3 = __import__("os").environ.get("TTS_PRELOAD_T3", "v3")
|
||||
try:
|
||||
_get_or_load_model(_PRELOAD_LANG, _preload_t3)
|
||||
print(f"[chatterbox-tts] Modell vorgeladen: lang={_PRELOAD_LANG}, t3={_preload_t3}")
|
||||
except Exception as _e:
|
||||
print(f"[chatterbox-tts] Warnung: Warmup fehlgeschlagen: {_e}")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Job-Datenmodell
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
@ -123,7 +135,7 @@ def _worker() -> None:
|
|||
|
||||
playback = tts.PlaybackWorker(
|
||||
sample_rate=sr,
|
||||
device=job.audio_device,
|
||||
device=job.audio_device or "pulse",
|
||||
speed=job.speed,
|
||||
stop_event=tts.STOP_REQUESTED,
|
||||
)
|
||||
|
|
@ -269,6 +281,18 @@ def stop():
|
|||
return {"stopped": True}
|
||||
|
||||
|
||||
@app.post("/pause")
|
||||
def pause():
|
||||
tts.request_pause()
|
||||
return {"paused": True}
|
||||
|
||||
|
||||
@app.post("/resume")
|
||||
def resume():
|
||||
tts.request_resume()
|
||||
return {"resumed": True}
|
||||
|
||||
|
||||
@app.get("/status")
|
||||
def status():
|
||||
with _state_lock:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue