33import sys
44import socket
55import signal
6+ import logging
7+ import time
68from faster_whisper import WhisperModel
79
810SOCK_PATH = sys .argv [1 ]
1113DEVICE = sys .argv [4 ]
1214COMPUTE = sys .argv [5 ]
1315
16+ LOG_PATH = os .path .join (os .environ .get ("XDG_RUNTIME_DIR" , "/tmp" ), "talktype-whisper.log" )
17+ logging .basicConfig (
18+ filename = LOG_PATH , level = logging .INFO ,
19+ format = "%(asctime)s %(levelname)s %(message)s" ,
20+ )
21+ log = logging .getLogger ("whisper-daemon" )
22+
1423# Load model once
24+ log .info ("Loading faster-whisper %s (device=%s, compute=%s)..." , MODEL_NAME , DEVICE , COMPUTE )
1525print (f"Loading faster-whisper { MODEL_NAME } ..." , flush = True )
1626model = WhisperModel (MODEL_NAME , device = DEVICE , compute_type = COMPUTE )
1727print ("Model loaded." , flush = True )
28+ log .info ("Model loaded." )
1829
1930
2031def transcribe (audio_path ):
@@ -23,6 +34,7 @@ def transcribe(audio_path):
2334
2435
2536def cleanup (* _ ):
37+ log .info ("Shutting down (signal)." )
2638 try :
2739 os .unlink (SOCK_PATH )
2840 except OSError :
@@ -45,12 +57,22 @@ def cleanup(*_):
4557 try :
4658 audio_path = conn .recv (4096 ).decode ().strip ()
4759 if audio_path and os .path .isfile (audio_path ):
60+ file_size = os .path .getsize (audio_path )
61+ log .info ("Transcribing %s (%d bytes)..." , audio_path , file_size )
62+ t0 = time .monotonic ()
4863 text = transcribe (audio_path )
64+ elapsed = time .monotonic () - t0
65+ log .info ("Done in %.1fs, %d chars: %s" , elapsed , len (text ),
66+ text [:200 ] if text else "(empty)" )
4967 conn .sendall (text .encode ())
5068 else :
69+ log .warning ("Bad path: %r" , audio_path )
5170 conn .sendall (b"" )
5271 except Exception as e :
53- print (f"Error: { e } " , file = sys .stderr , flush = True )
54- conn .sendall (b"" )
72+ log .exception ("Error during transcription" )
73+ try :
74+ conn .sendall (b"" )
75+ except Exception :
76+ pass
5577 finally :
5678 conn .close ()
0 commit comments