From ae226eaac95058ef9102de04fcc3512e02c53adf Mon Sep 17 00:00:00 2001 From: ebolam Date: Fri, 9 Dec 2022 14:42:21 -0500 Subject: [PATCH 1/4] Regression fix on model settings file from United import --- aiserver.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/aiserver.py b/aiserver.py index 38ec34a1..92dcd2f1 100644 --- a/aiserver.py +++ b/aiserver.py @@ -1268,14 +1268,6 @@ def loadsettings(): with open("settings/" + getmodelname().replace('/', '_') + ".v2_settings", "r") as file: getattr(koboldai_vars, "_model_settings").from_json(file.read()) - file.close() - if(path.exists(get_config_filename())): - # Read file contents into JSON object - file = open(get_config_filename(), "r") - js = json.load(file) - - processsettings(js) - file.close() def processsettings(js): # Copy file contents to vars From 65c654cb2e912dc323d22905d8c6034583f00911 Mon Sep 17 00:00:00 2001 From: ebolam Date: Fri, 9 Dec 2022 14:43:12 -0500 Subject: [PATCH 2/4] Update for slow text generation --- koboldai_settings.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/koboldai_settings.py b/koboldai_settings.py index 4a63dbcd..2b1b9cb6 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -18,6 +18,9 @@ serverstarted = False queue = None multi_story = False +if importlib.util.find_spec("tortoise") is not None: + from tortoise import api + from tortoise.utils.audio import load_voices def clean_var_for_emit(value): if isinstance(value, KoboldStoryRegister) or isinstance(value, KoboldWorldInfo): @@ -1983,16 +1986,16 @@ class KoboldStoryRegister(object): def create_wave_slow(self, make_audio_queue_slow): import pydub sample_rate = 24000 + speaker = 'train_daws' if self.tortoise is None: - try: - from tortoise import api - self.tortoise=api.TextToSpeech() - except: - self.tortoise = False + self.tortoise=api.TextToSpeech() - if self.tortoise is not False: + if importlib.util.find_spec("tortoise") is not None: + voice_samples, conditioning_latents = load_voices([speaker]) while not make_audio_queue_slow.empty(): + start_time = time.time() (text, filename) = make_audio_queue_slow.get() + text_length = len(text) logger.info("Creating audio for {}".format(os.path.basename(filename))) if text.strip() == "": shutil.copy("data/empty_audio.ogg", filename) @@ -2003,13 +2006,14 @@ class KoboldStoryRegister(object): text = [text] output = None for process_text in text: - audio = self.tortoise.tts_with_preset(process_text, preset='fast').numpy() + audio = self.tortoise.tts_with_preset(process_text, preset='ultra_fast', voice_samples=voice_samples, conditioning_latents=conditioning_latents).numpy() channels = 2 if (audio.ndim == 2 and audio.shape[1] == 2) else 1 if output is None: output = pydub.AudioSegment(np.int16(audio * 2 ** 15).tobytes(), frame_rate=sample_rate, sample_width=2, channels=channels) else: output = output + pydub.AudioSegment(np.int16(audio * 2 ** 15).tobytes(), frame_rate=sample_rate, sample_width=2, channels=channels) output.export(filename, format="ogg", bitrate="16k") + logger.info("Slow audio took {} for {} characters".format(time.time()-start_time, text_length)) def gen_all_audio(self, overwrite=False): From f4c51b13e8e7011ab13a94a78610180cffc3cba9 Mon Sep 17 00:00:00 2001 From: somebody Date: Fri, 9 Dec 2022 15:38:27 -0600 Subject: [PATCH 3/4] More details on load failure --- koboldai_settings.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/koboldai_settings.py b/koboldai_settings.py index 2b1b9cb6..431d376c 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -929,7 +929,7 @@ class story_settings(settings): if self.story_id == j["story_id"]: break except FileNotFoundError: - raise FileNotFoundError("Malformed save file: Missing story.json") + raise FileNotFoundError(f"Malformed save file: Missing story.json in {self.save_paths.base}") disambiguator += 1 self.save_paths.base = os.path.join("stories", save_name + (f" ({disambiguator})" if disambiguator else "")) @@ -946,7 +946,13 @@ class story_settings(settings): logger.info("Migrating v2 save") with open(v2_path, "r") as file: v2j = json.load(file) - assert v2j["story_id"] == self.story_id + + try: + assert v2j["story_id"] == self.story_id + except AssertionError: + logger.error(f"Story mismatch in v2 migration! Existing file had story id {v2j['story_id']} but we have {self.story_id}") + raise + shutil.move(v2_path, os.path.join(self.save_paths.base, ".v2_old.json")) with open(self.save_paths.story, "w") as file: From 59864705f0004c8d207791a753d819959d8d228e Mon Sep 17 00:00:00 2001 From: somebody Date: Fri, 9 Dec 2022 16:49:25 -0600 Subject: [PATCH 4/4] Recover easier from save shenanigans --- koboldai_settings.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/koboldai_settings.py b/koboldai_settings.py index 431d376c..23ffccff 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -929,16 +929,22 @@ class story_settings(settings): if self.story_id == j["story_id"]: break except FileNotFoundError: - raise FileNotFoundError(f"Malformed save file: Missing story.json in {self.save_paths.base}") + logger.error(f"Malformed save file: Missing story.json in {self.save_paths.base}. Populating it with new data.") + break disambiguator += 1 self.save_paths.base = os.path.join("stories", save_name + (f" ({disambiguator})" if disambiguator else "")) - if not os.path.exists(self.save_paths.base): - # We are making the story for the first time. Setup the directory structure. - os.mkdir(self.save_paths.base) - os.mkdir(self.save_paths.generated_audio) - os.mkdir(self.save_paths.generated_images) + # Setup the directory structure. + for path in [ + self.save_paths.base, + self.save_paths.generated_audio, + self.save_paths.generated_images, + ]: + try: + os.mkdir(path) + except FileExistsError: + pass # Convert v2 if applicable v2_path = os.path.join("stories", f"{self.story_name}_v2.json") @@ -947,13 +953,10 @@ class story_settings(settings): with open(v2_path, "r") as file: v2j = json.load(file) - try: - assert v2j["story_id"] == self.story_id - except AssertionError: - logger.error(f"Story mismatch in v2 migration! Existing file had story id {v2j['story_id']} but we have {self.story_id}") - raise - - shutil.move(v2_path, os.path.join(self.save_paths.base, ".v2_old.json")) + if v2j["story_id"] == self.story_id: + shutil.move(v2_path, os.path.join(self.save_paths.base, ".v2_old.json")) + else: + logger.warning(f"Story mismatch in v2 migration. Existing file had story id {v2j['story_id']} but we have {self.story_id}") with open(self.save_paths.story, "w") as file: file.write(self.to_json())