| |
| """ |
| 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() |
|
|