Preserve sentence prosody in local TTS
This commit is contained in:
@@ -130,7 +130,7 @@ class LanguageSegmentationTests(unittest.TestCase):
|
||||
self.assertTrue(segments)
|
||||
self.assertTrue(all(any(char.isalnum() for char in part) for _, part in segments))
|
||||
|
||||
def test_weather_summary_is_split_into_short_complete_chunks(self):
|
||||
def test_weather_summary_is_split_into_complete_sentences(self):
|
||||
text = (
|
||||
"Heute in Rastatt: teils sonnig, trocken, 10 bis 22 Grad. "
|
||||
"Abends wolkiger, 16 bis 21 Grad. Böen bis 29 km/h. "
|
||||
@@ -138,12 +138,29 @@ class LanguageSegmentationTests(unittest.TestCase):
|
||||
)
|
||||
segments = gateway.prepare_segments(text)
|
||||
spoken = " ".join(part for _, part in segments)
|
||||
self.assertEqual(len(segments), 4)
|
||||
self.assertTrue(all(len(part) <= 60 for _, part in segments))
|
||||
self.assertEqual(len(segments), 5)
|
||||
self.assertTrue(all(len(part) <= gateway.CHUNK_CHARS
|
||||
for _, part in segments))
|
||||
self.assertIn("29 Kilometer pro Stunde", spoken)
|
||||
self.assertIn("Kein Regen erwartet", spoken)
|
||||
self.assertIn("wetteronline Punkt de", spoken)
|
||||
|
||||
def test_normal_sentence_is_not_broken_into_word_sized_requests(self):
|
||||
text = (
|
||||
"Die automatische Komprimierung ist in OpenClaw standardmäßig "
|
||||
"aktiviert und lässt sich über die Konfigurationsdatei steuern."
|
||||
)
|
||||
self.assertEqual(gateway.prepare_segments(text), [("de", text)])
|
||||
|
||||
def test_overlong_sentence_prefers_clause_boundaries(self):
|
||||
clause = "dieser natürlich gesprochene Teilsatz bleibt zusammen,"
|
||||
text = " ".join([clause] * 12) + " und endet hier."
|
||||
segments = gateway.prepare_segments(text)
|
||||
self.assertGreater(len(segments), 1)
|
||||
self.assertTrue(all(len(part) <= gateway.CHUNK_CHARS
|
||||
for _, part in segments))
|
||||
self.assertTrue(all(len(part.split()) > 4 for _, part in segments))
|
||||
|
||||
|
||||
class FallbackTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
||||
Reference in New Issue
Block a user