Simplified Actions Sync to UI

This commit is contained in:
ebolam
2022-08-18 10:11:12 -04:00
parent 1140c56925
commit 01f06d5d0a
4 changed files with 54 additions and 59 deletions

View File

@@ -1,10 +1,8 @@
import os, re, time, threading, json, pickle, base64, copy, tqdm, datetime import os, re, time, threading, json, pickle, base64, copy, tqdm, datetime
from io import BytesIO from io import BytesIO
from flask import has_request_context from flask import has_request_context
import socketio as socketio_client
from flask_socketio import SocketIO from flask_socketio import SocketIO
from collections import OrderedDict from collections import OrderedDict
import requests
rely_clients = {} rely_clients = {}
serverstarted = False serverstarted = False
@@ -36,12 +34,10 @@ def process_variable_changes(socketio, classname, name, value, old_value, debug_
#Special Case for KoboldStoryRegister #Special Case for KoboldStoryRegister
if isinstance(value, KoboldStoryRegister): if isinstance(value, KoboldStoryRegister):
socketio.emit("var_changed", {"classname": "actions", "name": "Action Count", "old_value": None, "value":value.action_count}, broadcast=True, room="UI_2") socketio.emit("var_changed", {"classname": "actions", "name": "Action Count", "old_value": None, "value":value.action_count}, broadcast=True, room="UI_2")
for i in range(len(value.actions)): for i in range(len(value.actions)):
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") print(value.actions[i])
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": "story", "name": "actions", "old_value": None, "value":{"id": i, "action": value.actions[i]}}, 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")
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): elif isinstance(value, KoboldWorldInfo):
value.send_to_ui() value.send_to_ui()
else: else:
@@ -747,6 +743,7 @@ class KoboldStoryRegister(object):
def __setitem__(self, i, text): def __setitem__(self, i, text):
if i in self.actions: if i in self.actions:
old = self.actions[i]
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"]
if self.actions[i]["Selected Text"] != text: if self.actions[i]["Selected Text"] != text:
@@ -761,6 +758,7 @@ class KoboldStoryRegister(object):
else: else:
old_text = None old_text = None
old_length = None old_length = None
old = None
self.actions[i] = {"Selected Text": text, "Probabilities": [], "Options": []} self.actions[i] = {"Selected Text": text, "Probabilities": [], "Options": []}
if self.tokenizer is not None: if self.tokenizer is not None:
@@ -768,10 +766,7 @@ class KoboldStoryRegister(object):
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
process_variable_changes(self.socketio, "actions", "Selected Text", {"id": i, "text": text}, {"id": i, "text": old_text}) process_variable_changes(self.socketio, "story", 'actions', {"id": i, 'action': self.actions[i]}, old)
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() ignore = self.koboldai_vars.calc_ai_text()
self.set_game_saved() self.set_game_saved()
@@ -801,9 +796,7 @@ class KoboldStoryRegister(object):
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, "actions", "Selected Text", {"id": int(item), "text": json_data['actions'][item]["Selected Text"]}, None) process_variable_changes(self.socketio, "story", 'actions', {"id": item, 'action': temp[int(item)]}, None)
if "Options" in json_data['actions'][item]:
process_variable_changes(self.socketio, "actions", "Options", {"id": int(item), "options": json_data['actions'][item]["Options"]}, None)
self.action_count = json_data['action_count'] self.action_count = json_data['action_count']
self.actions = temp self.actions = temp
@@ -827,7 +820,6 @@ class KoboldStoryRegister(object):
if item['text'] == text: if item['text'] == text:
old_options = self.actions[self.action_count]["Options"] old_options = self.actions[self.action_count]["Options"]
del item del item
process_variable_changes(self.socketio, "actions", "Options", {"id": self.action_count, "options": self.actions[self.action_count]["Options"]}, {"id": self.action_count, "options": old_options})
else: else:
if self.tokenizer is not None: if self.tokenizer is not None:
@@ -837,10 +829,7 @@ 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, "actions", "Selected Text", {"id": self.action_count, "text": text}, None) process_variable_changes(self.socketio, "story", 'actions', {"id": self.action_count, 'action': self.actions[self.action_count]}, 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() ignore = self.koboldai_vars.calc_ai_text()
self.set_game_saved() self.set_game_saved()
@@ -854,7 +843,7 @@ class KoboldStoryRegister(object):
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]}
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}) process_variable_changes(self.socketio, "story", 'actions', {"id": self.action_count+1, 'action': self.actions[self.action_count+1]}, None)
self.set_game_saved() self.set_game_saved()
def set_options(self, option_list, action_id): def set_options(self, option_list, action_id):
@@ -870,7 +859,7 @@ class KoboldStoryRegister(object):
#We already have this option, so we need to save the probabilities #We already have this option, so we need to save the probabilities
item['Probabilities'] = old_item['Probabilities'] item['Probabilities'] = old_item['Probabilities']
self.actions[action_id]["Options"].append(item) 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, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
def clear_unused_options(self, pointer=None): def clear_unused_options(self, pointer=None):
new_options = [] new_options = []
@@ -881,7 +870,7 @@ class KoboldStoryRegister(object):
old_options = copy.deepcopy(self.actions[pointer]["Options"]) old_options = copy.deepcopy(self.actions[pointer]["Options"])
self.actions[pointer]["Options"] = [x for x in self.actions[pointer]["Options"] if x["Pinned"] or x["Previous Selection"] or x["Edited"]] self.actions[pointer]["Options"] = [x for x in self.actions[pointer]["Options"] if x["Pinned"] or x["Previous Selection"] or x["Edited"]]
new_options = self.actions[pointer]["Options"] new_options = self.actions[pointer]["Options"]
process_variable_changes(self.socketio, "actions", "Options", {"id": pointer, "options": new_options}, {"id": pointer, "options": old_options}) process_variable_changes(self.socketio, "story", 'actions', {"id": pointer, 'action': self.actions[pointer]}, None)
self.set_game_saved() self.set_game_saved()
def set_action_in_ai(self, action_id, used=True): def set_action_in_ai(self, action_id, used=True):
@@ -891,14 +880,14 @@ class KoboldStoryRegister(object):
old = None old = None
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, "actions", 'In AI Input', {"id": action_id, 'In AI Input': self.actions[action_id]["In AI Input"]}, None) process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
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:
if option_number < len(self.actions[action_step]['Options']): if option_number < len(self.actions[action_step]['Options']):
old_options = copy.deepcopy(self.actions[action_step]["Options"]) old_options = copy.deepcopy(self.actions[action_step]["Options"])
self.actions[action_step]['Options'][option_number]['Pinned'] = True self.actions[action_step]['Options'][option_number]['Pinned'] = True
process_variable_changes(self.socketio, "actions", "Options", {"id": action_step, "options": self.actions[action_step]["Options"]}, {"id": action_step, "options": old_options}) process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
self.set_game_saved() self.set_game_saved()
def unset_pin(self, action_step, option_number): def unset_pin(self, action_step, option_number):
@@ -906,7 +895,7 @@ class KoboldStoryRegister(object):
old_options = copy.deepcopy(self.actions[action_step]["Options"]) old_options = copy.deepcopy(self.actions[action_step]["Options"])
if option_number < len(self.actions[action_step]['Options']): if option_number < len(self.actions[action_step]['Options']):
self.actions[action_step]['Options'][option_number]['Pinned'] = False self.actions[action_step]['Options'][option_number]['Pinned'] = False
process_variable_changes(self.socketio, "actions", "Options", {"id": action_step, "options": self.actions[action_step]["Options"]}, {"id": action_step, "options": old_options}) process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
self.set_game_saved() self.set_game_saved()
def toggle_pin(self, action_step, option_number): def toggle_pin(self, action_step, option_number):
@@ -914,7 +903,7 @@ class KoboldStoryRegister(object):
old_options = copy.deepcopy(self.actions[action_step]["Options"]) old_options = copy.deepcopy(self.actions[action_step]["Options"])
if option_number < len(self.actions[action_step]['Options']): if option_number < len(self.actions[action_step]['Options']):
self.actions[action_step]['Options'][option_number]['Pinned'] = not self.actions[action_step]['Options'][option_number]['Pinned'] self.actions[action_step]['Options'][option_number]['Pinned'] = not self.actions[action_step]['Options'][option_number]['Pinned']
process_variable_changes(self.socketio, "actions", "Options", {"id": action_step, "options": self.actions[action_step]["Options"]}, {"id": action_step, "options": old_options}) process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
self.set_game_saved() self.set_game_saved()
def use_option(self, option_number, action_step=None): def use_option(self, option_number, action_step=None):
@@ -936,9 +925,7 @@ class KoboldStoryRegister(object):
if action_step-1 == self.action_count: if action_step-1 == self.action_count:
self.action_count+=1 self.action_count+=1
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, "actions", "Options", {"id": action_step, "options": self.actions[action_step]["Options"]}, {"id": action_step, "options": old_options}) process_variable_changes(self.socketio, "story", 'actions', {"id": action_step, 'action': self.actions[action_step]}, None)
process_variable_changes(self.socketio, "actions", "Selected Text", {"id": action_step, "text": self.actions[action_step]["Selected Text"]}, {"id": action_step, "Selected Text": old_text})
process_variable_changes(self.socketio, "actions", 'Selected Text Length', {"id": action_step, 'length': self.actions[action_step]["Selected Text Length"]}, {"id": action_step, 'length': old_length})
ignore = self.koboldai_vars.calc_ai_text() ignore = self.koboldai_vars.calc_ai_text()
self.set_game_saved() self.set_game_saved()
@@ -951,9 +938,7 @@ class KoboldStoryRegister(object):
self.actions[action_id]["Selected Text"] = "" self.actions[action_id]["Selected Text"] = ""
self.actions[action_id]['Selected Text Length'] = 0 self.actions[action_id]['Selected Text Length'] = 0
self.action_count -= 1 self.action_count -= 1
process_variable_changes(self.socketio, "actions", "Selected Text", {"id": action_id, "text": None}, {"id": action_id, "text": old_text}) process_variable_changes(self.socketio, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
process_variable_changes(self.socketio, "actions", 'Selected Text Length', {"id": action_id, 'length': 0}, {"id": action_id, 'length': old_length})
process_variable_changes(self.socketio, "actions", "Options", {"id": action_id, "options": self.actions[action_id]["Options"]}, {"id": action_id, "options": old_options})
self.set_game_saved() self.set_game_saved()
def pop(self): def pop(self):
@@ -1000,10 +985,11 @@ class KoboldStoryRegister(object):
if self.tokenizer is not None: if self.tokenizer is not None:
for key in self.actions: for key in self.actions:
self.actions[key]['Selected Text Length'] = len(self.tokenizer.encode(self.actions[key]['Selected Text'])) self.actions[key]['Selected Text Length'] = len(self.tokenizer.encode(self.actions[key]['Selected Text']))
process_variable_changes(self.socketio, "actions", 'Selected Text Length', {"id": key, 'length': self.actions[key]['Selected Text Length']}, None) process_variable_changes(self.socketio, "story", 'actions', {"id": key, 'action': self.actions[key]}, None)
else: else:
for key in self.actions: for key in self.actions:
self.actions[key]['Selected Text Length'] = None self.actions[key]['Selected Text Length'] = None
process_variable_changes(self.socketio, "story", 'actions', {"id": key, 'action': self.actions[key]}, None)
ignore = self.koboldai_vars.calc_ai_text() ignore = self.koboldai_vars.calc_ai_text()
def stream_tokens(self, text_list): def stream_tokens(self, text_list):
@@ -1024,6 +1010,7 @@ class KoboldStoryRegister(object):
self.actions[self.action_count+1]['Options'].append({"text": text_list[i], "Pinned": False, "Previous Selection": False, "Edited": False, "Probabilities": [], "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})
process_variable_changes(self.socketio, "story", 'actions', {"id": self.action_count+1, 'action': self.actions[self.action_count+1]}, None)
else: else:
#We're streaming single options so our output is our selected #We're streaming single options so our output is our selected
if self.tokenizer is not None: if self.tokenizer is not None:
@@ -1037,6 +1024,7 @@ 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", {"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}) 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, "story", 'actions', {"id": self.action_count+1, 'action': self.actions[self.action_count+1]}, None)
def set_probabilites(self, probabilities, action_id=None): def set_probabilites(self, probabilities, action_id=None):
print(probabilities) print(probabilities)
@@ -1044,7 +1032,7 @@ class KoboldStoryRegister(object):
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'].append(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, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, 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:
@@ -1053,7 +1041,7 @@ class KoboldStoryRegister(object):
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'].append(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, "story", 'actions', {"id": action_id, 'action': self.actions[action_id]}, None)
def __setattr__(self, name, value): def __setattr__(self, name, value):
new_variable = name not in self.__dict__ new_variable = name not in self.__dict__

