File size: 3,233 Bytes
d2ee1c3
 
d715e26
d2ee1c3
d715e26
 
d2ee1c3
 
 
 
 
d715e26
d2ee1c3
 
 
 
 
 
 
 
 
 
 
 
 
d715e26
d2ee1c3
 
 
 
 
 
d715e26
 
d2ee1c3
 
d715e26
 
 
 
 
 
d2ee1c3
 
 
 
 
 
 
 
 
 
d715e26
d2ee1c3
d715e26
 
 
d2ee1c3
 
 
 
 
 
 
a05aaa6
 
 
 
 
 
d2ee1c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d715e26
d2ee1c3
a05aaa6
 
 
d2ee1c3
 
 
 
d715e26
d2ee1c3
 
 
 
 
 
 
d715e26
d2ee1c3
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python3
"""
SuperTonic3 OpenAI-Compatible Server

An OpenAI-compatible TTS API using the supertonic3 TTS engine.
Runs on CPU, supports 31 languages with 10 built-in voices.

Usage:
    python server.py [OPTIONS]

    # Or with environment variables:
    SUPERTONIC3_PORT=8080 python server.py
"""

import argparse
import os
import sys

from app import create_app, init_tts_service
from app.config import Config
from app.logging_config import get_logger


def parse_args():
    parser = argparse.ArgumentParser(
        description='SuperTonic3 OpenAI-Compatible Server',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
Examples:
    # Start with defaults
    python server.py

    # Custom port
    python server.py --port 8080

Environment Variables:
    SUPERTONIC3_HOST          Server host (default: 0.0.0.0)
    SUPERTONIC3_PORT          Server port (default: 7860)
    SUPERTONIC3_VOICE         Default voice (default: M1)
    SUPERTONIC3_STREAM_DEFAULT  Enable streaming by default
    SUPERTONIC3_TEXT_PREPROCESS_DEFAULT  Enable text preprocessing by default
    SUPERTONIC3_LOG_LEVEL     Log verbosity
        """,
    )

    parser.add_argument(
        '--host', type=str, default=Config.HOST, help=f'Host to bind to (default: {Config.HOST})'
    )
    parser.add_argument(
        '--port', type=int, default=Config.PORT, help=f'Port to listen on (default: {Config.PORT})'
    )
    parser.add_argument(
        '--voice',
        type=str,
        default=Config.DEFAULT_VOICE,
        dest='voice',
        help=f'Default voice (default: {Config.DEFAULT_VOICE})',
    )
    parser.add_argument(
        '--stream',
        action='store_true',
        default=Config.STREAM_DEFAULT,
        help='Enable streaming by default for all requests',
    )
    parser.add_argument(
        '--text-preprocess',
        action='store_true',
        default=Config.TEXT_PREPROCESS_DEFAULT,
        help='Enable text preprocessing for all requests',
    )
    parser.add_argument(
        '--log-level',
        type=str,
        default=Config.LOG_LEVEL,
        choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'],
        dest='log_level',
        help='Logging level',
    )

    return parser.parse_args()


def main():
    args = parse_args()

    os.environ.setdefault('SUPERTONIC3_LOG_LEVEL', args.log_level)

    app = create_app(
        {'STREAM_DEFAULT': args.stream, 'TEXT_PREPROCESS_DEFAULT': args.text_preprocess}
    )

    logger = get_logger()

    try:
        init_tts_service(voice=args.voice)
    except Exception as e:
        logger.error(f'Failed to initialize TTS service: {e}')
        sys.exit(1)

    try:
        from waitress import serve

        logger.info(f'Starting SuperTonic3 server on http://{args.host}:{args.port}')
        logger.info('Press Ctrl+C to stop')

        serve(app, host=args.host, port=args.port, threads=4, url_scheme='http')

    except ImportError:
        logger.warning('Waitress not installed, falling back to Flask dev server')
        logger.warning('Install waitress for production: pip install waitress')
        app.run(host=args.host, port=args.port, debug=False, threaded=True)


if __name__ == '__main__':
    main()