WhisperLive-Server/run_server.py
2025-06-07 13:06:08 +01:00

84 lines
3.4 KiB
Python

import argparse
import ssl
import os
import socket
def check_port_availability(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('0.0.0.0', port))
sock.close()
return result != 0
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--port', '-p',
type=int,
default=int(os.getenv('PORT_WHISPERLIVE')),
help="Websocket port to run the server on.")
parser.add_argument('--backend', '-b',
type=str,
default='faster_whisper',
help='Backends from ["tensorrt", "faster_whisper"]')
parser.add_argument('--faster_whisper_custom_model_path', '-fw',
type=str, default=None,
help="Custom Faster Whisper Model")
parser.add_argument('--trt_model_path', '-trt',
type=str,
default=None,
help='Whisper TensorRT model path')
parser.add_argument('--trt_multilingual', '-m',
action="store_true",
help='Boolean only for TensorRT model. True if multilingual.')
parser.add_argument('--ssl_cert_path', '-ssl',
type=str,
default=None,
help='Path to cert.pem and key.pem if ssl should be used.')
parser.add_argument('--omp_num_threads', '-omp',
type=int,
default=1,
help="Number of threads to use for OpenMP")
parser.add_argument('--no_single_model', '-nsm',
action='store_true',
help='Set this if every connection should instantiate its own model. Only relevant for custom model, passed using -trt or -fw.')
args = parser.parse_args()
if args.backend == "tensorrt":
if args.trt_model_path is None:
raise ValueError("Please Provide a valid tensorrt model path")
port = args.port
if not check_port_availability(port):
print(f"Warning: Port {port} might already be in use!")
ssl_context = None
if args.ssl_cert_path is not None:
try:
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(
certfile=f"{args.ssl_cert_path}/cert.pem",
keyfile=f"{args.ssl_cert_path}/privkey.pem"
)
print("SSL context created successfully")
except Exception as e:
print(f"Failed to load SSL certificates: {str(e)}")
raise
if "OMP_NUM_THREADS" not in os.environ:
print(f"Setting OMP_NUM_THREADS to {args.omp_num_threads}")
os.environ["OMP_NUM_THREADS"] = str(args.omp_num_threads)
from whisper_live.server import TranscriptionServer
print(f"Running server with args: {args}")
server = TranscriptionServer()
print(f"Starting server on port {args.port} with backend {args.backend} using SSL: {args.ssl_cert_path is not None}")
server.run(
"0.0.0.0",
port=args.port,
backend=args.backend,
faster_whisper_custom_model_path=args.faster_whisper_custom_model_path,
whisper_tensorrt_path=args.trt_model_path,
trt_multilingual=args.trt_multilingual,
single_model=not args.no_single_model,
ssl_context=ssl_context
)