BaseTextAggregator: make functions async
This commit is contained in:
@@ -183,7 +183,7 @@ class TTSService(AIService):
|
||||
await self._maybe_pause_frame_processing()
|
||||
|
||||
sentence = self._text_aggregator.text
|
||||
self._text_aggregator.reset()
|
||||
await self._text_aggregator.reset()
|
||||
self._processing_text = False
|
||||
await self._push_tts_frames(sentence)
|
||||
if isinstance(frame, LLMFullResponseEndFrame):
|
||||
@@ -234,7 +234,7 @@ class TTSService(AIService):
|
||||
|
||||
async def _handle_interruption(self, frame: StartInterruptionFrame, direction: FrameDirection):
|
||||
self._processing_text = False
|
||||
self._text_aggregator.handle_interruption()
|
||||
await self._text_aggregator.handle_interruption()
|
||||
for filter in self._text_filters:
|
||||
filter.handle_interruption()
|
||||
|
||||
@@ -251,7 +251,7 @@ class TTSService(AIService):
|
||||
if not self._aggregate_sentences:
|
||||
text = frame.text
|
||||
else:
|
||||
text = self._text_aggregator.aggregate(frame.text)
|
||||
text = await self._text_aggregator.aggregate(frame.text)
|
||||
|
||||
if text:
|
||||
await self._push_tts_frames(text)
|
||||
|
||||
@@ -25,7 +25,7 @@ class BaseTextAggregator(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def aggregate(self, text: str) -> Optional[str]:
|
||||
async def aggregate(self, text: str) -> Optional[str]:
|
||||
"""Aggregates the specified text with the currently accumulated text.
|
||||
|
||||
This method should be implemented to define how the new text contributes
|
||||
@@ -43,7 +43,7 @@ class BaseTextAggregator(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def handle_interruption(self):
|
||||
async def handle_interruption(self):
|
||||
"""Handles interruptions. When an interruption occurs it is possible
|
||||
that we might want to discard the aggregated text or do some internal
|
||||
modifications to the aggregated text.
|
||||
@@ -52,6 +52,6 @@ class BaseTextAggregator(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def reset(self):
|
||||
async def reset(self):
|
||||
"""Clears the internally aggregated text."""
|
||||
pass
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
|
||||
import re
|
||||
from typing import Callable, Optional, Tuple
|
||||
from typing import Awaitable, Callable, Optional, Tuple
|
||||
|
||||
from loguru import logger
|
||||
|
||||
@@ -106,7 +106,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
return self
|
||||
|
||||
def on_pattern_match(
|
||||
self, pattern_id: str, handler: Callable[[PatternMatch], None]
|
||||
self, pattern_id: str, handler: Callable[[PatternMatch], Awaitable[None]]
|
||||
) -> "PatternPairAggregator":
|
||||
"""Register a handler for when a pattern pair is matched.
|
||||
|
||||
@@ -124,7 +124,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
self._handlers[pattern_id] = handler
|
||||
return self
|
||||
|
||||
def _process_complete_patterns(self, text: str) -> Tuple[str, bool]:
|
||||
async def _process_complete_patterns(self, text: str) -> Tuple[str, bool]:
|
||||
"""Process all complete pattern pairs in the text.
|
||||
|
||||
Searches for all complete pattern pairs in the text, calls the
|
||||
@@ -167,7 +167,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
# Call the appropriate handler if registered
|
||||
if pattern_id in self._handlers:
|
||||
try:
|
||||
self._handlers[pattern_id](pattern_match)
|
||||
await self._handlers[pattern_id](pattern_match)
|
||||
except Exception as e:
|
||||
logger.error(f"Error in pattern handler for {pattern_id}: {e}")
|
||||
|
||||
@@ -204,7 +204,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
|
||||
return False
|
||||
|
||||
def aggregate(self, text: str) -> Optional[str]:
|
||||
async def aggregate(self, text: str) -> Optional[str]:
|
||||
"""Aggregate text and process pattern pairs.
|
||||
|
||||
This method adds the new text to the buffer, processes any complete pattern
|
||||
@@ -223,7 +223,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
self._text += text
|
||||
|
||||
# Process any complete patterns in the buffer
|
||||
processed_text, modified = self._process_complete_patterns(self._text)
|
||||
processed_text, modified = await self._process_complete_patterns(self._text)
|
||||
|
||||
# Only update the buffer if modifications were made
|
||||
if modified:
|
||||
@@ -245,7 +245,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
# No complete sentence found yet
|
||||
return None
|
||||
|
||||
def handle_interruption(self):
|
||||
async def handle_interruption(self):
|
||||
"""Handle interruptions by clearing the buffer.
|
||||
|
||||
Called when an interruption occurs in the processing pipeline,
|
||||
@@ -253,7 +253,7 @@ class PatternPairAggregator(BaseTextAggregator):
|
||||
"""
|
||||
self._text = ""
|
||||
|
||||
def reset(self):
|
||||
async def reset(self):
|
||||
"""Clear the internally aggregated text.
|
||||
|
||||
Resets the aggregator to its initial state, discarding any
|
||||
|
||||
@@ -23,7 +23,7 @@ class SimpleTextAggregator(BaseTextAggregator):
|
||||
def text(self) -> str:
|
||||
return self._text
|
||||
|
||||
def aggregate(self, text: str) -> Optional[str]:
|
||||
async def aggregate(self, text: str) -> Optional[str]:
|
||||
result: Optional[str] = None
|
||||
|
||||
self._text += text
|
||||
@@ -35,8 +35,8 @@ class SimpleTextAggregator(BaseTextAggregator):
|
||||
|
||||
return result
|
||||
|
||||
def handle_interruption(self):
|
||||
async def handle_interruption(self):
|
||||
self._text = ""
|
||||
|
||||
def reset(self):
|
||||
async def reset(self):
|
||||
self._text = ""
|
||||
|
||||
@@ -43,7 +43,7 @@ class SkipTagsAggregator(BaseTextAggregator):
|
||||
"""
|
||||
return self._text
|
||||
|
||||
def aggregate(self, text: str) -> Optional[str]:
|
||||
async def aggregate(self, text: str) -> Optional[str]:
|
||||
"""Aggregate text and process pattern pairs.
|
||||
|
||||
This method adds the new text to the buffer, processes any complete pattern
|
||||
@@ -77,7 +77,7 @@ class SkipTagsAggregator(BaseTextAggregator):
|
||||
# No complete sentence found yet
|
||||
return None
|
||||
|
||||
def handle_interruption(self):
|
||||
async def handle_interruption(self):
|
||||
"""Handle interruptions by clearing the buffer.
|
||||
|
||||
Called when an interruption occurs in the processing pipeline,
|
||||
@@ -85,7 +85,7 @@ class SkipTagsAggregator(BaseTextAggregator):
|
||||
"""
|
||||
self._text = ""
|
||||
|
||||
def reset(self):
|
||||
async def reset(self):
|
||||
"""Clear the internally aggregated text.
|
||||
|
||||
Resets the aggregator to its initial state, discarding any
|
||||
|
||||
Reference in New Issue
Block a user