Spaces:
Sleeping
Sleeping
import logging | |
from modules.devices import devices | |
import argparse | |
import torch | |
from modules import config | |
from modules.utils import env | |
from modules import generate_audio | |
from modules.api.Api import APIManager | |
from modules.api.impl import ( | |
style_api, | |
tts_api, | |
ssml_api, | |
google_api, | |
openai_api, | |
refiner_api, | |
speaker_api, | |
ping_api, | |
models_api, | |
) | |
logger = logging.getLogger(__name__) | |
def create_api(app, 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) | |
return app_mgr | |
def setup_model_args(parser: argparse.ArgumentParser): | |
parser.add_argument("--compile", action="store_true", help="Enable model compile") | |
parser.add_argument( | |
"--half", | |
action="store_true", | |
help="Enable half precision for model inference", | |
) | |
parser.add_argument( | |
"--off_tqdm", | |
action="store_true", | |
help="Disable tqdm progress bar", | |
) | |
parser.add_argument( | |
"--device_id", | |
type=str, | |
help="Select the default CUDA device to use (export CUDA_VISIBLE_DEVICES=0,1,etc might be needed before)", | |
default=None, | |
) | |
parser.add_argument( | |
"--use_cpu", | |
nargs="+", | |
help="use CPU as torch device for specified modules", | |
default=[], | |
type=str.lower, | |
) | |
parser.add_argument( | |
"--lru_size", | |
type=int, | |
default=64, | |
help="Set the size of the request cache pool, set it to 0 will disable lru_cache", | |
) | |
parser.add_argument( | |
"--debug_generate", | |
action="store_true", | |
help="Enable debug mode for audio generation", | |
) | |
def process_model_args(args): | |
lru_size = env.get_and_update_env(args, "lru_size", 64, int) | |
compile = env.get_and_update_env(args, "compile", False, bool) | |
device_id = env.get_and_update_env(args, "device_id", None, str) | |
use_cpu = env.get_and_update_env(args, "use_cpu", [], list) | |
half = env.get_and_update_env(args, "half", False, bool) | |
off_tqdm = env.get_and_update_env(args, "off_tqdm", False, bool) | |
debug_generate = env.get_and_update_env(args, "debug_generate", False, bool) | |
generate_audio.setup_lru_cache() | |
devices.reset_device() | |
devices.first_time_calculation() | |
if debug_generate: | |
generate_audio.logger.setLevel(logging.DEBUG) | |
def setup_uvicon_args(parser: argparse.ArgumentParser): | |
parser.add_argument("--host", type=str, help="Host to run the server on") | |
parser.add_argument("--port", type=int, help="Port to run the server on") | |
parser.add_argument( | |
"--reload", action="store_true", help="Enable auto-reload for development" | |
) | |
parser.add_argument("--workers", type=int, help="Number of worker processes") | |
parser.add_argument("--log_level", type=str, help="Log level") | |
parser.add_argument("--access_log", action="store_true", help="Enable access log") | |
parser.add_argument( | |
"--proxy_headers", action="store_true", help="Enable proxy headers" | |
) | |
parser.add_argument( | |
"--timeout_keep_alive", type=int, help="Keep-alive timeout duration" | |
) | |
parser.add_argument( | |
"--timeout_graceful_shutdown", | |
type=int, | |
help="Graceful shutdown timeout duration", | |
) | |
parser.add_argument("--ssl_keyfile", type=str, help="SSL key file path") | |
parser.add_argument("--ssl_certfile", type=str, help="SSL certificate file path") | |
parser.add_argument( | |
"--ssl_keyfile_password", type=str, help="SSL key file password" | |
) | |
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, app): | |
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") | |