Add session ID to GladiaSTTService logs, reset bytes_sent counter
This commit is contained in:
1
changelog/3236.added.md
Normal file
1
changelog/3236.added.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
- Add Gladia session id to logs for `GladiaSTTService`.
|
||||||
1
changelog/3236.fixed.md
Normal file
1
changelog/3236.fixed.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
- In `GladiaSTTService`, reset the `_bytes_sent` counter on connecting the websocket. This avoids unnecessary audio buffer trimming.
|
||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user