From f4c51b13e8e7011ab13a94a78610180cffc3cba9 Mon Sep 17 00:00:00 2001 From: somebody Date: Fri, 9 Dec 2022 15:38:27 -0600 Subject: [PATCH 1/2] 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 2/2] 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())