lenML/ChatTTS-Forge
301
1import logging2import os3 4from modules.ffmpeg_env import setup_ffmpeg_path5 6try:7 setup_ffmpeg_path()8 # NOTE: 因为 logger 都是在模块中初始化,所以这个 config 必须在最前面9 logging.basicConfig(10 level=os.getenv("LOG_LEVEL", "INFO"),11 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",12 )13except BaseException:14 pass15 16import argparse17 18import uvicorn19 20from modules.api.api_setup import setup_api_args21from modules.models_setup import setup_model_args22from modules.utils import env23from modules.utils.ignore_warn import ignore_useless_warnings24 25ignore_useless_warnings()26 27logger = logging.getLogger(__name__)28 29 30def setup_uvicon_args(parser: argparse.ArgumentParser):31 parser.add_argument("--host", type=str, help="Host to run the server on")32 parser.add_argument("--port", type=int, help="Port to run the server on")33 parser.add_argument(34 "--reload", action="store_true", help="Enable auto-reload for development"35 )36 parser.add_argument("--workers", type=int, help="Number of worker processes")37 parser.add_argument("--log_level", type=str, help="Log level")38 parser.add_argument("--access_log", action="store_true", help="Enable access log")39 parser.add_argument(40 "--proxy_headers", action="store_true", help="Enable proxy headers"41 )42 parser.add_argument(43 "--timeout_keep_alive", type=int, help="Keep-alive timeout duration"44 )45 parser.add_argument(46 "--timeout_graceful_shutdown",47 type=int,48 help="Graceful shutdown timeout duration",49 )50 parser.add_argument("--ssl_keyfile", type=str, help="SSL key file path")51 parser.add_argument("--ssl_certfile", type=str, help="SSL certificate file path")52 parser.add_argument(53 "--ssl_keyfile_password", type=str, help="SSL key file password"54 )55 56 57def process_uvicon_args(args):58 host = env.get_and_update_env(args, "host", "0.0.0.0", str)59 port = env.get_and_update_env(args, "port", 7870, int)60 reload = env.get_and_update_env(args, "reload", False, bool)61 workers = env.get_and_update_env(args, "workers", 1, int)62 log_level = env.get_and_update_env(args, "log_level", "info", str)63 access_log = env.get_and_update_env(args, "access_log", True, bool)64 proxy_headers = env.get_and_update_env(args, "proxy_headers", True, bool)65 timeout_keep_alive = env.get_and_update_env(args, "timeout_keep_alive", 5, int)66 timeout_graceful_shutdown = env.get_and_update_env(67 args, "timeout_graceful_shutdown", 0, int68 )69 ssl_keyfile = env.get_and_update_env(args, "ssl_keyfile", None, str)70 ssl_certfile = env.get_and_update_env(args, "ssl_certfile", None, str)71 ssl_keyfile_password = env.get_and_update_env(72 args, "ssl_keyfile_password", None, str73 )74 75 uvicorn.run(76 "modules.api.worker:app",77 host=host,78 port=port,79 reload=reload,80 workers=workers,81 log_level=log_level,82 access_log=access_log,83 proxy_headers=proxy_headers,84 timeout_keep_alive=timeout_keep_alive,85 timeout_graceful_shutdown=timeout_graceful_shutdown,86 ssl_keyfile=ssl_keyfile,87 ssl_certfile=ssl_certfile,88 ssl_keyfile_password=ssl_keyfile_password,89 )90 91 92if __name__ == "__main__":93 import dotenv94 95 dotenv.load_dotenv(96 dotenv_path=os.getenv("ENV_FILE", ".env.api"),97 )98 parser = argparse.ArgumentParser(99 description="Start the FastAPI server with command line arguments"100 )101 # NOTE: 主进程中不需要处理 model args / api args,但是要接收这些参数, 具体处理在 worker.py 中102 setup_api_args(parser=parser)103 setup_model_args(parser=parser)104 setup_uvicon_args(parser=parser)105 106 args = parser.parse_args()107 108 process_uvicon_args(args)109 