From 1e9be02770f3ef506af3ce30b17fa12ca5d844ed Mon Sep 17 00:00:00 2001 From: ebolam Date: Fri, 30 Sep 2022 08:34:37 -0400 Subject: [PATCH] Additional speed improvements --- aiserver.py | 2 ++ koboldai_settings.py | 27 +++++++++++-------- static/koboldai.js | 62 +++++++++++++++++++++++--------------------- 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/aiserver.py b/aiserver.py index 17b56cd7..981a194c 100644 --- a/aiserver.py +++ b/aiserver.py @@ -8246,10 +8246,12 @@ def story_sort(base_path, desc=False): @socketio.on('load_story') @logger.catch def UI_2_load_story(file): + start_time = time.time() logger.debug("got a call or loading a story: {}".format(file)) if koboldai_vars.debug: print("loading {}".format(file)) loadRequest(file) + logger.debug("Load Story took {}s".format(time.time()-start_time)) #==================================================================# # Event triggered on load story diff --git a/koboldai_settings.py b/koboldai_settings.py index 974b1028..fff681f8 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -456,6 +456,7 @@ class settings(object): if 'no_save' in self.__dict__: setattr(self, 'no_save', True) for key, value in json_data.items(): + start_time = time.time() if key in self.__dict__ and key not in self.no_save_variables: if key == 'sampler_order': if(len(value) < 7): @@ -480,6 +481,7 @@ class settings(object): getattr(self, key).load_json(value) else: setattr(self, key, value) + logger.debug("Loading {} took {}s".format(key, time.time()- start_time)) if 'no_save' in self.__dict__: setattr(self, 'no_save', False) @@ -738,7 +740,7 @@ class story_settings(settings): wi.get("constant", False), wi["content"], wi.get("comment", ""), - v1_uid=wi['uid']) + v1_uid=wi['uid'], sync=False) new_world_info.socketio = self.socketio self.worldinfo_v2 = new_world_info @@ -1098,13 +1100,12 @@ class KoboldStoryRegister(object): if type(json_data) == str: import json json_data = json.loads(json_data) + self.action_count = json_data['action_count'] #JSON forces keys to be strings, so let's fix that temp = {} for item in json_data['actions']: temp[int(item)] = json_data['actions'][item] process_variable_changes(self.socketio, "story", 'actions', {"id": item, 'action': temp[int(item)]}, None) - - self.action_count = json_data['action_count'] self.actions = temp self.set_game_saved() self.story_settings.save_story() @@ -1550,7 +1551,7 @@ class KoboldWorldInfo(object): def add_item(self, title, key, keysecondary, folder, constant, manual_text, comment, use_wpp=False, wpp={'name': "", 'type': "", 'format': "W++", 'attributes': {}}, - v1_uid=None, recalc=True): + v1_uid=None, recalc=True, sync=True): if len(self.world_info) == 0: uid = 0 else: @@ -1568,10 +1569,10 @@ class KoboldWorldInfo(object): content = "{} ]".format(content[:-1]) else: content = manual_text - if self.tokenizer is not None: - token_length = len(self.tokenizer.encode(content)) - else: - token_length = 0 + #if self.tokenizer is not None: + # token_length = len(self.tokenizer.encode(content)) + #else: + token_length = 0 if folder is None: folder = "root" @@ -1610,7 +1611,8 @@ class KoboldWorldInfo(object): self.world_info_folder[folder] = [] self.world_info_folder[folder].append(uid) self.story_settings.gamesaved = False - self.sync_world_info_to_old_format() + if sync: + self.sync_world_info_to_old_format() 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") @@ -1742,6 +1744,7 @@ class KoboldWorldInfo(object): #Add the item for uid, item in data['entries'].items(): + start_time = time.time() self.add_item(item['title'] if 'title' in item else item['key'][0], item['key'] if 'key' in item else [], item['keysecondary'] if 'keysecondary' in item else [], @@ -1751,10 +1754,12 @@ class KoboldWorldInfo(object): item['comment'] if 'comment' in item else '', use_wpp=item['use_wpp'] if 'use_wpp' in item else False, wpp=item['wpp'] if 'wpp' in item else {'name': "", 'type': "", 'format': "W++", 'attributes': {}}, - recalc=False) - + recalc=False, sync=False) + logger.debug("Load World Info {} took {}s".format(uid, time.time()-start_time)) try: + start_time = time.time() self.sync_world_info_to_old_format() + logger.debug("Syncing WI2 to WI1 took {}s".format(time.time()-start_time)) except: print(self.world_info) print(data) diff --git a/static/koboldai.js b/static/koboldai.js index 00d4c662..5d3b95d4 100644 --- a/static/koboldai.js +++ b/static/koboldai.js @@ -114,6 +114,7 @@ map2.set(5, 'Temperature') map2.set(6, 'Repetition Penalty') var calc_token_usage_timeout; var game_text_scroll_timeout; +var world_info_scroll_timeout; var font_size_cookie_timout; var var_processing_time = 0; var finder_last_input; @@ -140,6 +141,7 @@ function reset_story() { clearTimeout(calc_token_usage_timeout); clearTimeout(game_text_scroll_timeout); clearTimeout(font_size_cookie_timout); + clearTimeout(world_info_scroll_timeout); finder_last_input = null; on_new_wi_item = null; current_chunk_number = null; @@ -320,8 +322,11 @@ function do_story_text_updates(data) { story_area.append(span); - clearTimeout(game_text_scroll_timeout); - game_text_scroll_timeout = setTimeout(function() {document.getElementById("Selected Text").scrollTop = document.getElementById("Selected Text").scrollHeight;}, 500); + if (data.value.id.toString() == document.getElementById('action_count').textContent) { + document.getElementById("Selected Text").scrollTop = document.getElementById("Selected Text").scrollHeight; + } + //clearTimeout(game_text_scroll_timeout); + //game_text_scroll_timeout = setTimeout(function() {document.getElementById("Selected Text").scrollTop = document.getElementById("Selected Text").scrollHeight;}, 500); if (span.textContent != "") { assign_world_info_to_action(span, null); } @@ -3001,8 +3006,11 @@ function create_new_wi_entry(folder) { "wpp": {'name': "", 'type': "", 'format': 'W++', 'attributes': {}}, 'use_wpp': false, }; - card = world_info_entry(data); - card.scrollIntoView(false); + var card = world_info_entry(data); + //card.scrollIntoView(false); + clearTimeout(world_info_scroll_timeout); + world_info_scroll_timeout = setTimeout(function() {card.scrollIntoView(false);}, 200); + } function hide_wi_folder(folder) { @@ -3142,34 +3150,30 @@ function assign_world_info_to_action(action_item, uid) { //First check to see if we have a key in the text for (const [key, worldinfo] of Object.entries(worldinfo_to_check)) { //remove any world info tags on the overall chunk - for (tag of action.getElementsByClassName("tag_uid_"+uid)) { - tag.classList.remove("tag_uid_"+uid); - tag.removeAttribute("title"); - current_ids = tag.parentElement.getAttribute("world_info_uids").split(","); - removeA(current_ids, uid); - tag.parentElement.setAttribute("world_info_uids", current_ids.join(",")); - } - if (worldinfo.key == undefined) { - console.log(uid); - console.log(key); - console.log(worldinfo); - console.log(world_info_data); - } - for (keyword of worldinfo['key']) { - if ((action.textContent.replace(/[^0-9a-z \'\"]/gi, '')).includes(keyword)) { - //Ok we have a key match, but we need to check for secondary keys if applicable - if (worldinfo['keysecondary'].length > 0) { - for (second_key of worldinfo['keysecondary']) { - if (action.textContent.replace(/[^0-9a-z \'\"]/gi, '').includes(second_key)) { - highlight_world_info_text_in_chunk(action, worldinfo); - break; + if (worldinfo['constant'] == false) { + for (tag of action.getElementsByClassName("tag_uid_"+uid)) { + tag.classList.remove("tag_uid_"+uid); + tag.removeAttribute("title"); + current_ids = tag.parentElement.getAttribute("world_info_uids").split(","); + removeA(current_ids, uid); + tag.parentElement.setAttribute("world_info_uids", current_ids.join(",")); + } + for (keyword of worldinfo['key']) { + if ((action.textContent.replace(/[^0-9a-z \'\"]/gi, '')).includes(keyword)) { + //Ok we have a key match, but we need to check for secondary keys if applicable + if (worldinfo['keysecondary'].length > 0) { + for (second_key of worldinfo['keysecondary']) { + if (action.textContent.replace(/[^0-9a-z \'\"]/gi, '').includes(second_key)) { + highlight_world_info_text_in_chunk(action, worldinfo); + break; + } } + } else { + highlight_world_info_text_in_chunk(action, worldinfo); + break; } - } else { - highlight_world_info_text_in_chunk(action, worldinfo); - break; + } - } } }