From b097d436a2c43efd0df66891aadec4c8522ce0ce Mon Sep 17 00:00:00 2001 From: ebolam Date: Fri, 23 Sep 2022 14:35:02 -0400 Subject: [PATCH] Working Sync from Original UI to New UI for world info entries --- aiserver.py | 17 ++++++++--- koboldai_settings.py | 68 ++++++++++++++++++++++++++++++-------------- 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/aiserver.py b/aiserver.py index b2b6e0da..bb622059 100644 --- a/aiserver.py +++ b/aiserver.py @@ -3277,6 +3277,8 @@ def lua_set_attr(uid, k, v): assert type(koboldai_vars.worldinfo_u[uid][k]) is type(v) koboldai_vars.worldinfo_u[uid][k] = v print(colors.GREEN + f"{lua_log_format_name(koboldai_vars.lua_koboldbridge.logging_name)} set {k} of world info entry {uid} to {v}" + colors.END) + koboldai_vars.sync_worldinfo_v1_to_v2() + sendwi() #==================================================================# # Get property of a world info folder given its UID and property name @@ -3303,6 +3305,8 @@ def lua_folder_set_attr(uid, k, v): assert type(koboldai_vars.wifolders_d[uid][k]) is type(v) koboldai_vars.wifolders_d[uid][k] = v print(colors.GREEN + f"{lua_log_format_name(koboldai_vars.lua_koboldbridge.logging_name)} set {k} of world info folder {uid} to {v}" + colors.END) + koboldai_vars.sync_worldinfo_v1_to_v2() + sendwi() #==================================================================# # Get the "Amount to Generate" @@ -6059,6 +6063,8 @@ def commitwi(ar): koboldai_vars.worldinfo_u[ob["uid"]]["constant"] = ob.get("constant", False) stablesortwi() koboldai_vars.worldinfo_i = [wi for wi in koboldai_vars.worldinfo if wi["init"]] + koboldai_vars.sync_worldinfo_v1_to_v2() + sendwi() #==================================================================# # @@ -6699,7 +6705,7 @@ def load_story_v1(js): num = 0 for wi in js["worldinfo"]: koboldai_vars.worldinfo_v2.add_item([x.strip() for x in wi["key"].split(",")][0], wi["key"], wi.get("keysecondary", ""), - wi.get("folder", "root"), wi.get("constant", False), + "root" if wi.get("folder", "root") == 'root' else js['wifolders_d'][wi['folder']]['name'], wi.get("constant", False), wi["content"], wi.get("comment", "")) # Save path for save button @@ -8580,10 +8586,8 @@ def summarize(text, max_length=100, min_length=30): return output - - #==================================================================# -# Test +# Auto-memory function #==================================================================# @socketio.on("refresh_auto_memory") @logger.catch @@ -8620,6 +8624,11 @@ def UI_2_refresh_auto_memory(data): output = summarize(" ".join(sentences)) koboldai_vars.auto_memory += "\n\n Final Result:\n" + output + +#==================================================================# +# Test +#==================================================================# + @app.route("/vars") @logger.catch def show_vars(): diff --git a/koboldai_settings.py b/koboldai_settings.py index c6a4c7f5..86e43b77 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -675,7 +675,19 @@ class story_settings(settings): self.socketio.emit("reset_story", {}, broadcast=True, room="UI_2") self.__init__(self.socketio, self.koboldai_vars, tokenizer=self.tokenizer) self.no_save = False + + def sync_worldinfo_v1_to_v2(self): + new_world_info = KoboldWorldInfo(None, self, self.koboldai_vars, tokenizer=self.tokenizer) + for wi in self.worldinfo: + if wi['init'] == True: + new_world_info.add_item([x.strip() for x in wi["key"].split(",")][0], wi["key"], wi.get("keysecondary", ""), + "root" if wi["folder"] is None else self.wifolders_d[wi['folder']]['name'], wi.get("constant", False), + wi["content"], wi.get("comment", ""), v1_uid=wi['uid']) + new_world_info.socketio = self.socketio + self.worldinfo_v2 = new_world_info + + def __setattr__(self, name, value): new_variable = name not in self.__dict__ old_value = getattr(self, name, None) @@ -1422,7 +1434,8 @@ class KoboldWorldInfo(object): self.world_info_folder[folder] = [] self.story_settings.gamesaved = False self.sync_world_info_to_old_format() - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") def delete_folder(self, folder): keys = [key for key in self.world_info] @@ -1431,7 +1444,8 @@ class KoboldWorldInfo(object): self.delete(key) if folder in self.world_info_folder: del self.world_info_folder[folder] - self.socketio.emit("delete_world_info_folder", folder, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("delete_world_info_folder", folder, broadcast=True, room="UI_2") def add_item_to_folder(self, uid, folder, before=None): if uid in self.world_info: @@ -1454,9 +1468,10 @@ class KoboldWorldInfo(object): self.world_info[uid]['folder'] = folder self.story_settings.gamesaved = False self.sync_world_info_to_old_format() - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") - def add_item(self, title, key, keysecondary, folder, constant, manual_text, comment, use_wpp=False, wpp={'name': "", 'type': "", 'format': "W++", 'attributes': {}}): + def add_item(self, title, key, keysecondary, folder, constant, manual_text, comment, use_wpp=False, wpp={'name': "", 'type': "", 'format': "W++", 'attributes': {}}, v1_uid=None): if len(self.world_info) == 0: uid = 0 else: @@ -1504,7 +1519,8 @@ class KoboldWorldInfo(object): "selective": len(keysecondary) > 0, "used_in_game": constant, 'wpp': wpp, - 'use_wpp': use_wpp + 'use_wpp': use_wpp, + 'v1_uid': v1_uid } except: print("Error:") @@ -1517,8 +1533,9 @@ class KoboldWorldInfo(object): self.story_settings.gamesaved = False self.sync_world_info_to_old_format() - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") - self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") ignore = self.koboldai_vars.calc_ai_text() return uid @@ -1566,8 +1583,9 @@ class KoboldWorldInfo(object): self.story_settings.gamesaved = False self.sync_world_info_to_old_format() - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") - self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") ignore = self.koboldai_vars.calc_ai_text() def delete(self, uid): @@ -1578,8 +1596,9 @@ class KoboldWorldInfo(object): self.story_settings.gamesaved = False self.sync_world_info_to_old_format() - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") - self.socketio.emit("delete_world_info_entry", uid, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + self.socketio.emit("delete_world_info_entry", uid, broadcast=True, room="UI_2") def rename_folder(self, old_folder, folder): self.story_settings.gamesaved = False @@ -1607,16 +1626,18 @@ class KoboldWorldInfo(object): self.story_settings.gamesaved = False self.sync_world_info_to_old_format() - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") def reorder(self, uid, before): self.add_item_to_folder(uid, self.world_info[before]['folder'], before=before) self.sync_world_info_to_old_format() def send_to_ui(self): - self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") - for uid in self.world_info: - self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") + for uid in self.world_info: + self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") def to_json(self, folder=None): if folder is None: @@ -1636,7 +1657,7 @@ class KoboldWorldInfo(object): self.world_info_folder = data['folders'] #Make sure we have all the appropriate variables: for item in self.world_info: - for column in ["uid","title","key","keysecondary","folder","constant","content","comment","token_length","selective","used_in_game"]: + for column in ["uid","title","key","keysecondary","folder","constant","content","comment","token_length","selective","used_in_game", 'v1_uid']: if column not in self.world_info[item]: self.world_info[item][column] = None if "wpp" not in self.world_info[item]: @@ -1678,17 +1699,18 @@ class KoboldWorldInfo(object): "keysecondary": ",".join(self.world_info[x]['keysecondary']), "num": x, "selective": len(self.world_info[x]['keysecondary'])>0, - "uid": self.world_info[x]['uid'] + "uid": self.world_info[x]['uid'] if self.world_info[x]['v1_uid'] is None else self.world_info[x]['v1_uid'] } for x in self.world_info] #self.worldinfo = [] # List of World Info key/value objects self.story_settings.worldinfo = [x for x in self.story_settings.worldinfo_i] + #We have to have an uninitialized blank entry for every folder or the old method craps out for folder in folder_entries: self.story_settings.worldinfo.append({ "comment": "", "constant": False, "content": "", - "folder": None, + "folder": folder_entries[folder], "init": False, "key": "", "keysecondary": "", @@ -1701,7 +1723,7 @@ class KoboldWorldInfo(object): self.story_settings.wifolders_d = {folder_entries[x]: {'collapsed': False, 'name': x} for x in folder_entries} #self.worldinfo_u = {} # Dictionary of World Info UID - key/value pairs - self.story_settings.worldinfo_u = {x['uid']: x for x in self.story_settings.worldinfo_i} + self.story_settings.worldinfo_u = {x['uid']: x for x in self.story_settings.worldinfo} #self.wifolders_l = [] # List of World Info folder UIDs self.story_settings.wifolders_l = [folder_entries[x] for x in folder_entries] @@ -1709,15 +1731,19 @@ class KoboldWorldInfo(object): #self.wifolders_u = {} # Dictionary of pairs of folder UID - list of WI UID self.story_settings.wifolders_u = {folder_entries[x]: [y for y in self.story_settings.worldinfo if y['folder'] == x] for x in folder_entries} + print(self.story_settings.worldinfo) + def reset_used_in_game(self): for key in self.world_info: if self.world_info[key]["used_in_game"] != self.world_info[key]["constant"]: self.world_info[key]["used_in_game"] = self.world_info[key]["constant"] - self.socketio.emit("world_info_entry_used_in_game", {"uid": key, "used_in_game": False}, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_entry_used_in_game", {"uid": key, "used_in_game": False}, broadcast=True, room="UI_2") def set_world_info_used(self, uid): self.world_info[uid]["used_in_game"] = True - self.socketio.emit("world_info_entry_used_in_game", {"uid": uid, "used_in_game": True}, broadcast=True, room="UI_2") + if self.socketio is not None: + self.socketio.emit("world_info_entry_used_in_game", {"uid": uid, "used_in_game": True}, broadcast=True, room="UI_2") def get_used_wi(self): return [x['content'] for x in self.world_info if x['used_in_game']]