Probabilities are now in the action list properly. Need to add proper transmits to client

This commit is contained in:
ebolam
2022-08-17 20:19:23 -04:00
parent bccd429736
commit 1140c56925
3 changed files with 58 additions and 24 deletions

View File

@@ -3967,7 +3967,7 @@ def actionsubmit(data, actionmode=0, force_submit=False, force_prompt_gen=False,
while(True): while(True):
set_aibusy(1) set_aibusy(1)
koboldai_vars.actions.clear_unused_options()
if(koboldai_vars.model == "API"): if(koboldai_vars.model == "API"):
global tokenizer global tokenizer
tokenizer_id = requests.get( tokenizer_id = requests.get(
@@ -4053,7 +4053,6 @@ def actionsubmit(data, actionmode=0, force_submit=False, force_prompt_gen=False,
for i in range(koboldai_vars.numseqs): for i in range(koboldai_vars.numseqs):
genout.append({"generated_text": koboldai_vars.lua_koboldbridge.outputs[i+1]}) genout.append({"generated_text": koboldai_vars.lua_koboldbridge.outputs[i+1]})
assert type(genout[-1]["generated_text"]) is str assert type(genout[-1]["generated_text"]) is str
koboldai_vars.actions.clear_unused_options()
koboldai_vars.actions.append_options([x["generated_text"] for x in genout]) koboldai_vars.actions.append_options([x["generated_text"] for x in genout])
genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()] genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()]
if(len(genout) == 1): if(len(genout) == 1):
@@ -4118,7 +4117,6 @@ def actionsubmit(data, actionmode=0, force_submit=False, force_prompt_gen=False,
for i in range(koboldai_vars.numseqs): for i in range(koboldai_vars.numseqs):
genout.append({"generated_text": koboldai_vars.lua_koboldbridge.outputs[i+1] if not no_generate else ""}) genout.append({"generated_text": koboldai_vars.lua_koboldbridge.outputs[i+1] if not no_generate else ""})
assert type(genout[-1]["generated_text"]) is str assert type(genout[-1]["generated_text"]) is str
koboldai_vars.actions.clear_unused_options()
koboldai_vars.actions.append_options([x["generated_text"] for x in genout]) koboldai_vars.actions.append_options([x["generated_text"] for x in genout])
genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()] genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()]
if(len(genout) == 1): if(len(genout) == 1):
@@ -4683,7 +4681,6 @@ def generate(txt, minimum, maximum, found_entries=None):
else: else:
genout = [{"generated_text": utils.decodenewlines(tokenizer.decode(tokens[-already_generated:]))} for tokens in genout] genout = [{"generated_text": utils.decodenewlines(tokenizer.decode(tokens[-already_generated:]))} for tokens in genout]
koboldai_vars.actions.clear_unused_options()
koboldai_vars.actions.append_options([x["generated_text"] for x in genout]) koboldai_vars.actions.append_options([x["generated_text"] for x in genout])
genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()] genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()]
if(len(genout) == 1): if(len(genout) == 1):
@@ -5068,7 +5065,6 @@ def tpumtjgenerate(txt, minimum, maximum, found_entries=None):
else: else:
genout = [{"generated_text": utils.decodenewlines(tokenizer.decode(txt))} for txt in genout] genout = [{"generated_text": utils.decodenewlines(tokenizer.decode(txt))} for txt in genout]
koboldai_vars.actions.clear_unused_options()
koboldai_vars.actions.append_options([x["generated_text"] for x in genout]) koboldai_vars.actions.append_options([x["generated_text"] for x in genout])
genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()] genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()]
if(len(koboldai_vars.actions.get_current_options()) == 1): if(len(koboldai_vars.actions.get_current_options()) == 1):
@@ -5825,7 +5821,6 @@ def oairequest(txt, min, max):
{"generated_text": utils.decodenewlines(txt)} {"generated_text": utils.decodenewlines(txt)}
for txt in outputs] for txt in outputs]
koboldai_vars.actions.clear_unused_options()
koboldai_vars.actions.append_options([x["generated_text"] for x in genout]) koboldai_vars.actions.append_options([x["generated_text"] for x in genout])
genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()] genout = [{"generated_text": x['text']} for x in koboldai_vars.actions.get_current_options()]
if (len(genout) == 1): if (len(genout) == 1):
@@ -7253,10 +7248,8 @@ def UI_2_phrase_bias_update(biases):
# Event triggered to rely a message # Event triggered to rely a message
#==================================================================# #==================================================================#
def socket_io_relay(queue, socketio): def socket_io_relay(queue, socketio):
print("started relay")
while True: while True:
if not queue.empty(): if not queue.empty():
print("got relay message")
while not queue.empty(): while not queue.empty():
data = queue.get() data = queue.get()
socketio.emit(data[0], data[1], **data[2]) socketio.emit(data[0], data[1], **data[2])
@@ -10047,7 +10040,8 @@ if __name__ == "__main__":
if(args.localtunnel or args.ngrok or args.remote): if(args.localtunnel or args.ngrok or args.remote):
with open('cloudflare.log', 'w') as cloudflarelog: with open('cloudflare.log', 'w') as cloudflarelog:
cloudflarelog.write("KoboldAI has finished loading and is available at the following link : " + cloudflare) cloudflarelog.write("KoboldAI has finished loading and is available at the following link : " + cloudflare)
print(format(colors.GREEN) + "KoboldAI has finished loading and is available at the following link : " + cloudflare + format(colors.END)) print(format(colors.GREEN) + "KoboldAI has finished loading and is available at the following link for UI 1: " + cloudflare + format(colors.END))
print(format(colors.GREEN) + "KoboldAI has finished loading and is available at the following link for UI 2: " + cloudflare + "/new_ui" + format(colors.END))
else: else:
print("{0}Webserver has started, you can now connect to this machine at port {1}{2}" print("{0}Webserver has started, you can now connect to this machine at port {1}{2}"
.format(colors.GREEN, port, colors.END)) .format(colors.GREEN, port, colors.END))

