From da036ce71251f780d25fd4b7ce90092f1e92ce4d Mon Sep 17 00:00:00 2001 From: ebolam Date: Tue, 16 Aug 2022 13:09:13 -0400 Subject: [PATCH 1/3] Fix for critical bug on saving causing infinite loop --- aiserver.py | 2 ++ koboldai_settings.py | 21 ++++++++++++++++++--- templates/index_new.html | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/aiserver.py b/aiserver.py index 425862ed..0dee46c3 100644 --- a/aiserver.py +++ b/aiserver.py @@ -6350,12 +6350,14 @@ def UI_2_Set_Selected_Text(data): def UI_2_submit(data): print(data) if not koboldai_vars.noai and data['theme'] != "": + print("doing random prompt") memory = koboldai_vars.memory koboldai_vars.memory = "{}\n\nYou generate the following {} story concept :".format(koboldai_vars.memory, data['theme']) koboldai_vars.lua_koboldbridge.feedback = None actionsubmit("", force_submit=True, force_prompt_gen=True) koboldai_vars.memory = memory else: + print("doing normal input") koboldai_vars.actions.clear_unused_options() koboldai_vars.lua_koboldbridge.feedback = None koboldai_vars.recentrng = koboldai_vars.recentrngm = None diff --git a/koboldai_settings.py b/koboldai_settings.py index 760b8470..a2e01e97 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -38,7 +38,8 @@ def process_variable_changes(socketio, classname, name, value, old_value, debug_ socketio.emit("var_changed", {"classname": "actions", "name": "Selected Text", "old_value": None, "value": {"id": i, "text": value[i]}}, include_self=True, broadcast=True, room="UI_2") socketio.emit("var_changed", {"classname": "actions", "name": "Options", "old_value": None, "value": {"id": i, "options": value.actions[i]['Options']}}, include_self=True, broadcast=True, room="UI_2") socketio.emit("var_changed", {"classname": "actions", "name": "Selected Text Length", "old_value": None, "value": {"id": i, 'length': value.actions[i]['Selected Text Length']}}, include_self=True, broadcast=True, room="UI_2") - socketio.emit("var_changed", {"classname": "actions", "name": "In AI Input", "old_value": None, "value": {"id": i, 'In AI Input': value.actions[i]['In AI Input']}}, include_self=True, broadcast=True, room="UI_2") + if 'In AI Input' in value.actions[i]: + socketio.emit("var_changed", {"classname": "actions", "name": "In AI Input", "old_value": None, "value": {"id": i, 'In AI Input': value.actions[i]['In AI Input']}}, include_self=True, broadcast=True, room="UI_2") elif isinstance(value, KoboldWorldInfo): value.send_to_ui() else: @@ -519,7 +520,21 @@ class story_settings(settings): def save_story(self): print("Saving") save_name = self.story_name if self.story_name != "" else "untitled" - with open("stories/{}_v2.json".format(save_name), "w") as settings_file: + adder = "" + while True: + if os.path.exists("stories/{}{}_v2.json".format(save_name, adder)): + with open("stories/{}{}_v2.json".format(save_name, adder), "r") as f: + temp = json.load(f) + if 'story_id' in temp: + if self.story_id != temp['story_id']: + adder = 0 if adder == "" else adder+1 + else: + break + else: + adder = 0 if adder == "" else adder+1 + else: + break + with open("stories/{}{}_v2.json".format(save_name, adder), "w") as settings_file: settings_file.write(self.to_json()) self.gamesaved = True @@ -1019,7 +1034,7 @@ class KoboldWorldInfo(object): self.story_settings = story_settings def reset(self): - self.__init__(self.socketio, self.story_settings, self.tokenizer) + self.__init__(self.socketio, self.story_settings, self.koboldai_vars, self.tokenizer) def __iter__(self): self.itter = -1 diff --git a/templates/index_new.html b/templates/index_new.html index 51045d63..2fd2ce6a 100644 --- a/templates/index_new.html +++ b/templates/index_new.html @@ -69,7 +69,7 @@
0%

From bbbfdf3e455386cdd74a2eb9f0f0d2e5adfb3cb4 Mon Sep 17 00:00:00 2001 From: ebolam Date: Tue, 16 Aug 2022 13:17:16 -0400 Subject: [PATCH 2/3] Fix for game screen messed up when left menu unpinned and right pinned --- static/koboldai.css | 14 ++++++++++---- static/koboldai.js | 8 ++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/static/koboldai.css b/static/koboldai.css index b7a84b25..453f6974 100644 --- a/static/koboldai.css +++ b/static/koboldai.css @@ -45,12 +45,18 @@ --wi_tag_color: #337ab7; --sample_order_select_color: blue; --story_options_size: 30%; - --story_pinned_areas: "menuicon options gamescreen lefticon" - "menuicon theme theme lefticon" - "menuicon inputrow inputrow lefticon"; - --story_pinned_area_widths: 30px var(--story_options_size) auto 30px; + --story_pinned_areas_left: "menuicon options gamescreen lefticon" + "menuicon theme theme lefticon" + "menuicon inputrow inputrow lefticon"; + --story_pinned_areas_right: "menuicon gamescreen options lefticon" + "menuicon theme theme lefticon" + "menuicon inputrow inputrow lefticon"; + --story_pinned_area_widths_left: 30px var(--story_options_size) auto 30px; + --story_pinned_area_widths_right: 30px auto var(--story_options_size) 30px; --scrollbar-color: #9b9b9b80; --scrollbar-size: 6px; + --story_pinned_areas: var(--story_pinned_areas_left); + --story_pinned_area_widths: var(--story_pinned_area_widths_left); } /*----------------Folder Tabs--------------------*/ diff --git a/static/koboldai.js b/static/koboldai.js index 565c297c..e27305cb 100644 --- a/static/koboldai.js +++ b/static/koboldai.js @@ -1532,13 +1532,13 @@ function options_on_right(data) { console.log("Setting cookie to: "+data); if (data) { setCookie("options_on_right", "true"); - r.style.setProperty('--story_pinned_areas', '"menuicon gamescreen options lefticon"\n"menuicon inputrow inputrow lefticon"'); - r.style.setProperty('--story_pinned_area_widths', '30px auto var(--story_options_size) 30px'); + r.style.setProperty('--story_pinned_areas', 'var(--story_pinned_areas_right)'); + r.style.setProperty('--story_pinned_area_widths', 'var(--story_pinned_area_widths_right)'); document.getElementById('preserve_game_space_setting').checked = true; } else { setCookie("options_on_right", "false"); - r.style.setProperty('--story_pinned_areas', '"menuicon options gamescreen lefticon"\n"menuicon inputrow inputrow lefticon"'); - r.style.setProperty('--story_pinned_area_widths', '30px var(--story_options_size) auto 30px'); + r.style.setProperty('--story_pinned_areas', 'var(--story_pinned_areas_left)'); + r.style.setProperty('--story_pinned_area_widths', 'var(--story_pinned_area_widths_left)'); document.getElementById('preserve_game_space_setting').checked = false; } } From 56be0715524f3fd4a0aacc8514d8f52a9897148e Mon Sep 17 00:00:00 2001 From: ebolam Date: Tue, 16 Aug 2022 15:05:25 -0400 Subject: [PATCH 3/3] Reworked relay function. Works better now --- aiserver.py | 18 +++++++++++++++--- koboldai_settings.py | 16 ++++------------ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/aiserver.py b/aiserver.py index 0dee46c3..84b92673 100644 --- a/aiserver.py +++ b/aiserver.py @@ -37,6 +37,7 @@ import itertools import bisect import functools import traceback +import multiprocessing from collections.abc import Iterable from collections import OrderedDict from typing import Any, Callable, Optional, TypeVar, Tuple, Union, Dict, Set, List @@ -993,6 +994,12 @@ def general_startup(override_args=None): print("You have selected the following path for your Model :", args.path) koboldai_vars.custmodpth = args.path; koboldai_vars.colaburl = args.path + "/request"; # Lets just use the same parameter to keep it simple + + #setup socketio relay queue + koboldai_settings.queue = multiprocessing.Queue() + #t = threading.Thread(target=socket_io_relay, args=(koboldai_settings.queue, socketio)) + socketio.start_background_task(socket_io_relay, koboldai_settings.queue, socketio) + print("continued") #==================================================================# # Load Model #==================================================================# @@ -6591,9 +6598,14 @@ def UI_2_phrase_bias_update(biases): #==================================================================# # Event triggered to rely a message #==================================================================# -@socketio.on('relay') -def UI_2_relay(data): - socketio.emit(data[0], data[1], **data[2]) +def socket_io_relay(queue, socketio): + while True: + if not queue.empty(): + data = queue.get() + #socketio.emit(data[0], data[1], **data[2]) + socketio.emit(data[0], data[1], broadcast=True, room="UI_2") + time.sleep(0) + #==================================================================# # Event triggered when program errors out diff --git a/koboldai_settings.py b/koboldai_settings.py index a2e01e97..e418b2c9 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -3,11 +3,12 @@ from io import BytesIO from flask import has_request_context import socketio as socketio_client from collections import OrderedDict +import requests rely_clients = {} serverstarted = False port = 5000 - +queue = None def clean_var_for_emit(value): if isinstance(value, KoboldStoryRegister) or isinstance(value, KoboldWorldInfo): @@ -45,17 +46,8 @@ def process_variable_changes(socketio, classname, name, value, old_value, debug_ else: #If we got a variable change from a thread other than what the app is run it, eventlet seems to block and no further messages are sent. Instead, we'll rely the message to the app and have the main thread send it if not has_request_context(): - if threading.get_ident() in rely_clients: - sio = rely_clients[threading.get_ident()] - if not sio.connected: - sio = create_loopback_socketio() - else: - sio = create_loopback_socketio() - #release no longer used clients - for thread in rely_clients: - if thread not in [x.ident for x in threading.enumerate()]: - del rely_clients[thread] - sio.emit("relay", ["var_changed", {"classname": classname, "name": name, "old_value": clean_var_for_emit(old_value), "value": clean_var_for_emit(value)}, {"include_self":True, "broadcast":True, "room":"UI_2"}]) + data = ["var_changed", {"classname": classname, "name": name, "old_value": clean_var_for_emit(old_value), "value": clean_var_for_emit(value)}, {"include_self":True, "broadcast":True, "room":"UI_2"}] + queue.put(data) else: socketio.emit("var_changed", {"classname": classname, "name": name, "old_value": clean_var_for_emit(old_value), "value": clean_var_for_emit(value)}, include_self=True, broadcast=True, room="UI_2")