From 4f5f2760e4990e8552244602b893f3d86e39cdea Mon Sep 17 00:00:00 2001 From: ebolam Date: Wed, 17 Aug 2022 12:58:05 -0400 Subject: [PATCH] Added probabilities to actions class --- koboldai_settings.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/koboldai_settings.py b/koboldai_settings.py index 51607dec..90f2a257 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -712,7 +712,10 @@ class KoboldStoryRegister(object): def __init__(self, socketio, story_settings, koboldai_vars, tokenizer=None, sequence=[]): self.socketio = socketio self.koboldai_vars = koboldai_vars - self.actions = {} #keys = "Selected Text", "Options", "Selected Text Length", "In AI Input" with options being a dict with keys of "text", "Pinned", "Previous Selection", "Edited" + #### DO NOT DIRECTLY EDIT THE ACTIONS DICT. IT WILL NOT TRANSMIT TO CLIENT. USE FUCTIONS BELOW TO DO SO ### + #### doing actions[x] = game text is OK + self.actions = {} #keys = "Selected Text", "Options", "Selected Text Length", "In AI Input", "Probabilities". + #Options being a list of dict with keys of "text", "Pinned", "Previous Selection", "Edited", "Probabilities" self.action_count = -1 self.tokenizer = tokenizer self.story_settings = story_settings @@ -763,8 +766,10 @@ class KoboldStoryRegister(object): else: self.actions[i]['Selected Text Length'] = None self.actions[i]["In AI Input"] = False + self.actions[i]['Probabilities'] = [] process_variable_changes(self.socketio, "actions", "Selected Text", {"id": i, "text": text}, {"id": i, "text": old_text}) process_variable_changes(self.socketio, "actions", 'Selected Text Length', {"id": i, 'length': self.actions[i]['Selected Text Length']}, {"id": i, 'length': old_length}) + process_variable_changes(self.socketio, "actions", 'Probabilities', {"id": i, 'Probabilities': self.actions[i]['Probabilities']}, None) process_variable_changes(self.socketio, "actions", 'In AI Input', {"id": i, 'In AI Input': self.actions[i]["In AI Input"]}, None) ignore = self.koboldai_vars.calc_ai_text() self.set_game_saved() @@ -815,6 +820,7 @@ class KoboldStoryRegister(object): selected_text_length = 0 self.actions[self.action_count]["Selected Text Length"] = selected_text_length self.actions[self.action_count]["In AI Input"] = False + self.actions[self.action_count]["Probabilities"] = [] for item in self.actions[self.action_count]["Options"]: if item['text'] == text: old_options = self.actions[self.action_count]["Options"] @@ -827,29 +833,33 @@ class KoboldStoryRegister(object): else: selected_text_length = 0 - self.actions[self.action_count] = {"Selected Text": text, "Selected Text Length": selected_text_length, "In AI Input": False, "Options": []} + 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, "actions", "Selected Text", {"id": self.action_count, "text": text}, None) process_variable_changes(self.socketio, "actions", 'Selected Text Length', {"id": self.action_count, 'length': self.actions[self.action_count]['Selected Text Length']}, {"id": self.action_count, 'length': 0}) process_variable_changes(self.socketio, "actions", 'In AI Input', {"id": self.action_count, 'In AI Input': self.actions[self.action_count]["In AI Input"]}, None) + process_variable_changes(self.socketio, "actions", 'Probabilities', {"id": self.action_count, 'Probabilities': self.actions[self.action_count]['Probabilities']}, None) ignore = self.koboldai_vars.calc_ai_text() self.set_game_saved() def append_options(self, option_list): if self.action_count+1 in self.actions: old_options = copy.deepcopy(self.actions[self.action_count+1]["Options"]) - self.actions[self.action_count+1]['Options'].extend([{"text": x, "Pinned": False, "Previous Selection": False, "Edited": False} for x in option_list]) + self.actions[self.action_count+1]['Options'].extend([{"text": x, "Pinned": False, "Previous Selection": False, "Edited": False, "Probabilities": []} for x in option_list]) else: old_options = None - self.actions[self.action_count+1] = {"Selected Text": "", "Selected Text Length": 0, "In AI Input": False, "Options": [{"text": x, "Pinned": False, "Previous Selection": False, "Edited": False} for x in option_list]} + self.actions[self.action_count+1] = {"Selected Text": "", "Selected Text Length": 0, "In AI Input": False, "Options": [{"text": x, "Pinned": False, "Previous Selection": False, "Edited": False, "Probabilities": []} for x in option_list]} process_variable_changes(self.socketio, "actions", "Options", {"id": self.action_count+1, "options": self.actions[self.action_count+1]["Options"]}, {"id": self.action_count+1, "options": old_options}) self.set_game_saved() def set_options(self, option_list, action_id): if action_id not in self.actions: + old_options = None self.action_id[action_id] = {"Selected Text": "", "Options": option_list} else: + old_options = self.actions[action_id]["Options"] self.action_id[action_id]['Options'] = option_list + process_variable_changes(self.socketio, "actions", "Options", {"id": action_id, "options": self.actions[action_id]["Options"]}, {"id": action_id, "options": old_options}) def clear_unused_options(self, pointer=None): new_options = [] @@ -905,6 +915,7 @@ class KoboldStoryRegister(object): old_length = self.actions[action_step]["Selected Text Length"] if option_number < len(self.actions[action_step]['Options']): self.actions[action_step]["Selected Text"] = self.actions[action_step]['Options'][option_number]['text'] + self.actions[action_step]["Probabilities"] = self.actions[action_step]['Options'][option_number]['Probabilities'] if self.tokenizer is not None: self.actions[action_step]['Selected Text Length'] = len(self.tokenizer.encode(self.actions[action_step]['Options'][option_number]['text'])) else: @@ -1016,6 +1027,18 @@ class KoboldStoryRegister(object): process_variable_changes(self.socketio, "actions", "Selected Text", {"id": self.action_count+1, "text": self.actions[self.action_count+1]['Selected Text']}, None) process_variable_changes(self.socketio, "actions", 'Selected Text Length', {"id": self.action_count+1, 'length': self.actions[self.action_count+1]['Selected Text Length']}, {"id": self.action_count, 'length': 0}) + def set_probabilites(self, probabilities, action_id=self.action_count): + if action_id in self.actions: + self.actions[action_id]['Probabilities'] = probabilities + process_variable_changes(self.socketio, "actions", 'Probabilities', {"id": action_id, 'Probabilities': self.actions[action_id]['Probabilities']}, None) + + def set_option_probabilities(self, probabilities, option_number, action_id=self.action_count+1 + if action_id in self.actions: + old_options = self.actions[action_id]["options"] + if option_number < len(self.actions[action_id]["options"]): + self.actions[action_id]["options"][option_number]['Probabilities'] = probabilities + process_variable_changes(self.socketio, "actions", "Options", {"id": action_id, "options": self.actions[action_id]["Options"]}, {"id": action_id, "options": old_options}) + def __setattr__(self, name, value): new_variable = name not in self.__dict__ old_value = getattr(self, name, None)