Skip to content

Commit a474abe

Browse files
authored
feat: log stats when meeting ends (#247)
1 parent 8e6224c commit a474abe

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

skynet/modules/stt/streaming_whisper/connection_manager.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ async def send(self, connection: MeetingConnection, results: list[utils.Transcri
6464
log.error(f'Meeting {connection.meeting_id}: exception while sending transcription results {ex}')
6565

6666
async def disconnect(self, connection: MeetingConnection, already_closed=False):
67+
log.info(
68+
f"Closed {connection.meeting_id} | Audio: {connection.total_audio_received_s}s | "
69+
+ f"Interims: {connection.total_interims} | Finals: {connection.total_finals}"
70+
)
6771
try:
6872
self.connections.remove(connection)
6973
except ValueError:

skynet/modules/stt/streaming_whisper/meeting_connection.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ class MeetingConnection:
2020
participants: dict[str, State] = {}
2121
previous_transcription_tokens: List[int]
2222
previous_transcription_store: List[List[int]]
23+
total_finals: int
24+
total_interims: int
25+
total_audio_received_s: float
2326
tokenizer: Tokenizer | None
2427
meeting_language: str | None
2528
meeting_id: str
@@ -32,10 +35,20 @@ def __init__(self, ws: WebSocket, meeting_id: str):
3235
self.meeting_id = meeting_id
3336
self.previous_transcription_tokens = []
3437
self.previous_transcription_store = []
38+
self.total_finals = 0
39+
self.total_interims = 0
40+
self.total_audio_received_s = 0
3541
self.meeting_language = None
3642
self.tokenizer = None
3743
self.connected = True
3844

45+
async def update_connection_summary_stats(self, payloads):
46+
for payload in payloads:
47+
if payload.type == 'final':
48+
self.total_finals += 1
49+
else:
50+
self.total_interims += 1
51+
3952
async def update_initial_prompt(self, previous_payloads: list[utils.TranscriptionResponse]):
4053
for payload in previous_payloads:
4154
if payload.type == 'final' and not any(prompt in payload.text for prompt in utils.black_listed_prompts):
@@ -47,7 +60,7 @@ async def update_initial_prompt(self, previous_payloads: list[utils.Transcriptio
4760

4861
async def process(self, chunk: bytes, chunk_timestamp: int) -> List[utils.TranscriptionResponse] | None:
4962
a_chunk = Chunk(chunk, chunk_timestamp)
50-
63+
self.total_audio_received_s += a_chunk.duration
5164
# The first chunk sets the meeting language and initializes the Tokenizer
5265
if not self.meeting_language:
5366
self.meeting_language = a_chunk.language
@@ -63,6 +76,7 @@ async def process(self, chunk: bytes, chunk_timestamp: int) -> List[utils.Transc
6376

6477
payloads = await self.participants[a_chunk.participant_id].process(a_chunk, self.previous_transcription_tokens)
6578
if payloads:
79+
await self.update_connection_summary_stats(payloads)
6680
await self.update_initial_prompt(payloads)
6781
return payloads
6882

0 commit comments

Comments
 (0)