Created WebsocketSTTService base class.
This commit is contained in:
@@ -15,6 +15,7 @@ from loguru import logger
|
|||||||
|
|
||||||
from pipecat.frames.frames import (
|
from pipecat.frames.frames import (
|
||||||
AudioRawFrame,
|
AudioRawFrame,
|
||||||
|
ErrorFrame,
|
||||||
Frame,
|
Frame,
|
||||||
StartFrame,
|
StartFrame,
|
||||||
STTMuteFrame,
|
STTMuteFrame,
|
||||||
@@ -24,6 +25,7 @@ from pipecat.frames.frames import (
|
|||||||
)
|
)
|
||||||
from pipecat.processors.frame_processor import FrameDirection
|
from pipecat.processors.frame_processor import FrameDirection
|
||||||
from pipecat.services.ai_service import AIService
|
from pipecat.services.ai_service import AIService
|
||||||
|
from pipecat.services.websocket_service import WebsocketService
|
||||||
from pipecat.transcriptions.language import Language
|
from pipecat.transcriptions.language import Language
|
||||||
|
|
||||||
|
|
||||||
@@ -283,3 +285,35 @@ class SegmentedSTTService(STTService):
|
|||||||
if not self._user_speaking and len(self._audio_buffer) > self._audio_buffer_size_1s:
|
if not self._user_speaking and len(self._audio_buffer) > self._audio_buffer_size_1s:
|
||||||
discarded = len(self._audio_buffer) - self._audio_buffer_size_1s
|
discarded = len(self._audio_buffer) - self._audio_buffer_size_1s
|
||||||
self._audio_buffer = self._audio_buffer[discarded:]
|
self._audio_buffer = self._audio_buffer[discarded:]
|
||||||
|
|
||||||
|
|
||||||
|
class WebsocketSTTService(STTService, WebsocketService):
|
||||||
|
"""Base class for websocket-based STT services.
|
||||||
|
|
||||||
|
Combines STT functionality with websocket connectivity, providing automatic
|
||||||
|
error handling and reconnection capabilities.
|
||||||
|
|
||||||
|
Event handlers:
|
||||||
|
on_connection_error: Called when a websocket connection error occurs.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
@stt.event_handler("on_connection_error")
|
||||||
|
async def on_connection_error(stt: STTService, error: str):
|
||||||
|
logger.error(f"STT connection error: {error}")
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *, reconnect_on_error: bool = True, **kwargs):
|
||||||
|
"""Initialize the Websocket STT service.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
reconnect_on_error: Whether to automatically reconnect on websocket errors.
|
||||||
|
**kwargs: Additional arguments passed to parent classes.
|
||||||
|
"""
|
||||||
|
STTService.__init__(self, **kwargs)
|
||||||
|
WebsocketService.__init__(self, reconnect_on_error=reconnect_on_error, **kwargs)
|
||||||
|
self._register_event_handler("on_connection_error")
|
||||||
|
|
||||||
|
async def _report_error(self, error: ErrorFrame):
|
||||||
|
await self._call_event_handler("on_connection_error", error.error)
|
||||||
|
await self.push_error(error)
|
||||||
|
|||||||
Reference in New Issue
Block a user