router: TTS auf offiziellen Kikiri-Deutsche-Pfad umgestellt
Ersetzt die alte Implementierung (kokoro 0.7.16 + espeak.EspeakG2P) durch den offiziellen Kikiri-Deutsche-Inferenzpfad: - semidark/kokoro-Fork (0.9.4) mit lang_code='d' - semidark/misaki-Fork (0.9.4) mit misaki.de.DEG2P (Text-Normalisierung + espeak-ng + Aussprache-Overrides) - Verbessertes Chunking (Split an Satzgrenzen, 400 Zeichen) - repo_id='hexgrad/Kokoro-82M' für KModel/KPipeline Änderungen: - router/tts_worker.py: KModel/KPipeline API aktualisiert, Monkey-Patching entfernt, Docstring aktualisiert - deploy/install.sh: semidark-Forks installieren (misaki[de], kokoro --no-deps, spacy für misaki.en-Import) - README.md: G2P-Pfad, Chunking, Python-Pakete, Python-3.13-Hinweis Getestet: 43/43 lokale Tests, E2E auf Zielsystem (WAV/MP3, LAN-Zugriff, parallele Qwen/TTS-Operation, Chat intakt).
This commit is contained in:
+17
-6
@@ -7,6 +7,11 @@ RAM (CPU-only, niedrige Warm-Start-Latenz). Wird als eigener
|
||||
systemd-Service betrieben und vom AI Profile Router über HTTP
|
||||
angesprochen (POST /v1/audio/speech -> POST /tts).
|
||||
|
||||
Nutzt den offiziellen Kikiri-Deutsche-Inferenzpfad:
|
||||
- semidark/kokoro-Fork (0.9.4) mit lang_code='d'
|
||||
- semidark/misaki-Fork (0.9.4) mit misaki.de.DEG2P
|
||||
(Text-Normalisierung + espeak-ng + Aussprache-Overrides)
|
||||
|
||||
API:
|
||||
GET /status -> {"status":"ok","ready":bool,"voices":[...],...}
|
||||
POST /tts -> {"text":"...","voice":"martin","speed":1.0,
|
||||
@@ -74,22 +79,28 @@ class TTSWorker:
|
||||
self.total_requests = 0
|
||||
|
||||
def load(self) -> None:
|
||||
"""Lädt alle Stimmen (CPU-only)."""
|
||||
"""Lädt alle Stimmen (CPU-only) via offiziellem Kikiri-Deutsche-Pfad.
|
||||
|
||||
Nutzt den semidark/kokoro-Fork (0.9.4) mit lang_code='d' und
|
||||
den semidark/misaki-Fork (0.9.4) mit misaki.de.DEG2P
|
||||
(Text-Normalisierung + espeak-ng + Aussprache-Overrides).
|
||||
"""
|
||||
import torch
|
||||
from kokoro import KModel, KPipeline
|
||||
# Deutsche Sprachunterstützung (kokoro PR #340): 'de' -> espeak-ng G2P.
|
||||
from kokoro import pipeline as _pipeline_mod
|
||||
_pipeline_mod.ALIASES.setdefault("de", "d")
|
||||
_pipeline_mod.LANG_CODES.setdefault("d", "de")
|
||||
|
||||
for name, cfg in VOICES.items():
|
||||
t0 = time.monotonic()
|
||||
try:
|
||||
kmodel = KModel(
|
||||
repo_id="hexgrad/Kokoro-82M",
|
||||
config=os.path.join(MODEL_DIR, cfg["config"]),
|
||||
model=os.path.join(MODEL_DIR, cfg["model"]),
|
||||
).to("cpu").eval()
|
||||
pipeline = KPipeline(lang_code="de", model=kmodel)
|
||||
pipeline = KPipeline(
|
||||
lang_code="d",
|
||||
repo_id="hexgrad/Kokoro-82M",
|
||||
model=kmodel,
|
||||
)
|
||||
voice = torch.load(
|
||||
os.path.join(MODEL_DIR, cfg["voice"]),
|
||||
map_location="cpu", weights_only=True)
|
||||
|
||||
Reference in New Issue
Block a user