Fix: conflict of current_model in model_holder for multiple requests

This commit is contained in:
litagin02
2024-02-07 15:33:17 +09:00
parent 78689f6c2a
commit d51c8bf639
2 changed files with 17 additions and 1 deletions

6
app.py
View File

@@ -36,6 +36,8 @@ languages = [l.value for l in Languages]
def tts_fn( def tts_fn(
model_name,
model_path,
text, text,
language, language,
reference_audio_path, reference_audio_path,
@@ -54,7 +56,7 @@ def tts_fn(
use_tone, use_tone,
speaker, speaker,
): ):
assert model_holder.current_model is not None model_holder.load_model_gr(model_name, model_path)
wrong_tone_message = "" wrong_tone_message = ""
kata_tone: Optional[list[tuple[str, int]]] = None kata_tone: Optional[list[tuple[str, int]]] = None
@@ -418,6 +420,8 @@ if __name__ == "__main__":
tts_button.click( tts_button.click(
tts_fn, tts_fn,
inputs=[ inputs=[
model_name,
model_path,
text_input, text_input,
language, language,
ref_audio_path, ref_audio_path,

View File

@@ -209,6 +209,18 @@ class ModelHolder:
raise ValueError(f"Model `{model_name}` is not found") raise ValueError(f"Model `{model_name}` is not found")
if model_path not in self.model_files_dict[model_name]: if model_path not in self.model_files_dict[model_name]:
raise ValueError(f"Model file `{model_path}` is not found") raise ValueError(f"Model file `{model_path}` is not found")
if (
self.current_model is not None
and self.current_model.model_path == model_path
):
# Already loaded
speakers = list(self.current_model.spk2id.keys())
styles = list(self.current_model.style2id.keys())
return (
gr.Dropdown(choices=styles, value=styles[0]),
gr.Button(interactive=True, value="音声合成"),
gr.Dropdown(choices=speakers, value=speakers[0]),
)
self.current_model = Model( self.current_model = Model(
model_path=model_path, model_path=model_path,
config_path=os.path.join(self.root_dir, model_name, "config.json"), config_path=os.path.join(self.root_dir, model_name, "config.json"),