View File

@@ -12,8 +12,6 @@ bleach==4.1.0
sentencepiece sentencepiece
protobuf protobuf
accelerate accelerate
python-socketio[client]
flask_session flask_session
marshmallow>=3.13 marshmallow>=3.13
apispec-webframeworks apispec-webframeworks
gevent

View File

@@ -17,8 +17,6 @@ eventlet
lupa==1.10 lupa==1.10
markdown markdown
bleach==4.1.0 bleach==4.1.0
python-socketio[client]
flask-session flask-session
marshmallow>=3.13 marshmallow>=3.13
apispec-webframeworks apispec-webframeworks
gevent

View File

@@ -133,7 +133,7 @@ function create_options(data) {
table.classList.add("sequences"); table.classList.add("sequences");
//Add Redo options //Add Redo options
i=0; i=0;
for (item of data.value.options) { for (item of data.value.action.Options) {
if ((item['Previous Selection'])) { if ((item['Previous Selection'])) {
var row = document.createElement("div"); var row = document.createElement("div");
row.classList.add("sequence_row"); row.classList.add("sequence_row");
@@ -162,7 +162,7 @@ function create_options(data) {
} }
//Add general options //Add general options
i=0; i=0;
for (item of data.value.options) { for (item of data.value.action.Options) {
if (!(item.Edited) && !(item['Previous Selection'])) { if (!(item.Edited) && !(item['Previous Selection'])) {
var row = document.createElement("div"); var row = document.createElement("div");
row.classList.add("sequence_row"); row.classList.add("sequence_row");
@@ -211,10 +211,10 @@ function do_story_text_updates(data) {
while (item.firstChild) { while (item.firstChild) {
item.removeChild(item.firstChild); item.removeChild(item.firstChild);
} }
if (data.value.text == null) { if (data.value.action['Selected Text'] == null) {
var text_array = []; var text_array = [];
} else { } else {
var text_array = data.value.text.split(" "); var text_array = data.value.action['Selected Text'].split(" ");
} }
text_array.forEach(function (text, i) { text_array.forEach(function (text, i) {
if (text != "") { if (text != "") {
@@ -229,7 +229,7 @@ function do_story_text_updates(data) {
} }
}); });
item.original_text = data.value.text; item.original_text = data.value.action['Selected Text'];
item.setAttribute("world_info_uids", ""); item.setAttribute("world_info_uids", "");
item.classList.remove("pulse") item.classList.remove("pulse")
item.scrollIntoView(); item.scrollIntoView();
@@ -239,7 +239,7 @@ function do_story_text_updates(data) {
span.id = 'Selected Text Chunk '+data.value.id; span.id = 'Selected Text Chunk '+data.value.id;
span.classList.add("rawtext"); span.classList.add("rawtext");
span.chunk = data.value.id; span.chunk = data.value.id;
span.original_text = data.value.text; span.original_text = data.value.action['Selected Text'];
span.setAttribute("contenteditable", true); span.setAttribute("contenteditable", true);
span.onblur = function () { span.onblur = function () {
if (this.textContent != this.original_text) { if (this.textContent != this.original_text) {
@@ -249,7 +249,7 @@ function do_story_text_updates(data) {
} }
} }
span.onkeydown = detect_enter_text; span.onkeydown = detect_enter_text;
var text_array = data.value.text.split(" "); var text_array = data.value.action['Selected Text'].split(" ");
text_array.forEach(function (text, i) { text_array.forEach(function (text, i) {
if (text != "") { if (text != "") {
var word = document.createElement("span"); var word = document.createElement("span");
@@ -311,7 +311,7 @@ function do_prompt(data) {
} }
function do_story_text_length_updates(data) { function do_story_text_length_updates(data) {
document.getElementById('Selected Text Chunk '+data.value.id).setAttribute("token_length", data.value.length); document.getElementById('Selected Text Chunk '+data.value.id).setAttribute("token_length", data.value.action["Selected Text Length"]);
} }
@@ -392,23 +392,34 @@ function var_changed(data) {
console.log(data); console.log(data);
} }
//console.log({"name": data.name, "data": data}); //console.log({"name": data.name, "data": data});
//Special Case for Story Text //Special Case for Actions
if ((data.classname == "actions") && (data.name == "Selected Text")) { if ((data.classname == "story") && (data.name == "actions")) {
console.log(data);
do_story_text_updates(data); do_story_text_updates(data);
//Special Case for Story Options
} else if ((data.classname == "actions") && (data.name == "Options")) {
create_options(data); create_options(data);
//Special Case for Story Text Length
} else if ((data.classname == "actions") && (data.name == "Selected Text Length")) {
do_story_text_length_updates(data); do_story_text_length_updates(data);
//Special Case for Story Text Length if (data.value.action['In AI Input']) {
} else if ((data.classname == "actions") && (data.name == "In AI Input")) {
//console.log(data.value);
if (data.value['In AI Input']) {
document.getElementById('Selected Text Chunk '+data.value.id).classList.add("within_max_length"); document.getElementById('Selected Text Chunk '+data.value.id).classList.add("within_max_length");
} else { } else {
document.getElementById('Selected Text Chunk '+data.value.id).classList.remove("within_max_length"); document.getElementById('Selected Text Chunk '+data.value.id).classList.remove("within_max_length");
} }
//Special Case for Story Text
} else if ((data.classname == "actions") && (data.name == "Selected Text")) {
//do_story_text_updates(data);
//Special Case for Story Options
} else if ((data.classname == "actions") && (data.name == "Options")) {
//create_options(data);
//Special Case for Story Text Length
} else if ((data.classname == "actions") && (data.name == "Selected Text Length")) {
//do_story_text_length_updates(data);
//Special Case for Story Text Length
} else if ((data.classname == "actions") && (data.name == "In AI Input")) {
//console.log(data.value);
//if (data.value['In AI Input']) {
// document.getElementById('Selected Text Chunk '+data.value.id).classList.add("within_max_length");
//} else {
// document.getElementById('Selected Text Chunk '+data.value.id).classList.remove("within_max_length");
//}
//Special Case for Presets //Special Case for Presets
} else if ((data.classname == 'model') && (data.name == 'presets')) { } else if ((data.classname == 'model') && (data.name == 'presets')) {
do_presets(data); do_presets(data);