forked from efforting.tech/stt-server
Add --verbose flag; suppress info logging by default
Errors always go to stderr. Info logs (startup, VAD events, transcripts) only appear with --verbose / -v, keeping stderr clean when running as a system service. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,13 +16,15 @@ Every WebSocket connection receives the full event stream from the moment it
|
|||||||
connects — no subscription handshake required.
|
connects — no subscription handshake required.
|
||||||
|
|
||||||
All log/status messages go to stderr. Stdout is machine-readable events only.
|
All log/status messages go to stderr. Stdout is machine-readable events only.
|
||||||
|
Pass --verbose to enable info logging (startup, VAD events, transcripts).
|
||||||
|
Errors always go to stderr regardless of verbosity.
|
||||||
|
|
||||||
Environment:
|
Environment:
|
||||||
STT_PORT WebSocket port (default: 11501)
|
STT_PORT WebSocket port (default: 11501)
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
./stt-server.py
|
./stt-server.py
|
||||||
./stt-server.py --model large-v3 --device cuda --compute-type int8_float16
|
./stt-server.py --model large-v3 --device cuda --compute-type int8_float16 --verbose
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
@@ -45,9 +47,10 @@ HISTORY_SAMPLES = 960000 # 60s ring buffer for pre-roll
|
|||||||
PORT = int(__import__('os').environ.get('STT_PORT', 11501))
|
PORT = int(__import__('os').environ.get('STT_PORT', 11501))
|
||||||
|
|
||||||
|
|
||||||
def log(msg):
|
def log(msg, error=False):
|
||||||
sys.stderr.write(f'[stt] {msg}\n')
|
if error or verbose:
|
||||||
sys.stderr.flush()
|
sys.stderr.write(f'[stt] {msg}\n')
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
|
|
||||||
# --- WebSocket broadcast ---
|
# --- WebSocket broadcast ---
|
||||||
@@ -118,7 +121,9 @@ parser = argparse.ArgumentParser()
|
|||||||
parser.add_argument('--model', default='base.en')
|
parser.add_argument('--model', default='base.en')
|
||||||
parser.add_argument('--device', default='cuda')
|
parser.add_argument('--device', default='cuda')
|
||||||
parser.add_argument('--compute-type', default='int8_float16')
|
parser.add_argument('--compute-type', default='int8_float16')
|
||||||
args = parser.parse_args()
|
parser.add_argument('--verbose', '-v', action='store_true')
|
||||||
|
args = parser.parse_args()
|
||||||
|
verbose = args.verbose
|
||||||
|
|
||||||
log(f'loading faster-whisper {args.model} ({args.device}, {args.compute_type})...')
|
log(f'loading faster-whisper {args.model} ({args.device}, {args.compute_type})...')
|
||||||
from faster_whisper import WhisperModel
|
from faster_whisper import WhisperModel
|
||||||
@@ -126,7 +131,7 @@ try:
|
|||||||
model = WhisperModel(args.model, device=args.device, compute_type=args.compute_type)
|
model = WhisperModel(args.model, device=args.device, compute_type=args.compute_type)
|
||||||
log(f'model ready on {args.device}')
|
log(f'model ready on {args.device}')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log(f'{args.device} failed ({e}), falling back to cpu')
|
log(f'{args.device} failed ({e}), falling back to cpu', error=True)
|
||||||
model = WhisperModel(args.model, device='cpu', compute_type='int8')
|
model = WhisperModel(args.model, device='cpu', compute_type='int8')
|
||||||
log('model ready on cpu')
|
log('model ready on cpu')
|
||||||
|
|
||||||
@@ -197,7 +202,7 @@ def transcription_worker():
|
|||||||
emit({'event': 'transcript', 'text': text.strip(), 'words': words, 'duration': round(duration, 3)})
|
emit({'event': 'transcript', 'text': text.strip(), 'words': words, 'duration': round(duration, 3)})
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = traceback.format_exc()
|
msg = traceback.format_exc()
|
||||||
log(f'transcription error:\n{msg}')
|
log(f'transcription error:\n{msg}', error=True)
|
||||||
emit({'event': 'error', 'message': msg})
|
emit({'event': 'error', 'message': msg})
|
||||||
finally:
|
finally:
|
||||||
transcription_queue.task_done()
|
transcription_queue.task_done()
|
||||||
|
|||||||
Reference in New Issue
Block a user