mirror of
https://github.com/KoboldAI/KoboldAI-Client.git
synced 2025-06-05 21:59:24 +02:00
More optimizations
This commit is contained in:
18
aiserver.py
18
aiserver.py
@@ -9,7 +9,7 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
import eventlet
|
import eventlet
|
||||||
eventlet.monkey_patch(all=True, thread=False, os=False)
|
eventlet.monkey_patch(all=True, thread=False, os=False)
|
||||||
import os
|
import os, inspect
|
||||||
os.system("")
|
os.system("")
|
||||||
__file__ = os.path.dirname(os.path.realpath(__file__))
|
__file__ = os.path.dirname(os.path.realpath(__file__))
|
||||||
os.chdir(__file__)
|
os.chdir(__file__)
|
||||||
@@ -6962,6 +6962,8 @@ def loadfromfile():
|
|||||||
# Load a stored story from a file
|
# Load a stored story from a file
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
def loadRequest(loadpath, filename=None):
|
def loadRequest(loadpath, filename=None):
|
||||||
|
logger.debug("Load Request")
|
||||||
|
logger.debug("Called from {}".format(inspect.stack()[1].function))
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
if(loadpath):
|
if(loadpath):
|
||||||
# Leave Edit/Memory mode before continuing
|
# Leave Edit/Memory mode before continuing
|
||||||
@@ -6984,6 +6986,8 @@ def loadRequest(loadpath, filename=None):
|
|||||||
logger.debug("Time to load story: {}s".format(time.time()-start_time))
|
logger.debug("Time to load story: {}s".format(time.time()-start_time))
|
||||||
|
|
||||||
def loadJSON(json_text_or_dict):
|
def loadJSON(json_text_or_dict):
|
||||||
|
logger.debug("Loading JSON Story")
|
||||||
|
logger.debug("Called from {}".format(inspect.stack()[1].function))
|
||||||
if isinstance(json_text_or_dict, str):
|
if isinstance(json_text_or_dict, str):
|
||||||
json_data = json.loads(json_text_or_dict)
|
json_data = json.loads(json_text_or_dict)
|
||||||
else:
|
else:
|
||||||
@@ -6995,8 +6999,12 @@ def loadJSON(json_text_or_dict):
|
|||||||
load_story_v1(json_data)
|
load_story_v1(json_data)
|
||||||
else:
|
else:
|
||||||
load_story_v1(json_data)
|
load_story_v1(json_data)
|
||||||
|
logger.debug("Calcing AI Text from Story Load")
|
||||||
|
ignore = koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
def load_story_v1(js):
|
def load_story_v1(js):
|
||||||
|
logger.debug("Loading V1 Story")
|
||||||
|
logger.debug("Called from {}".format(inspect.stack()[1].function))
|
||||||
loadpath = js['v1_loadpath'] if 'v1_loadpath' in js else koboldai_vars.savedir
|
loadpath = js['v1_loadpath'] if 'v1_loadpath' in js else koboldai_vars.savedir
|
||||||
filename = js['v1_filename'] if 'v1_filename' in js else 'untitled.json'
|
filename = js['v1_filename'] if 'v1_filename' in js else 'untitled.json'
|
||||||
|
|
||||||
@@ -7082,8 +7090,7 @@ def load_story_v1(js):
|
|||||||
folder = "root"
|
folder = "root"
|
||||||
koboldai_vars.worldinfo_v2.add_item([x.strip() for x in wi["key"].split(",")][0], wi["key"], wi.get("keysecondary", ""),
|
koboldai_vars.worldinfo_v2.add_item([x.strip() for x in wi["key"].split(",")][0], wi["key"], wi.get("keysecondary", ""),
|
||||||
folder, wi.get("constant", False),
|
folder, wi.get("constant", False),
|
||||||
wi["content"], wi.get("comment", ""), no_recalc=True)
|
wi["content"], wi.get("comment", ""), recalc=False)
|
||||||
koboldai_vars.calc_ai_text()
|
|
||||||
|
|
||||||
# Save path for save button
|
# Save path for save button
|
||||||
koboldai_vars.savedir = loadpath
|
koboldai_vars.savedir = loadpath
|
||||||
@@ -7106,6 +7113,8 @@ def load_story_v1(js):
|
|||||||
send_debug()
|
send_debug()
|
||||||
|
|
||||||
def load_story_v2(js):
|
def load_story_v2(js):
|
||||||
|
logger.debug("Loading V1 Story")
|
||||||
|
logger.debug("Called from {}".format(inspect.stack()[1].function))
|
||||||
leave_room(session['story'])
|
leave_room(session['story'])
|
||||||
session['story'] = js['story_name']
|
session['story'] = js['story_name']
|
||||||
join_room(session['story'])
|
join_room(session['story'])
|
||||||
@@ -8237,6 +8246,7 @@ def story_sort(base_path, desc=False):
|
|||||||
@socketio.on('load_story')
|
@socketio.on('load_story')
|
||||||
@logger.catch
|
@logger.catch
|
||||||
def UI_2_load_story(file):
|
def UI_2_load_story(file):
|
||||||
|
logger.debug("got a call or loading a story: {}".format(file))
|
||||||
if koboldai_vars.debug:
|
if koboldai_vars.debug:
|
||||||
print("loading {}".format(file))
|
print("loading {}".format(file))
|
||||||
loadRequest(file)
|
loadRequest(file)
|
||||||
@@ -8356,6 +8366,8 @@ def UI_2_export_world_info_folder():
|
|||||||
def UI_2_upload_world_info_folder(data):
|
def UI_2_upload_world_info_folder(data):
|
||||||
json_data = json.loads(data['data'])
|
json_data = json.loads(data['data'])
|
||||||
koboldai_vars.worldinfo_v2.load_json(json_data, folder=data['folder'])
|
koboldai_vars.worldinfo_v2.load_json(json_data, folder=data['folder'])
|
||||||
|
logger.debug("Calcing AI Text from WI Upload")
|
||||||
|
koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
@socketio.on('import_world_info')
|
@socketio.on('import_world_info')
|
||||||
@logger.catch
|
@logger.catch
|
||||||
|
@@ -155,7 +155,7 @@ class koboldai_vars(object):
|
|||||||
self._model_settings.reset_for_model_load()
|
self._model_settings.reset_for_model_load()
|
||||||
|
|
||||||
def calc_ai_text(self, submitted_text="", return_text=False):
|
def calc_ai_text(self, submitted_text="", return_text=False):
|
||||||
start_time = time.time()
|
#start_time = time.time()
|
||||||
if self.alt_gen:
|
if self.alt_gen:
|
||||||
method = 2
|
method = 2
|
||||||
else:
|
else:
|
||||||
@@ -382,7 +382,7 @@ class koboldai_vars(object):
|
|||||||
|
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
||||||
logger.debug("Calc_AI_text: {}s".format(time.time()-start_time))
|
#logger.debug("Calc_AI_text: {}s".format(time.time()-start_time))
|
||||||
|
|
||||||
if return_text:
|
if return_text:
|
||||||
return text
|
return text
|
||||||
@@ -456,7 +456,6 @@ class settings(object):
|
|||||||
if 'no_save' in self.__dict__:
|
if 'no_save' in self.__dict__:
|
||||||
setattr(self, 'no_save', True)
|
setattr(self, 'no_save', True)
|
||||||
for key, value in json_data.items():
|
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 in self.__dict__ and key not in self.no_save_variables:
|
||||||
if key == 'sampler_order':
|
if key == 'sampler_order':
|
||||||
if(len(value) < 7):
|
if(len(value) < 7):
|
||||||
@@ -481,7 +480,6 @@ class settings(object):
|
|||||||
getattr(self, key).load_json(value)
|
getattr(self, key).load_json(value)
|
||||||
else:
|
else:
|
||||||
setattr(self, key, value)
|
setattr(self, key, value)
|
||||||
logger.debug("Processing {}: {}s".format(key, time.time()-start_time))
|
|
||||||
if 'no_save' in self.__dict__:
|
if 'no_save' in self.__dict__:
|
||||||
setattr(self, 'no_save', False)
|
setattr(self, 'no_save', False)
|
||||||
|
|
||||||
@@ -977,7 +975,8 @@ class system_settings(settings):
|
|||||||
if name == 'keep_img_gen_in_memory' and value == False:
|
if name == 'keep_img_gen_in_memory' and value == False:
|
||||||
self.image_pipeline = None
|
self.image_pipeline = None
|
||||||
|
|
||||||
if name == 'alt_gen':
|
if name == 'alt_gen' and old_value != value:
|
||||||
|
logger.debug("Calcing AI Text from setting alt_gen")
|
||||||
self._koboldai_var.calc_ai_text()
|
self._koboldai_var.calc_ai_text()
|
||||||
|
|
||||||
if name == 'horde_share':
|
if name == 'horde_share':
|
||||||
@@ -1073,6 +1072,7 @@ class KoboldStoryRegister(object):
|
|||||||
self.actions[i]['Selected Text Length'] = 0
|
self.actions[i]['Selected Text Length'] = 0
|
||||||
self.actions[i]["In AI Input"] = False
|
self.actions[i]["In AI Input"] = False
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": i, 'action': self.actions[i]}, old)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": i, 'action': self.actions[i]}, old)
|
||||||
|
logger.debug("Calcing AI Text from Action __setitem__")
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
self.set_game_saved()
|
self.set_game_saved()
|
||||||
|
|
||||||
@@ -1095,32 +1095,19 @@ class KoboldStoryRegister(object):
|
|||||||
return {"action_count": self.action_count, "actions": self.actions}
|
return {"action_count": self.action_count, "actions": self.actions}
|
||||||
|
|
||||||
def load_json(self, json_data):
|
def load_json(self, json_data):
|
||||||
start_time = time.time()
|
|
||||||
if type(json_data) == str:
|
if type(json_data) == str:
|
||||||
import json
|
import json
|
||||||
json_data = json.loads(json_data)
|
json_data = json.loads(json_data)
|
||||||
logger.debug("json to dict: {}s".format(time.time()-start_time))
|
|
||||||
#JSON forces keys to be strings, so let's fix that
|
#JSON forces keys to be strings, so let's fix that
|
||||||
start_time = time.time()
|
|
||||||
temp = {}
|
temp = {}
|
||||||
for item in json_data['actions']:
|
for item in json_data['actions']:
|
||||||
temp[int(item)] = json_data['actions'][item]
|
temp[int(item)] = json_data['actions'][item]
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": item, 'action': temp[int(item)]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": item, 'action': temp[int(item)]}, None)
|
||||||
|
|
||||||
logger.debug("fixing key to int and sending to client: {}s".format(time.time()-start_time))
|
|
||||||
start_time = time.time()
|
|
||||||
self.action_count = json_data['action_count']
|
self.action_count = json_data['action_count']
|
||||||
self.actions = temp
|
self.actions = temp
|
||||||
logger.debug("Saving action var: {}s".format(time.time()-start_time))
|
|
||||||
start_time = time.time()
|
|
||||||
self.set_game_saved()
|
self.set_game_saved()
|
||||||
logger.debug("set_game_saved: {}s".format(time.time()-start_time))
|
|
||||||
start_time = time.time()
|
|
||||||
self.recalc_token_length()
|
|
||||||
logger.debug("recalc_token_length: {}s".format(time.time()-start_time))
|
|
||||||
start_time = time.time()
|
|
||||||
self.story_settings.save_story()
|
self.story_settings.save_story()
|
||||||
logger.debug("save_story: {}s".format(time.time()-start_time))
|
|
||||||
|
|
||||||
|
|
||||||
def append(self, text):
|
def append(self, text):
|
||||||
@@ -1150,8 +1137,9 @@ class KoboldStoryRegister(object):
|
|||||||
self.actions[self.action_count] = {"Selected Text": text, "Selected Text Length": selected_text_length, "In AI Input": False, "Options": [], "Probabilities": []}
|
self.actions[self.action_count] = {"Selected Text": text, "Selected Text Length": selected_text_length, "In AI Input": False, "Options": [], "Probabilities": []}
|
||||||
|
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": self.action_count, 'action': self.actions[self.action_count]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": self.action_count, 'action': self.actions[self.action_count]}, None)
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
|
||||||
self.set_game_saved()
|
self.set_game_saved()
|
||||||
|
logger.debug("Calcing AI Text from Action Append")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
def append_options(self, option_list):
|
def append_options(self, option_list):
|
||||||
if self.action_count+1 in self.actions:
|
if self.action_count+1 in self.actions:
|
||||||
@@ -1218,6 +1206,8 @@ class KoboldStoryRegister(object):
|
|||||||
self.actions[action_id]['In AI Input'] = used
|
self.actions[action_id]['In AI Input'] = used
|
||||||
if old != used:
|
if old != used:
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
||||||
|
if used:
|
||||||
|
self.recalc_token_length(action_id)
|
||||||
|
|
||||||
def set_pin(self, action_step, option_number):
|
def set_pin(self, action_step, option_number):
|
||||||
if action_step in self.actions:
|
if action_step in self.actions:
|
||||||
@@ -1265,8 +1255,9 @@ class KoboldStoryRegister(object):
|
|||||||
self.socketio.emit("var_changed", {"classname": "actions", "name": "Action Count", "old_value": None, "value":self.action_count}, broadcast=True, room="UI_2")
|
self.socketio.emit("var_changed", {"classname": "actions", "name": "Action Count", "old_value": None, "value":self.action_count}, broadcast=True, room="UI_2")
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
|
||||||
self.clear_unused_options(pointer=action_step)
|
self.clear_unused_options(pointer=action_step)
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
|
||||||
self.set_game_saved()
|
self.set_game_saved()
|
||||||
|
logger.debug("Calcing AI Text from Action Use Option")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
def delete_option(self, option_number, action_step=None):
|
def delete_option(self, option_number, action_step=None):
|
||||||
if action_step is None:
|
if action_step is None:
|
||||||
@@ -1275,7 +1266,6 @@ class KoboldStoryRegister(object):
|
|||||||
if option_number < len(self.actions[action_step]['Options']):
|
if option_number < len(self.actions[action_step]['Options']):
|
||||||
del self.actions[action_step]['Options'][option_number]
|
del self.actions[action_step]['Options'][option_number]
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
|
||||||
self.set_game_saved()
|
self.set_game_saved()
|
||||||
|
|
||||||
def delete_action(self, action_id):
|
def delete_action(self, action_id):
|
||||||
@@ -1289,12 +1279,16 @@ class KoboldStoryRegister(object):
|
|||||||
self.action_count -= 1
|
self.action_count -= 1
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
||||||
self.set_game_saved()
|
self.set_game_saved()
|
||||||
|
logger.debug("Calcing AI Text from Action Delete")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
def pop(self):
|
def pop(self):
|
||||||
if self.action_count >= 0:
|
if self.action_count >= 0:
|
||||||
text = self.actions[self.action_count]['Selected Text']
|
text = self.actions[self.action_count]['Selected Text']
|
||||||
length = self.actions[self.action_count]['Selected Text Length']
|
length = self.actions[self.action_count]['Selected Text Length']
|
||||||
self.delete_action(self.action_count)
|
self.delete_action(self.action_count)
|
||||||
|
logger.debug("Calcing AI Text from Action Pop")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
return text
|
return text
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
@@ -1330,18 +1324,17 @@ class KoboldStoryRegister(object):
|
|||||||
if 'story_settings' in self.__dict__:
|
if 'story_settings' in self.__dict__:
|
||||||
self.story_settings.gamesaved = False
|
self.story_settings.gamesaved = False
|
||||||
|
|
||||||
def recalc_token_length(self):
|
def recalc_token_length(self, action_id):
|
||||||
if self.tokenizer is not None:
|
if self.tokenizer is not None:
|
||||||
for key in self.actions:
|
if action_id in self.actions:
|
||||||
if self.actions[key]['In AI Input']:
|
if self.actions[action_id]['In AI Input']:
|
||||||
self.actions[key]['Selected Text Length'] = len(self.tokenizer.encode(self.actions[key]['Selected Text']))
|
self.actions[action_id]['Selected Text Length'] = len(self.tokenizer.encode(self.actions[action_id]['Selected Text']))
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": key, 'action': self.actions[key]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
||||||
eventlet.sleep(0.01)
|
eventlet.sleep(0.01)
|
||||||
else:
|
else:
|
||||||
for key in self.actions:
|
for key in self.actions:
|
||||||
self.actions[key]['Selected Text Length'] = 0
|
self.actions[key]['Selected Text Length'] = 0
|
||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": key, 'action': self.actions[key]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": key, 'action': self.actions[key]}, None)
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
|
||||||
|
|
||||||
def stream_tokens(self, text_list):
|
def stream_tokens(self, text_list):
|
||||||
if len(text_list) > 1:
|
if len(text_list) > 1:
|
||||||
@@ -1409,7 +1402,7 @@ class KoboldStoryRegister(object):
|
|||||||
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
|
||||||
|
|
||||||
def to_sentences(self):
|
def to_sentences(self):
|
||||||
start_time = time.time()
|
#start_time = time.time()
|
||||||
#we're going to split our actions by sentence for better context. We'll add in which actions the sentence covers. Prompt will be added at a -1 ID
|
#we're going to split our actions by sentence for better context. We'll add in which actions the sentence covers. Prompt will be added at a -1 ID
|
||||||
actions = {i: self.actions[i]['Selected Text'] for i in range(len(self.actions))}
|
actions = {i: self.actions[i]['Selected Text'] for i in range(len(self.actions))}
|
||||||
actions[-1] = self.story_settings.prompt
|
actions[-1] = self.story_settings.prompt
|
||||||
@@ -1450,7 +1443,7 @@ class KoboldStoryRegister(object):
|
|||||||
break
|
break
|
||||||
Sentence_Position[1] = len(action_text_split[Sentence_Position[0]][0])
|
Sentence_Position[1] = len(action_text_split[Sentence_Position[0]][0])
|
||||||
#OK, action_text_split now contains a list of [sentence including trailing space if needed, [action IDs that sentence includes]]
|
#OK, action_text_split now contains a list of [sentence including trailing space if needed, [action IDs that sentence includes]]
|
||||||
logger.debug("to_sentences: {}s".format(time.time()-start_time))
|
#logger.debug("to_sentences: {}s".format(time.time()-start_time))
|
||||||
return action_text_split
|
return action_text_split
|
||||||
|
|
||||||
def __setattr__(self, name, value):
|
def __setattr__(self, name, value):
|
||||||
@@ -1459,9 +1452,7 @@ class KoboldStoryRegister(object):
|
|||||||
super().__setattr__(name, value)
|
super().__setattr__(name, value)
|
||||||
if name == 'action_count' and not new_variable:
|
if name == 'action_count' and not new_variable:
|
||||||
process_variable_changes(self.socketio, "actions", "Action Count", value, old_value)
|
process_variable_changes(self.socketio, "actions", "Action Count", value, old_value)
|
||||||
elif name == 'tokenizer' and not new_variable:
|
|
||||||
#We set the tokenizer, recalculate all of the item lengths
|
|
||||||
self.recalc_token_length()
|
|
||||||
|
|
||||||
class KoboldWorldInfo(object):
|
class KoboldWorldInfo(object):
|
||||||
|
|
||||||
@@ -1499,15 +1490,14 @@ class KoboldWorldInfo(object):
|
|||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self.world_info)
|
return len(self.world_info)
|
||||||
|
|
||||||
def recalc_token_length(self):
|
def recalc_token_length(self, uid):
|
||||||
if self.tokenizer is not None:
|
if self.tokenizer is not None:
|
||||||
for uid in self.world_info:
|
if uid in self.world_info:
|
||||||
self.world_info[uid]['token_length'] = len(self.tokenizer.encode(self.world_info[uid]['content']))
|
self.world_info[uid]['token_length'] = len(self.tokenizer.encode(self.world_info[uid]['content']))
|
||||||
else:
|
else:
|
||||||
for uid in self.world_info:
|
for uid in self.world_info:
|
||||||
self.world_info[uid]['token_length'] = None
|
self.world_info[uid]['token_length'] = None
|
||||||
|
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
|
||||||
self.send_to_ui()
|
self.send_to_ui()
|
||||||
|
|
||||||
def add_folder(self, folder):
|
def add_folder(self, folder):
|
||||||
@@ -1531,6 +1521,8 @@ class KoboldWorldInfo(object):
|
|||||||
del self.world_info_folder[folder]
|
del self.world_info_folder[folder]
|
||||||
if self.socketio is not None:
|
if self.socketio is not None:
|
||||||
self.socketio.emit("delete_world_info_folder", folder, broadcast=True, room="UI_2")
|
self.socketio.emit("delete_world_info_folder", folder, broadcast=True, room="UI_2")
|
||||||
|
logger.debug("Calcing AI Text from WI Folder Delete")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
def add_item_to_folder(self, uid, folder, before=None):
|
def add_item_to_folder(self, uid, folder, before=None):
|
||||||
if uid in self.world_info:
|
if uid in self.world_info:
|
||||||
@@ -1558,7 +1550,7 @@ class KoboldWorldInfo(object):
|
|||||||
|
|
||||||
def add_item(self, title, key, keysecondary, folder, constant, manual_text,
|
def add_item(self, title, key, keysecondary, folder, constant, manual_text,
|
||||||
comment, use_wpp=False, wpp={'name': "", 'type': "", 'format': "W++", 'attributes': {}},
|
comment, use_wpp=False, wpp={'name': "", 'type': "", 'format': "W++", 'attributes': {}},
|
||||||
v1_uid=None, no_recalc=False):
|
v1_uid=None, recalc=True):
|
||||||
if len(self.world_info) == 0:
|
if len(self.world_info) == 0:
|
||||||
uid = 0
|
uid = 0
|
||||||
else:
|
else:
|
||||||
@@ -1623,7 +1615,8 @@ class KoboldWorldInfo(object):
|
|||||||
if self.socketio is not None:
|
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_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")
|
self.socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2")
|
||||||
if not no_recalc:
|
if recalc:
|
||||||
|
logger.debug("Calcing AI Text from WI Add")
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
return uid
|
return uid
|
||||||
|
|
||||||
@@ -1670,11 +1663,12 @@ class KoboldWorldInfo(object):
|
|||||||
|
|
||||||
self.story_settings.gamesaved = False
|
self.story_settings.gamesaved = False
|
||||||
self.sync_world_info_to_old_format()
|
self.sync_world_info_to_old_format()
|
||||||
|
logger.debug("Calcing AI Text from WI Edit")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
if self.socketio is not None:
|
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_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")
|
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):
|
def delete(self, uid):
|
||||||
del self.world_info[uid]
|
del self.world_info[uid]
|
||||||
@@ -1687,6 +1681,8 @@ class KoboldWorldInfo(object):
|
|||||||
if self.socketio is not None:
|
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_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")
|
self.socketio.emit("delete_world_info_entry", uid, broadcast=True, room="UI_2")
|
||||||
|
logger.debug("Calcing AI Text from WI Delete")
|
||||||
|
ignore = self.koboldai_vars.calc_ai_text()
|
||||||
|
|
||||||
def rename_folder(self, old_folder, folder):
|
def rename_folder(self, old_folder, folder):
|
||||||
self.story_settings.gamesaved = False
|
self.story_settings.gamesaved = False
|
||||||
@@ -1755,7 +1751,7 @@ class KoboldWorldInfo(object):
|
|||||||
item['comment'] if 'comment' in item else '',
|
item['comment'] if 'comment' in item else '',
|
||||||
use_wpp=item['use_wpp'] if 'use_wpp' in item else False,
|
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': {}},
|
wpp=item['wpp'] if 'wpp' in item else {'name': "", 'type': "", 'format': "W++", 'attributes': {}},
|
||||||
no_recalc=True)
|
recalc=False)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.sync_world_info_to_old_format()
|
self.sync_world_info_to_old_format()
|
||||||
@@ -1764,7 +1760,6 @@ class KoboldWorldInfo(object):
|
|||||||
print(data)
|
print(data)
|
||||||
raise
|
raise
|
||||||
self.send_to_ui()
|
self.send_to_ui()
|
||||||
ignore = self.koboldai_vars.calc_ai_text()
|
|
||||||
|
|
||||||
def sync_world_info_to_old_format(self):
|
def sync_world_info_to_old_format(self):
|
||||||
#Since the old UI uses world info entries for folders, we need to make some up
|
#Since the old UI uses world info entries for folders, we need to make some up
|
||||||
@@ -1827,19 +1822,17 @@ class KoboldWorldInfo(object):
|
|||||||
self.socketio.emit("world_info_entry_used_in_game", {"uid": key, "used_in_game": False}, broadcast=True, room="UI_2")
|
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):
|
def set_world_info_used(self, uid):
|
||||||
|
if uid in self.world_info:
|
||||||
self.world_info[uid]["used_in_game"] = True
|
self.world_info[uid]["used_in_game"] = True
|
||||||
|
else:
|
||||||
|
logger.warning("Something tried to set world info UID {} to in game, but it doesn't exist".format(uid))
|
||||||
if self.socketio is not None:
|
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")
|
self.socketio.emit("world_info_entry_used_in_game", {"uid": uid, "used_in_game": True}, broadcast=True, room="UI_2")
|
||||||
|
self.recalc_token_length(uid)
|
||||||
|
|
||||||
def get_used_wi(self):
|
def get_used_wi(self):
|
||||||
return [x['content'] for x in self.world_info if x['used_in_game']]
|
return [x['content'] for x in self.world_info if x['used_in_game']]
|
||||||
|
|
||||||
def __setattr__(self, name, value):
|
|
||||||
new_variable = name not in self.__dict__
|
|
||||||
super().__setattr__(name, value)
|
|
||||||
if name == 'tokenizer' and not new_variable:
|
|
||||||
#We set the tokenizer, recalculate all of the item lengths
|
|
||||||
self.recalc_token_length()
|
|
||||||
|
|
||||||
|
|
||||||
badwordsids_default = [[13460], [6880], [50256], [42496], [4613], [17414], [22039], [16410], [27], [29], [38430], [37922], [15913], [24618], [28725], [58], [47175], [36937], [26700], [12878], [16471], [37981], [5218], [29795], [13412], [45160], [3693], [49778], [4211], [20598], [36475], [33409], [44167], [32406], [29847], [29342], [42669], [685], [25787], [7359], [3784], [5320], [33994], [33490], [34516], [43734], [17635], [24293], [9959], [23785], [21737], [28401], [18161], [26358], [32509], [1279], [38155], [18189], [26894], [6927], [14610], [23834], [11037], [14631], [26933], [46904], [22330], [25915], [47934], [38214], [1875], [14692], [41832], [13163], [25970], [29565], [44926], [19841], [37250], [49029], [9609], [44438], [16791], [17816], [30109], [41888], [47527], [42924], [23984], [49074], [33717], [31161], [49082], [30138], [31175], [12240], [14804], [7131], [26076], [33250], [3556], [38381], [36338], [32756], [46581], [17912], [49146]] # Tokenized array of badwords used to prevent AI artifacting
|
badwordsids_default = [[13460], [6880], [50256], [42496], [4613], [17414], [22039], [16410], [27], [29], [38430], [37922], [15913], [24618], [28725], [58], [47175], [36937], [26700], [12878], [16471], [37981], [5218], [29795], [13412], [45160], [3693], [49778], [4211], [20598], [36475], [33409], [44167], [32406], [29847], [29342], [42669], [685], [25787], [7359], [3784], [5320], [33994], [33490], [34516], [43734], [17635], [24293], [9959], [23785], [21737], [28401], [18161], [26358], [32509], [1279], [38155], [18189], [26894], [6927], [14610], [23834], [11037], [14631], [26933], [46904], [22330], [25915], [47934], [38214], [1875], [14692], [41832], [13163], [25970], [29565], [44926], [19841], [37250], [49029], [9609], [44438], [16791], [17816], [30109], [41888], [47527], [42924], [23984], [49074], [33717], [31161], [49082], [30138], [31175], [12240], [14804], [7131], [26076], [33250], [3556], [38381], [36338], [32756], [46581], [17912], [49146]] # Tokenized array of badwords used to prevent AI artifacting
|
||||||
|
@@ -137,6 +137,11 @@ function disconnect() {
|
|||||||
|
|
||||||
function reset_story() {
|
function reset_story() {
|
||||||
console.log("Resetting story");
|
console.log("Resetting story");
|
||||||
|
clearTimeout(calc_token_usage_timeout);
|
||||||
|
clearTimeout(game_text_scroll_timeout);
|
||||||
|
clearTimeout(font_size_cookie_timout);
|
||||||
|
finder_last_input = null;
|
||||||
|
on_new_wi_item = null;
|
||||||
current_chunk_number = null;
|
current_chunk_number = null;
|
||||||
var story_area = document.getElementById('Selected Text');
|
var story_area = document.getElementById('Selected Text');
|
||||||
while (story_area.lastChild.id != 'story_prompt') {
|
while (story_area.lastChild.id != 'story_prompt') {
|
||||||
@@ -1782,6 +1787,7 @@ function world_info_entry(data) {
|
|||||||
|
|
||||||
//put focus back where it was
|
//put focus back where it was
|
||||||
if (document.getElementById(original_focus)) {
|
if (document.getElementById(original_focus)) {
|
||||||
|
if (document.getElementById(original_focus).tagName != "BUTTON") {
|
||||||
//check if we were on a new line
|
//check if we were on a new line
|
||||||
if ((on_new_wi_item != null) && (document.getElementById(on_new_wi_item))) {
|
if ((on_new_wi_item != null) && (document.getElementById(on_new_wi_item))) {
|
||||||
//if we're on a new wpp attribute, we want to move to the new value not the new attribute, so let's fix that
|
//if we're on a new wpp attribute, we want to move to the new value not the new attribute, so let's fix that
|
||||||
@@ -1794,6 +1800,7 @@ function world_info_entry(data) {
|
|||||||
//for some reason we have to wrap this in a timmer
|
//for some reason we have to wrap this in a timmer
|
||||||
setTimeout(function() {document.getElementById(original_focus).click();document.getElementById(original_focus).focus()}, 0);
|
setTimeout(function() {document.getElementById(original_focus).click();document.getElementById(original_focus).focus()}, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
assign_world_info_to_action(null, data.uid);
|
assign_world_info_to_action(null, data.uid);
|
||||||
|
|
||||||
@@ -3142,6 +3149,12 @@ function assign_world_info_to_action(action_item, uid) {
|
|||||||
removeA(current_ids, uid);
|
removeA(current_ids, uid);
|
||||||
tag.parentElement.setAttribute("world_info_uids", current_ids.join(","));
|
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']) {
|
for (keyword of worldinfo['key']) {
|
||||||
if ((action.textContent.replace(/[^0-9a-z \'\"]/gi, '')).includes(keyword)) {
|
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
|
//Ok we have a key match, but we need to check for secondary keys if applicable
|
||||||
|
Reference in New Issue
Block a user