Artrajz's picture
init
960cd20
raw
history blame
5.32 kB
import logging
import os
from flask import Blueprint, request, render_template, make_response, jsonify
from flask_login import login_required
from contants import config
from tts_app.model_manager import model_manager
admin = Blueprint('admin', __name__)
def extract_filename_and_directory(path):
filename = os.path.basename(path)
directory = os.path.dirname(path)
directory_name = os.path.basename(directory)
if not directory: # 如果文件所在文件夹为空(即在根目录)
return filename
else:
return directory_name + "/" + filename
@admin.route('/')
@login_required
def home():
return render_template('pages/home.html')
@admin.route('/setting')
@login_required
def setting():
return render_template('pages/setting.html')
@admin.route('/get_models_info', methods=["GET", "POST"])
@login_required
def get_models_info():
loaded_models_info = model_manager.get_models_info()
for models in loaded_models_info.values():
for model in models:
if model.get("model_path") is not None:
model["model_path"] = extract_filename_and_directory(model["model_path"])
if model.get("config_path") is not None:
model["config_path"] = extract_filename_and_directory(model["config_path"])
if model.get("sovits_path") is not None:
model["sovits_path"] = extract_filename_and_directory(model["sovits_path"])
if model.get("gpt_path") is not None:
model["gpt_path"] = extract_filename_and_directory(model["gpt_path"])
return loaded_models_info
@admin.route('/load_model', methods=["GET", "POST"])
@login_required
def load_model():
if request.method == "GET":
request_data = request.args
elif request.method == "POST":
content_type = request.headers.get('Content-Type')
if content_type == 'application/json':
request_data = request.get_json()
else:
request_data = request.form
model_path = request_data.get("model_path")
config_path = request_data.get("config_path")
sovits_path = request_data.get("sovits_path")
gpt_path = request_data.get("gpt_path")
if model_path is not None and config_path is not None:
logging.info(f"Loading model model_path: {model_path} config_path: {config_path}")
else:
logging.info(f"Loading model sovits_path: {sovits_path} gpt_path: {gpt_path}")
state = model_manager.load_model(model_path=model_path,
config_path=config_path,
sovits_path=sovits_path,
gpt_path=gpt_path)
if state:
status = "success"
response_code = 200
else:
status = "failed"
response_code = 500
return make_response(jsonify({"status": status}), response_code)
@admin.route('/unload_model', methods=["GET", "POST"])
@login_required
def unload_model():
if request.method == "GET":
request_data = request.args
elif request.method == "POST":
content_type = request.headers.get('Content-Type')
if content_type == 'application/json':
request_data = request.get_json()
else:
request_data = request.form
model_type = request_data.get("model_type")
model_id = request_data.get("model_id")
logging.info(f"Unloading model. model_type: {model_type} model_id: {model_id}")
state = model_manager.unload_model(model_type, model_id)
if state:
status = "success"
response_code = 200
else:
status = "failed"
response_code = 500
return make_response(jsonify({"status": status}), response_code)
@admin.route('/get_path', methods=["GET", "POST"])
@login_required
def get_path():
return model_manager.scan_unload_path()
@admin.route('/get_config', methods=["GET", "POST"])
@login_required
def get_config():
return jsonify(config.asdict())
@admin.route('/set_config', methods=["GET", "POST"])
@login_required
def set_config():
if request.method == "POST":
content_type = request.headers.get('Content-Type')
if content_type == 'application/json':
request_data = request.get_json()
else:
request_data = request.form
# try:
# new_config = dict(request_data)
# config.update_config(new_config)
# status = "success"
# code = 200
# except Exception as e:
# status = "failed"
# code = 500
# logging.error(e)
new_config = dict(request_data)
config.update_config(new_config)
config.save_config(config)
status = "success"
code = 200
return make_response(jsonify({"status": status}), code)
@admin.route('/save_current_model', methods=["GET", "POST"])
@login_required
def save_current_model():
try:
models_path = model_manager.get_models_path()
models = {"models": models_path}
config.update_config({"tts_config": models})
config.save_config(config)
status = "success"
response_code = 200
except Exception as e:
status = "failed"
response_code = 500
logging.info(e)
return make_response(jsonify({"status": status}), response_code)