Add session ID to GladiaSTTService logs, reset bytes_sent counter

This commit is contained in:
Mark Backman
2025-12-16 09:59:33 -05:00
parent 0d1a122582
commit 11b92d89d0
3 changed files with 22 additions and 10 deletions

1
changelog/3236.added.md Normal file
View File

@@ -0,0 +1 @@
- Add Gladia session id to logs for `GladiaSTTService`.

1
changelog/3236.fixed.md Normal file
View File

@@ -0,0 +1 @@
- In `GladiaSTTService`, reset the `_bytes_sent` counter on connecting the websocket. This avoids unnecessary audio buffer trimming.

View File

@@ -257,6 +257,7 @@ class GladiaSTTService(WebsocketSTTService):
# Session management # Session management
self._session_url = None self._session_url = None
self._session_id = None
self._connection_active = False self._connection_active = False
# Audio buffer management # Audio buffer management
@@ -265,6 +266,9 @@ class GladiaSTTService(WebsocketSTTService):
self._max_buffer_size = max_buffer_size self._max_buffer_size = max_buffer_size
self._buffer_lock = asyncio.Lock() self._buffer_lock = asyncio.Lock()
def __str__(self):
return f"{self.name} [{self._session_id}]"
def can_generate_metrics(self) -> bool: def can_generate_metrics(self) -> bool:
"""Check if the service can generate performance metrics. """Check if the service can generate performance metrics.
@@ -383,14 +387,14 @@ class GladiaSTTService(WebsocketSTTService):
trim_size = len(self._audio_buffer) - self._max_buffer_size trim_size = len(self._audio_buffer) - self._max_buffer_size
self._audio_buffer = self._audio_buffer[trim_size:] self._audio_buffer = self._audio_buffer[trim_size:]
self._bytes_sent = max(0, self._bytes_sent - trim_size) self._bytes_sent = max(0, self._bytes_sent - trim_size)
logger.warning(f"Audio buffer exceeded max size, trimmed {trim_size} bytes") logger.warning(f"{self} Audio buffer exceeded max size, trimmed {trim_size} bytes")
# Send audio if connected # Send audio if connected
if self._connection_active and self._websocket and self._websocket.state is State.OPEN: if self._connection_active and self._websocket and self._websocket.state is State.OPEN:
try: try:
await self._send_audio(audio) await self._send_audio(audio)
except websockets.exceptions.ConnectionClosed as e: except websockets.exceptions.ConnectionClosed as e:
logger.warning(f"Websocket closed while sending audio chunk: {e}") logger.warning(f"{self} Websocket closed while sending audio chunk: {e}")
self._connection_active = False self._connection_active = False
yield None yield None
@@ -405,7 +409,8 @@ class GladiaSTTService(WebsocketSTTService):
settings = self._prepare_settings() settings = self._prepare_settings()
response = await self._setup_gladia(settings) response = await self._setup_gladia(settings)
self._session_url = response["url"] self._session_url = response["url"]
logger.info(f"Session URL : {self._session_url}") self._session_id = response["id"]
logger.info(f"{self} Session URL: {self._session_url}")
await self._connect_websocket() await self._connect_websocket()
@@ -438,10 +443,15 @@ class GladiaSTTService(WebsocketSTTService):
if self._websocket and self._websocket.state is State.OPEN: if self._websocket and self._websocket.state is State.OPEN:
return return
logger.debug("Connecting to Gladia WebSocket") logger.debug(f"{self}Connecting to Gladia WebSocket")
self._websocket = await websocket_connect(self._session_url) self._websocket = await websocket_connect(self._session_url)
self._connection_active = True self._connection_active = True
# Reset byte tracking for new connection
async with self._buffer_lock:
self._bytes_sent = 0
await self._call_event_handler("on_connected") await self._call_event_handler("on_connected")
# Send buffered audio if any # Send buffered audio if any
@@ -456,7 +466,7 @@ class GladiaSTTService(WebsocketSTTService):
"""Close the websocket connection to Gladia.""" """Close the websocket connection to Gladia."""
try: try:
if self._websocket and self._websocket.state is State.OPEN: if self._websocket and self._websocket.state is State.OPEN:
logger.debug("Disconnecting from Gladia WebSocket") logger.debug(f"{self} Disconnecting from Gladia WebSocket")
await self._websocket.close() await self._websocket.close()
except Exception as e: except Exception as e:
await self.push_error(error_msg=f"Error closing websocket: {e}", exception=e) await self.push_error(error_msg=f"Error closing websocket: {e}", exception=e)
@@ -480,10 +490,10 @@ class GladiaSTTService(WebsocketSTTService):
else: else:
error_text = await response.text() error_text = await response.text()
logger.error( logger.error(
f"Gladia error: {response.status}: {error_text or response.reason}" f"{self} Gladia error: {response.status}: {error_text or response.reason}"
) )
raise Exception( raise Exception(
f"Failed to initialize Gladia session: {response.status} - {error_text}" f"{self} Failed to initialize Gladia session: {response.status} - {error_text}"
) )
@traced_stt @traced_stt
@@ -586,7 +596,7 @@ class GladiaSTTService(WebsocketSTTService):
) )
) )
except json.JSONDecodeError: except json.JSONDecodeError:
logger.warning(f"Received non-JSON message: {message}") logger.warning(f"{self} Received non-JSON message: {message}")
async def _keepalive_task_handler(self): async def _keepalive_task_handler(self):
"""Send periodic empty audio chunks to keep the connection alive.""" """Send periodic empty audio chunks to keep the connection alive."""
@@ -600,9 +610,9 @@ class GladiaSTTService(WebsocketSTTService):
empty_audio = b"" empty_audio = b""
await self._send_audio(empty_audio) await self._send_audio(empty_audio)
else: else:
logger.debug("Websocket closed, stopping keepalive") logger.debug(f"{self} Websocket closed, stopping keepalive")
break break
except websockets.exceptions.ConnectionClosed: except websockets.exceptions.ConnectionClosed:
logger.debug("Connection closed during keepalive") logger.debug(f"{self} Connection closed during keepalive")
except Exception as e: except Exception as e:
await self.push_error(error_msg=f"Unknown error occurred: {e}", exception=e) await self.push_error(error_msg=f"Unknown error occurred: {e}", exception=e)