Improve TTSService handling of long LLM token outputs

This commit is contained in:
Mark Backman
2025-11-24 18:59:26 -05:00
parent b52b108932
commit 4699dc2345
3 changed files with 67 additions and 6 deletions

View File

@@ -33,3 +33,48 @@ class TestSimpleTextAggregator(unittest.IsolatedAsyncioTestCase):
assert self.aggregator.text.text == "How are"
aggregate = await self.aggregator.aggregate("you?")
assert aggregate.text == "How are you?"
async def test_word_by_word(self):
"""Test word-by-word token aggregation (e.g., OpenAI)."""
assert await self.aggregator.aggregate("Hello") == None
aggregate = await self.aggregator.aggregate("!")
assert aggregate.text == "Hello!"
assert await self.aggregator.aggregate(" I") == None
assert await self.aggregator.aggregate(" am") == None
aggregate = await self.aggregator.aggregate(" Doug.")
assert aggregate.text == "I am Doug."
assert self.aggregator.text.text == ""
async def test_chunks_with_partial_sentences(self):
"""Test chunks with partial sentences."""
aggregate = await self.aggregator.aggregate("Hey!")
assert aggregate.text == "Hey!"
aggregate = await self.aggregator.aggregate(" Nice to meet you! So")
assert aggregate.text == "Nice to meet you!"
assert self.aggregator.text.text == "So"
assert await self.aggregator.aggregate(" what") == None
aggregate = await self.aggregator.aggregate("'d you like?")
assert aggregate.text == "So what'd you like?"
async def test_multi_sentence_chunk(self):
"""Test chunks with multiple complete sentences."""
aggregate = await self.aggregator.aggregate("Hello! I am Doug. Nice to meet you!")
assert aggregate.text == "Hello!"
# Drain remaining sentences by calling aggregate("")
aggregate = await self.aggregator.aggregate("")
assert aggregate.text == "I am Doug."
aggregate = await self.aggregator.aggregate("")
assert aggregate.text == "Nice to meet you!"
assert await self.aggregator.aggregate("") == None
assert self.aggregator.text.text == ""
async def test_aggregate_empty_with_incomplete(self):
"""Test aggregate('') with incomplete sentence in buffer."""
aggregate = await self.aggregator.aggregate("Hello! I am")
assert aggregate.text == "Hello!"
assert await self.aggregator.aggregate("") == None
assert self.aggregator.text.text == "I am"
async def test_aggregate_empty_buffer(self):
"""Test aggregate('') with empty buffer."""
assert await self.aggregator.aggregate("") == None