mirror of
https://github.com/KoboldAI/KoboldAI-Client.git
synced 2025-06-05 21:59:24 +02:00
Fix
This commit is contained in:
20
aiserver.py
20
aiserver.py
@@ -6407,7 +6407,27 @@ def UI_2_change_wi_text(data):
|
|||||||
@socketio.on('move_wi')
|
@socketio.on('move_wi')
|
||||||
def UI_2_move_wi(data):
|
def UI_2_move_wi(data):
|
||||||
print(data)
|
print(data)
|
||||||
|
if data['folder'] is None:
|
||||||
koboldai_vars.worldinfo_v2.reorder(int(data['dragged_id']), int(data['drop_id']))
|
koboldai_vars.worldinfo_v2.reorder(int(data['dragged_id']), int(data['drop_id']))
|
||||||
|
else:
|
||||||
|
koboldai_vars.worldinfo_v2.set_folder(int(data['dragged_id']), data['folder'], before_uid=int(data['drop_id']))
|
||||||
|
|
||||||
|
#==================================================================#
|
||||||
|
# Event triggered when user moves world info
|
||||||
|
#==================================================================#
|
||||||
|
@socketio.on('wi_set_folder')
|
||||||
|
def UI_2_wi_set_folder(data):
|
||||||
|
print(data)
|
||||||
|
koboldai_vars.worldinfo_v2.set_folder(int(data['dragged_id']), data['folder'])
|
||||||
|
|
||||||
|
#==================================================================#
|
||||||
|
# Event triggered when user renames world info folder
|
||||||
|
#==================================================================#
|
||||||
|
@socketio.on('Rename_World_Info_Folder')
|
||||||
|
def UI_2_Rename_World_Info_Folder(data):
|
||||||
|
print("Rename_World_Info_Folder")
|
||||||
|
print(data)
|
||||||
|
koboldai_vars.worldinfo_v2.rename_folder(data['old_folder'], data['new_folder'])
|
||||||
|
|
||||||
|
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
|
@@ -911,8 +911,8 @@ class KoboldWorldInfo(object):
|
|||||||
|
|
||||||
def get_folders(self, ui_version=2):
|
def get_folders(self, ui_version=2):
|
||||||
if ui_version == 1:
|
if ui_version == 1:
|
||||||
return {i: {'collapsed': True, 'name': x} for i, x in enumerate(set([x['folder'] for x in self.world_info]))}
|
return {i: {'collapsed': True, 'name': x} for i, x in enumerate(set([self.world_info[x]['folder'] for x in self.world_info]))}
|
||||||
return list(set([x['folder'] for x in self.world_info]))
|
return list(set([self.world_info[x]['folder'] for x in self.world_info]))
|
||||||
|
|
||||||
def get_folder_items(self, folder):
|
def get_folder_items(self, folder):
|
||||||
items = [item.to_dict() for item in self.world_info if item['folder'] == folder]
|
items = [item.to_dict() for item in self.world_info if item['folder'] == folder]
|
||||||
@@ -929,20 +929,28 @@ class KoboldWorldInfo(object):
|
|||||||
self.world_info[uid]['sort'] = before_sort_number
|
self.world_info[uid]['sort'] = before_sort_number
|
||||||
|
|
||||||
def set_folder(self, uid, folder, before_uid=None):
|
def set_folder(self, uid, folder, before_uid=None):
|
||||||
max_sort = max([x['sort'] for x in self.world_info if x['folder'] == folder])
|
max_sort = max([self.world_info[x]['sort'] for x in self.world_info if self.world_info[x]['folder'] == folder]+[-1])
|
||||||
old_folder = self.world_info[uid]['folder']
|
old_folder = self.world_info[uid]['folder']
|
||||||
self.world_info[uid]['folder'] = folder
|
self.world_info[uid]['folder'] = folder
|
||||||
self.world_info[uid]['sort'] = max_sort
|
self.world_info[uid]['sort'] = max_sort+1
|
||||||
if before_uid is not None:
|
if before_uid is not None:
|
||||||
self.reorder(folder, uid, before_uid)
|
self.reorder(uid, before_uid)
|
||||||
self.resort(folder)
|
self.resort(folder)
|
||||||
self.resort(old_folder)
|
self.resort(old_folder)
|
||||||
|
|
||||||
|
def rename_folder(self, old_folder, new_folder):
|
||||||
|
while new_folder in self.get_folders():
|
||||||
|
new_folder = "{}-1".format(new_folder)
|
||||||
|
for x in self.world_info:
|
||||||
|
if self.world_info[x]['folder'] == old_folder:
|
||||||
|
self.world_info[x]['folder'] = new_folder
|
||||||
|
|
||||||
|
|
||||||
def resort(self, folder):
|
def resort(self, folder):
|
||||||
for i in range(max([x['sort'] for x in self.world_info if x['folder'] == folder])+1):
|
for i in range(max([self.world_info[x]['sort'] for x in self.world_info if self.world_info[x]['folder'] == folder])+1):
|
||||||
if i > len([x['sort'] for x in self.world_info if x['folder'] == folder]):
|
if i > len([self.world_info[x]['sort'] for x in self.world_info if self.world_info[x]['folder'] == folder]):
|
||||||
break
|
break
|
||||||
elif i not in [x['sort'] for x in self.world_info if x['folder'] == folder]:
|
elif i not in [self.world_info[x]['sort'] for x in self.world_info if self.world_info[x]['folder'] == folder]:
|
||||||
for item in world_info:
|
for item in world_info:
|
||||||
if item['folder'] == folder and item['sort'] > i:
|
if item['folder'] == folder and item['sort'] > i:
|
||||||
item['sort'] = item['sort']-1
|
item['sort'] = item['sort']-1
|
||||||
|
@@ -404,7 +404,8 @@ td.server_vars {
|
|||||||
.world_info_card {
|
.world_info_card {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 2px outset var(--wi_card_border_color);
|
border: 2px outset var(--wi_card_border_color);
|
||||||
background-color: var(--wi_card_bg_color)
|
background-color: var(--wi_card_bg_color);
|
||||||
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.world_info_tag_area {
|
.world_info_tag_area {
|
||||||
@@ -423,6 +424,14 @@ td.server_vars {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.oi[folder] {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oi[data-glyph="folder"] {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------- OVERALL PAGE CONFIG ------------------------------*/
|
/* ---------------------------- OVERALL PAGE CONFIG ------------------------------*/
|
||||||
body {
|
body {
|
||||||
@@ -939,3 +948,4 @@ button.disabled {
|
|||||||
.drag-over {
|
.drag-over {
|
||||||
border-top: dashed 3px red;
|
border-top: dashed 3px red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1009,12 +1009,60 @@ function world_info(data) {
|
|||||||
folder_item.id = "world_info_folder_"+folder;
|
folder_item.id = "world_info_folder_"+folder;
|
||||||
folder_item.classList.add("WI_Folder");
|
folder_item.classList.add("WI_Folder");
|
||||||
title = document.createElement("h2");
|
title = document.createElement("h2");
|
||||||
title.textContent = folder;
|
title.addEventListener('dragenter', dragEnter)
|
||||||
|
title.addEventListener('dragover', dragOver);
|
||||||
|
title.addEventListener('dragleave', dragLeave);
|
||||||
|
title.addEventListener('drop', drop);
|
||||||
|
collapse_icon = document.createElement("span");
|
||||||
|
collapse_icon.id = "world_info_folder_collapse_"+folder;
|
||||||
|
collapse_icon.classList.add("oi");
|
||||||
|
collapse_icon.setAttribute("data-glyph", "chevron-bottom");
|
||||||
|
collapse_icon.setAttribute("folder", folder);
|
||||||
|
collapse_icon.onclick = function () {
|
||||||
|
hide_wi_folder(this.getAttribute("folder"));
|
||||||
|
document.getElementById('world_info_folder_expand_'+this.getAttribute("folder")).classList.remove('hidden');
|
||||||
|
this.classList.add("hidden");
|
||||||
|
};
|
||||||
|
title.append(collapse_icon);
|
||||||
|
expand_icon = document.createElement("span");
|
||||||
|
expand_icon.id = "world_info_folder_expand_"+folder;
|
||||||
|
expand_icon.classList.add("oi");
|
||||||
|
expand_icon.setAttribute("data-glyph", "chevron-right");
|
||||||
|
expand_icon.setAttribute("folder", folder);
|
||||||
|
expand_icon.onclick = function () {
|
||||||
|
unhide_wi_folder(this.getAttribute("folder"));
|
||||||
|
document.getElementById('world_info_folder_collapse_'+this.getAttribute("folder")).classList.remove('hidden');
|
||||||
|
this.classList.add("hidden");
|
||||||
|
};
|
||||||
|
expand_icon.classList.add("hidden");
|
||||||
|
title.append(expand_icon);
|
||||||
|
icon = document.createElement("span");
|
||||||
|
icon.classList.add("oi");
|
||||||
|
icon.setAttribute("data-glyph", "folder");
|
||||||
|
title.append(icon);
|
||||||
|
title_text = document.createElement("span");
|
||||||
|
title_text.setAttribute("contenteditable", true);
|
||||||
|
title_text.setAttribute("original_text", folder);
|
||||||
|
title_text.textContent = folder;
|
||||||
|
title_text.onblur = function () {
|
||||||
|
if (this.textContent != this.getAttribute("original_text")) {
|
||||||
|
//Need to check if the new folder name is already in use
|
||||||
|
folder_name = this.textContent;
|
||||||
|
while (folder_name in Array(document.getElementById("story_menu_wi").children).filter(folder => folder.id.replace("world_info_folder_", ""))) {
|
||||||
|
folder_name = folder_name + " 1";
|
||||||
|
}
|
||||||
|
this.parentElement.parentElement.id = "world_info_folder_" + folder_name;
|
||||||
|
socket.emit("Rename_World_Info_Folder", {"old_folder": this.getAttribute("original_text"), "new_folder": folder_name});
|
||||||
|
this.setAttribute("original_text", folder_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title.append(title_text);
|
||||||
folder_item.append(title);
|
folder_item.append(title);
|
||||||
world_info_area.append(folder_item);
|
world_info_area.append(folder_item);
|
||||||
} else {
|
} else {
|
||||||
folder_item = document.getElementById("world_info_folder_"+folder);
|
folder_item = document.getElementById("world_info_folder_"+folder);
|
||||||
}
|
}
|
||||||
|
world_info_card.setAttribute("folder", folder);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1224,6 +1272,95 @@ function upload_file(file_box) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------General UI Functions------------------------------------
|
//--------------------------------------------General UI Functions------------------------------------
|
||||||
|
function create_world_info_folder() {
|
||||||
|
var world_info_area = document.getElementById("story_menu_wi");
|
||||||
|
|
||||||
|
var i=0;
|
||||||
|
while (document.getElementById("world_info_folder_New "+i) != null) {
|
||||||
|
console.log("New "+i);
|
||||||
|
console.log(document.getElementById("world_info_folder_New "+i));
|
||||||
|
i+=1;
|
||||||
|
}
|
||||||
|
folder = "New "+i;
|
||||||
|
//create new folder
|
||||||
|
var folder_item = document.createElement("span");
|
||||||
|
folder_item.id = "world_info_folder_"+folder;
|
||||||
|
folder_item.classList.add("WI_Folder");
|
||||||
|
title = document.createElement("h2");
|
||||||
|
title.addEventListener('dragenter', dragEnter)
|
||||||
|
title.addEventListener('dragover', dragOver);
|
||||||
|
title.addEventListener('dragleave', dragLeave);
|
||||||
|
title.addEventListener('drop', drop);
|
||||||
|
collapse_icon = document.createElement("span");
|
||||||
|
collapse_icon.id = "world_info_folder_collapse_"+folder;
|
||||||
|
collapse_icon.classList.add("oi");
|
||||||
|
collapse_icon.setAttribute("data-glyph", "chevron-bottom");
|
||||||
|
collapse_icon.setAttribute("folder", folder);
|
||||||
|
collapse_icon.onclick = function () {
|
||||||
|
hide_wi_folder(this.getAttribute("folder"));
|
||||||
|
document.getElementById('world_info_folder_expand_'+this.getAttribute("folder")).classList.remove('hidden');
|
||||||
|
this.classList.add("hidden");
|
||||||
|
};
|
||||||
|
title.append(collapse_icon);
|
||||||
|
expand_icon = document.createElement("span");
|
||||||
|
expand_icon.id = "world_info_folder_expand_"+folder;
|
||||||
|
expand_icon.classList.add("oi");
|
||||||
|
expand_icon.setAttribute("data-glyph", "chevron-right");
|
||||||
|
expand_icon.setAttribute("folder", folder);
|
||||||
|
expand_icon.onclick = function () {
|
||||||
|
unhide_wi_folder(this.getAttribute("folder"));
|
||||||
|
document.getElementById('world_info_folder_collapse_'+this.getAttribute("folder")).classList.remove('hidden');
|
||||||
|
this.classList.add("hidden");
|
||||||
|
};
|
||||||
|
expand_icon.classList.add("hidden");
|
||||||
|
title.append(expand_icon);
|
||||||
|
icon = document.createElement("span");
|
||||||
|
icon.classList.add("oi");
|
||||||
|
icon.setAttribute("data-glyph", "folder");
|
||||||
|
title.append(icon);
|
||||||
|
title_text = document.createElement("span");
|
||||||
|
title_text.setAttribute("contenteditable", true);
|
||||||
|
title_text.setAttribute("original_text", folder);
|
||||||
|
title_text.textContent = folder;
|
||||||
|
title_text.onblur = function () {
|
||||||
|
if (this.textContent != this.getAttribute("original_text")) {
|
||||||
|
//Need to check if the new folder name is already in use
|
||||||
|
folder_name = this.textContent;
|
||||||
|
while (folder_name in document.getElementById("story_menu_wi").children.filter(animal => folder.id.replace("world_info_folder_", ""))) {
|
||||||
|
folder_name = folder_name + " 1";
|
||||||
|
}
|
||||||
|
this.parentElement.parentElement.id = "world_info_folder_" + folder_name;
|
||||||
|
socket.emit("Rename_World_Info_Folder", {"old_folder": this.getAttribute("original_text"), "new_folder": folder_name});
|
||||||
|
this.setAttribute("original_text", folder_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title.append(title_text);
|
||||||
|
folder_item.append(title);
|
||||||
|
world_info_area.append(folder_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide_wi_folder(folder) {
|
||||||
|
if (document.getElementById("world_info_folder_"+folder)) {
|
||||||
|
folder_item = document.getElementById("world_info_folder_"+folder);
|
||||||
|
for (card of folder_item.children) {
|
||||||
|
if (card.tagName != "H2") {
|
||||||
|
card.classList.add("hidden");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function unhide_wi_folder(folder) {
|
||||||
|
if (document.getElementById("world_info_folder_"+folder)) {
|
||||||
|
folder_item = document.getElementById("world_info_folder_"+folder);
|
||||||
|
for (card of folder_item.children) {
|
||||||
|
if (card.tagName != "H2") {
|
||||||
|
card.classList.remove("hidden");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function create_wi_card(wiid) {
|
function create_wi_card(wiid) {
|
||||||
world_info_card = document.createElement("div");
|
world_info_card = document.createElement("div");
|
||||||
world_info_card.setAttribute("draggable", true);
|
world_info_card.setAttribute("draggable", true);
|
||||||
@@ -1280,9 +1417,12 @@ function dragStart(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function find_wi_container(e) {
|
function find_wi_container(e) {
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (e.parentElement == document) {
|
if (e.parentElement == document) {
|
||||||
return e;
|
return e;
|
||||||
|
} else if (e.tagName == 'H2') {
|
||||||
|
return e.parentElement;
|
||||||
} else if (typeof e.id == 'undefined') {
|
} else if (typeof e.id == 'undefined') {
|
||||||
e = e.parentElement;
|
e = e.parentElement;
|
||||||
} else if (e.id.replace(/[^a-z_]/gi, '') == 'world_info_') {
|
} else if (e.id.replace(/[^a-z_]/gi, '') == 'world_info_') {
|
||||||
@@ -1318,18 +1458,29 @@ function drop(e) {
|
|||||||
// get the draggable element
|
// get the draggable element
|
||||||
const id = e.dataTransfer.getData('text/plain');
|
const id = e.dataTransfer.getData('text/plain');
|
||||||
const draggable = document.getElementById(id);
|
const draggable = document.getElementById(id);
|
||||||
|
dragged_id = draggable.id.split("_").slice(-1)[0];
|
||||||
|
drop_id = element.id.split("_").slice(-1)[0];
|
||||||
|
|
||||||
// add it before the drop target
|
// get the drop element
|
||||||
element = find_wi_container(e.target);
|
element = find_wi_container(e.target);
|
||||||
|
|
||||||
|
//check if we're droping on a folder, and then append it to the folder
|
||||||
|
if (element.children[0].tagName == "H2") {
|
||||||
|
element.append(draggable);
|
||||||
|
socket.emit("wi_set_folder", {'dragged_id': dragged_id, 'folder': drop_id});
|
||||||
|
} else {
|
||||||
|
//insert the draggable element before the drop element
|
||||||
element.parentElement.insertBefore(draggable, element);
|
element.parentElement.insertBefore(draggable, element);
|
||||||
|
|
||||||
// display the draggable element
|
// display the draggable element
|
||||||
draggable.classList.remove('hidden');
|
draggable.classList.remove('hidden');
|
||||||
|
|
||||||
//send the new order to the backend
|
if (element.getAttribute("folder") == draggable.getAttribute("folder")) {
|
||||||
dragged_id = draggable.id.split("_").slice(-1)[0];
|
socket.emit("move_wi", {'dragged_id': dragged_id, 'drop_id': drop_id, 'folder': null});
|
||||||
drop_id = element.id.split("_").slice(-1)[0];
|
} else {
|
||||||
socket.emit("move_wi", {'dragged_id': dragged_id, 'drop_id': drop_id});
|
socket.emit("move_wi", {'dragged_id': dragged_id, 'drop_id': drop_id, 'folder': element.getAttribute("folder")});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function dragend(e) {
|
function dragend(e) {
|
||||||
@@ -1340,6 +1491,7 @@ function dragend(e) {
|
|||||||
|
|
||||||
function assign_world_info_to_action(wiid=null, action_item=null) {
|
function assign_world_info_to_action(wiid=null, action_item=null) {
|
||||||
//console.log(world_info_data);
|
//console.log(world_info_data);
|
||||||
|
if (world_info_data != {}) {
|
||||||
if (wiid != null) {
|
if (wiid != null) {
|
||||||
var worldinfo_to_check = {};
|
var worldinfo_to_check = {};
|
||||||
worldinfo_to_check[wiid] = world_info_data[wiid]
|
worldinfo_to_check[wiid] = world_info_data[wiid]
|
||||||
@@ -1407,6 +1559,7 @@ function assign_world_info_to_action(wiid=null, action_item=null) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function update_token_lengths() {
|
function update_token_lengths() {
|
||||||
max_token_length = parseInt(document.getElementById("model_max_length_cur").value);
|
max_token_length = parseInt(document.getElementById("model_max_length_cur").value);
|
||||||
|
@@ -29,7 +29,7 @@
|
|||||||
<div id="story_menu_memory" class="story_category_area">
|
<div id="story_menu_memory" class="story_category_area">
|
||||||
<div id="Memory">
|
<div id="Memory">
|
||||||
Memory:<br/>
|
Memory:<br/>
|
||||||
<textarea rows=5 id="memory" class="var_sync_story_memory var_sync_alt_story_memory_length fullwidth" onchange='sync_to_server(this);'></textarea>
|
<textarea rows=20 id="memory" class="var_sync_story_memory var_sync_alt_story_memory_length fullwidth" onchange='sync_to_server(this);'></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="story_menu_author" class="story_category_area hidden">
|
<div id="story_menu_author" class="story_category_area hidden">
|
||||||
|
Reference in New Issue
Block a user