Spaces:
Running
Running
antigravity
sync all fixes: prompt leakage, cross-lang, ref_cache update, and file wait logic
c441d2c
| from PySide6.QtCore import Signal, QThread | |
| from ..Utils.Shared import context | |
| from ..Internal import load_character, set_reference_audio | |
| from ..Core.Inference import tts_client | |
| from ..ModelManager import model_manager | |
| class InferenceWorker(QThread): | |
| """执行推理任务的 Worker""" | |
| finished = Signal(bool, str, object) # success, message, data | |
| def __init__(self, request_data: dict, mode: str): | |
| super().__init__() | |
| self.req: dict = request_data | |
| self.mode: str = mode | |
| def run(self) -> None: | |
| try: | |
| if self.mode == 'load_character': | |
| load_character( | |
| character_name=self.req['character_name'], | |
| onnx_model_dir=self.req['onnx_model_dir'], | |
| language=self.req['language'], | |
| ) | |
| self.finished.emit(True, "导入角色完成", None) | |
| elif self.mode == 'set_reference_audio': | |
| set_reference_audio( | |
| character_name=self.req['character_name'], | |
| audio_path=self.req['audio_path'], | |
| audio_text=self.req['audio_text'], | |
| language=self.req['language'], | |
| ) | |
| self.finished.emit(True, "设置参考音频完成", None) | |
| elif self.mode == 'tts': | |
| gsv_model = model_manager.get(self.req['character_name']) | |
| tts_client.stop_event.clear() | |
| audio_chunk = tts_client.tts( | |
| text=self.req['text'], | |
| prompt_audio=context.current_prompt_audio, | |
| encoder=gsv_model.T2S_ENCODER, | |
| first_stage_decoder=gsv_model.T2S_FIRST_STAGE_DECODER, | |
| stage_decoder=gsv_model.T2S_STAGE_DECODER, | |
| vocoder=gsv_model.VITS, | |
| prompt_encoder=gsv_model.PROMPT_ENCODER, | |
| language=gsv_model.LANGUAGE, | |
| ) | |
| audio_chunk = audio_chunk.squeeze() | |
| try: | |
| return_data = { | |
| "sample_rate": 32000, | |
| "audio_list": [audio_chunk], | |
| } | |
| self.finished.emit(True, "推理完成", return_data) | |
| except Exception as e: | |
| self.finished.emit(False, f"数据解析失败: {e}", None) | |
| except Exception as e: | |
| self.finished.emit(False, f"请求异常: {str(e)}", None) | |