import argparse import logging from fastapi import FastAPI from modules import config from modules.api.Api import APIManager from modules.api.impl import ( google_api, models_api, openai_api, ping_api, refiner_api, speaker_api, ssml_api, style_api, tts_api, xtts_v2_api, ) from modules.utils import env logger = logging.getLogger(__name__) def create_api(app: FastAPI, exclude=[]): app_mgr = APIManager(app=app, exclude_patterns=exclude) ping_api.setup(app_mgr) models_api.setup(app_mgr) style_api.setup(app_mgr) speaker_api.setup(app_mgr) tts_api.setup(app_mgr) ssml_api.setup(app_mgr) google_api.setup(app_mgr) openai_api.setup(app_mgr) refiner_api.setup(app_mgr) xtts_v2_api.setup(app_mgr) return app_mgr def setup_api_args(parser: argparse.ArgumentParser): parser.add_argument( "--cors_origin", type=str, help="Allowed CORS origins. Use '*' to allow all origins.", ) parser.add_argument( "--no_playground", action="store_true", help="Disable the playground entry", ) parser.add_argument( "--no_docs", action="store_true", help="Disable the documentation entry", ) # 配置哪些api要跳过 比如 exclude="/v1/speakers/*,/v1/tts/*" parser.add_argument( "--exclude", type=str, help="Exclude the specified API from the server", ) def process_api_args(args: argparse.Namespace, app: FastAPI): cors_origin = env.get_and_update_env(args, "cors_origin", "*", str) no_playground = env.get_and_update_env(args, "no_playground", False, bool) no_docs = env.get_and_update_env(args, "no_docs", False, bool) exclude = env.get_and_update_env(args, "exclude", "", str) api = create_api(app=app, exclude=exclude.split(",")) config.api = api if cors_origin: api.set_cors(allow_origins=[cors_origin]) if not no_playground: api.setup_playground() if compile: logger.info("Model compile is enabled")