Stabilize XTTS sentence endings
This commit is contained in:
@@ -155,6 +155,16 @@ class LanguageSegmentationTests(unittest.TestCase):
|
|||||||
self.assertEqual(len(segments), 1)
|
self.assertEqual(len(segments), 1)
|
||||||
self.assertIn("dir zu helfen. Klingt das gut.", segments[0][1])
|
self.assertIn("dir zu helfen. Klingt das gut.", segments[0][1])
|
||||||
|
|
||||||
|
def test_xtts_receives_a_stable_terminal_stop_cue(self):
|
||||||
|
self.assertEqual(
|
||||||
|
gateway._stabilize_xtts_ending("Heute bleibt es trocken."),
|
||||||
|
"Heute bleibt es trocken;",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
gateway._stabilize_xtts_ending("Klingt das gut."),
|
||||||
|
"Klingt das gut;",
|
||||||
|
)
|
||||||
|
|
||||||
def test_normal_sentence_is_not_broken_into_word_sized_requests(self):
|
def test_normal_sentence_is_not_broken_into_word_sized_requests(self):
|
||||||
text = (
|
text = (
|
||||||
"Die automatische Komprimierung ist in OpenClaw standardmäßig "
|
"Die automatische Komprimierung ist in OpenClaw standardmäßig "
|
||||||
|
|||||||
@@ -419,10 +419,23 @@ def _speaker_conditioning() -> dict:
|
|||||||
return SPEAKER_CONDITIONING
|
return SPEAKER_CONDITIONING
|
||||||
|
|
||||||
|
|
||||||
|
def _stabilize_xtts_ending(text: str) -> str:
|
||||||
|
"""Give XTTS a reliable stop cue without changing the visible answer.
|
||||||
|
|
||||||
|
XTTS v2 can continue with invented syllables after a terminal full stop,
|
||||||
|
especially in German. A terminal semicolon is tokenized as a stronger,
|
||||||
|
more reliable boundary while retaining neutral sentence intonation.
|
||||||
|
"""
|
||||||
|
spoken = text.rstrip()
|
||||||
|
if spoken.endswith((".", "!", "?", ";", ":")):
|
||||||
|
spoken = spoken[:-1].rstrip()
|
||||||
|
return f"{spoken};"
|
||||||
|
|
||||||
|
|
||||||
def _xtts_pcm(text: str, language: str, conditioning: dict) -> bytes:
|
def _xtts_pcm(text: str, language: str, conditioning: dict) -> bytes:
|
||||||
payload = {
|
payload = {
|
||||||
**conditioning,
|
**conditioning,
|
||||||
"text": text,
|
"text": _stabilize_xtts_ending(text),
|
||||||
"language": language,
|
"language": language,
|
||||||
"add_wav_header": True,
|
"add_wav_header": True,
|
||||||
"stream_chunk_size": "20",
|
"stream_chunk_size": "20",
|
||||||
|
|||||||
Reference in New Issue
Block a user