View File

@@ -368,6 +368,21 @@ gensettingstf = [
"sub_path": "UI", "sub_path": "UI",
"classname": "user", "classname": "user",
"name": "output_streaming" "name": "output_streaming"
},
{
"uitype": "toggle",
"unit": "bool",
"label": "Probability Calc",
"id": "setshowprobs",
"min": 0,
"max": 1,
"step": 1,
"default": 0,
"tooltip": "Adds context menu to outputs showing what other words were considered as it was built.",
"menu_path": "Interface",
"sub_path": "UI",
"classname": "user",
"name": "show_probs"
} }
] ]
@@ -571,6 +586,21 @@ gensettingsik =[{
"menu_path": "User", "menu_path": "User",
"classname": "user", "classname": "user",
"name": "output_streaming" "name": "output_streaming"
},
{
"uitype": "toggle",
"unit": "bool",
"label": "Probability Calculation",
"id": "setshowprobs",
"min": 0,
"max": 1,
"step": 1,
"default": 0,
"tooltip": "Adds context menu to outputs showing what other words were considered as it was built.",
"menu_path": "Interface",
"sub_path": "UI",
"classname": "user",
"name": "show_probs"
} }
] ]

View File

@@ -48,9 +48,7 @@ def process_variable_changes(socketio, classname, name, value, old_value, debug_
#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 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 not has_request_context():
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"}] 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"}]
print("putting data in queue")
queue.put(data) queue.put(data)
print("put data in queue")
else: 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") 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")
@@ -751,7 +749,9 @@ class KoboldStoryRegister(object):
if i in self.actions: if i in self.actions:
old_text = self.actions[i]["Selected Text"] old_text = self.actions[i]["Selected Text"]
old_length = self.actions[i]["Selected Text Length"] old_length = self.actions[i]["Selected Text Length"]
self.actions[i]["Selected Text"] = text if self.actions[i]["Selected Text"] != text:
self.actions[i]["Selected Text"] = text
self.actions[i]["Probabilities"] = []
if "Options" in self.actions[i]: if "Options" in self.actions[i]:
for j in range(len(self.actions[i]["Options"])): for j in range(len(self.actions[i]["Options"])):
if self.actions[i]["Options"][j]["text"] == text: if self.actions[i]["Options"][j]["text"] == text:
@@ -761,14 +761,13 @@ class KoboldStoryRegister(object):
else: else:
old_text = None old_text = None
old_length = None old_length = None
self.actions[i] = {"Selected Text": text, "Options": []} self.actions[i] = {"Selected Text": text, "Probabilities": [], "Options": []}
if self.tokenizer is not None: if self.tokenizer is not None:
self.actions[i]['Selected Text Length'] = len(self.tokenizer.encode(text)) self.actions[i]['Selected Text Length'] = len(self.tokenizer.encode(text))
else: else:
self.actions[i]['Selected Text Length'] = None self.actions[i]['Selected Text Length'] = None
self.actions[i]["In AI Input"] = False 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", {"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", '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", 'Probabilities', {"id": i, 'Probabilities': self.actions[i]['Probabilities']}, None)
@@ -815,14 +814,15 @@ class KoboldStoryRegister(object):
self.clear_unused_options() self.clear_unused_options()
self.action_count+=1 self.action_count+=1
if self.action_count in self.actions: if self.action_count in self.actions:
self.actions[self.action_count]["Selected Text"] = text if self.actions[self.action_count]["Selected Text"] != text:
self.actions[self.action_count]["Selected Text"] = text
self.actions[self.action_count]["Probabilities"] = []
if self.tokenizer is not None: if self.tokenizer is not None:
selected_text_length = len(self.tokenizer.encode(text)) selected_text_length = len(self.tokenizer.encode(text))
else: else:
selected_text_length = 0 selected_text_length = 0
self.actions[self.action_count]["Selected Text Length"] = selected_text_length 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]["In AI Input"] = False
self.actions[self.action_count]["Probabilities"] = []
for item in self.actions[self.action_count]["Options"]: for item in self.actions[self.action_count]["Options"]:
if item['text'] == text: if item['text'] == text:
old_options = self.actions[self.action_count]["Options"] old_options = self.actions[self.action_count]["Options"]
@@ -847,7 +847,10 @@ class KoboldStoryRegister(object):
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:
old_options = copy.deepcopy(self.actions[self.action_count+1]["Options"]) 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, "Probabilities": []} for x in option_list]) old_options_text = [x['text'] for x in old_options]
for item in option_list:
if item not in old_options_text:
self.actions[self.action_count+1]['Options'].append({"text": item, "Pinned": False, "Previous Selection": False, "Edited": False, "Probabilities": []})
else: else:
old_options = None 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, "Probabilities": []} 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]}
@@ -860,7 +863,13 @@ class KoboldStoryRegister(object):
self.action_id[action_id] = {"Selected Text": "", "Options": option_list} self.action_id[action_id] = {"Selected Text": "", "Options": option_list}
else: else:
old_options = self.actions[action_id]["Options"] old_options = self.actions[action_id]["Options"]
self.action_id[action_id]['Options'] = option_list self.actions[action_id]["Options"] = []
for item in option_list:
for old_item in old_options:
if item['text'] == old_item['text']:
#We already have this option, so we need to save the probabilities
item['Probabilities'] = old_item['Probabilities']
self.actions[action_id]["Options"].append(item)
process_variable_changes(self.socketio, "actions", "Options", {"id": action_id, "options": self.actions[action_id]["Options"]}, {"id": action_id, "options": old_options}) 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): def clear_unused_options(self, pointer=None):
@@ -1008,11 +1017,11 @@ class KoboldStoryRegister(object):
found = True found = True
self.actions[self.action_count+1]['Options'][j]['text'] = "{}{}".format(self.actions[self.action_count+1]['Options'][j]['text'], text_list[i]) self.actions[self.action_count+1]['Options'][j]['text'] = "{}{}".format(self.actions[self.action_count+1]['Options'][j]['text'], text_list[i])
if not found: if not found:
self.actions[self.action_count+1]['Options'].append({"text": text_list[i], "Pinned": False, "Previous Selection": False, "Edited": False, "stream_id": i}) self.actions[self.action_count+1]['Options'].append({"text": text_list[i], "Pinned": False, "Previous Selection": False, "Edited": False, "Probabilities": [], "stream_id": i})
else: else:
self.actions[self.action_count+1] = {"Selected Text": "", "Selected Text Length": 0, "Options": []} self.actions[self.action_count+1] = {"Selected Text": "", "Selected Text Length": 0, "Options": []}
for i in range(len(text_list)): for i in range(len(text_list)):
self.actions[self.action_count+1]['Options'].append({"text": text_list[i], "Pinned": False, "Previous Selection": False, "Edited": False, "stream_id": i}) self.actions[self.action_count+1]['Options'].append({"text": text_list[i], "Pinned": False, "Previous Selection": False, "Edited": False, "Probabilities": [], "stream_id": i})
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": None}) 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": None})
else: else:
@@ -1030,19 +1039,20 @@ class KoboldStoryRegister(object):
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}) 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=None): def set_probabilites(self, probabilities, action_id=None):
print(probabilities)
if action_id is None: if action_id is None:
action_id = self.action_count action_id = self.action_count
if action_id in self.actions: if action_id in self.actions:
self.actions[action_id]['Probabilities'] = probabilities self.actions[action_id]['Probabilities'].append(probabilities)
process_variable_changes(self.socketio, "actions", 'Probabilities', {"id": action_id, 'Probabilities': self.actions[action_id]['Probabilities']}, None) 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=None): def set_option_probabilities(self, probabilities, option_number, action_id=None):
if action_id is None: if action_id is None:
action_id = self.action_count+1 action_id = self.action_count+1
if action_id in self.actions: if action_id in self.actions:
old_options = self.actions[action_id]["options"] old_options = self.actions[action_id]["Options"]
if option_number < len(self.actions[action_id]["options"]): if option_number < len(self.actions[action_id]["Options"]):
self.actions[action_id]["options"][option_number]['Probabilities'] = probabilities self.actions[action_id]["Options"][option_number]['Probabilities'].append(probabilities)
process_variable_changes(self.socketio, "actions", "Options", {"id": action_id, "options": self.actions[action_id]["Options"]}, {"id": action_id, "options": old_options}) 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): def __setattr__(self, name, value):