Verias commited on
Commit
3f9525e
1 Parent(s): fd63d2f

Upload 18 files

Browse files
js/main.js ADDED
@@ -0,0 +1,450 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ let main_parent = document.getElementById("chat-tab").parentNode;
2
+ let extensions = document.getElementById("extensions");
3
+
4
+ main_parent.childNodes[0].classList.add("header_bar");
5
+ main_parent.style = "padding: 0; margin: 0";
6
+ main_parent.parentNode.style = "gap: 0";
7
+ main_parent.parentNode.parentNode.style = "padding: 0";
8
+
9
+ document.querySelector(".header_bar").addEventListener("click", function(event) {
10
+ if (event.target.tagName === "BUTTON") {
11
+ const buttonText = event.target.textContent.trim();
12
+
13
+ let chat_visible = (buttonText == "Chat");
14
+ let default_visible = (buttonText == "Default");
15
+ let notebook_visible = (buttonText == "Notebook");
16
+
17
+ // Check if one of the generation tabs is visible
18
+ if (chat_visible || notebook_visible || default_visible) {
19
+ extensions && (extensions.style.display = "flex");
20
+
21
+ if (chat_visible) {
22
+ this.style.marginBottom = "0px";
23
+ extensions && (extensions.style.maxWidth = "880px");
24
+ extensions && (extensions.style.padding = "0px");
25
+ } else {
26
+ this.style.marginBottom = "19px";
27
+ extensions && (extensions.style.maxWidth = "none");
28
+ extensions && (extensions.style.padding = "15px");
29
+ }
30
+ } else {
31
+ this.style.marginBottom = "19px";
32
+ extensions && (extensions.style.display = "none");
33
+ }
34
+ }
35
+ });
36
+
37
+ //------------------------------------------------
38
+ // Keyboard shortcuts
39
+ //------------------------------------------------
40
+ let previousTabId = "chat-tab-button";
41
+ document.addEventListener("keydown", function(event) {
42
+
43
+ // Stop generation on Esc pressed
44
+ if (event.key === "Escape") {
45
+ // Find the element with id 'stop' and click it
46
+ var stopButton = document.getElementById("stop");
47
+ if (stopButton) {
48
+ stopButton.click();
49
+ }
50
+ }
51
+
52
+ // Show chat controls on Ctrl + S
53
+ else if (event.ctrlKey && event.key == "s") {
54
+ event.preventDefault();
55
+
56
+ var showControlsElement = document.getElementById("show-controls");
57
+ if (showControlsElement && showControlsElement.childNodes.length >= 4) {
58
+ showControlsElement.childNodes[3].click();
59
+
60
+ var arr = document.getElementById("chat-input").childNodes[2].childNodes;
61
+ arr[arr.length - 1].focus();
62
+ }
63
+ }
64
+
65
+ // Regenerate on Ctrl + Enter
66
+ else if (event.ctrlKey && event.key === "Enter") {
67
+ event.preventDefault();
68
+ document.getElementById("Regenerate").click();
69
+ }
70
+
71
+ // Continue on Alt + Enter
72
+ else if (event.altKey && event.key === "Enter") {
73
+ event.preventDefault();
74
+ document.getElementById("Continue").click();
75
+ }
76
+
77
+ // Remove last on Ctrl + Shift + Backspace
78
+ else if (event.ctrlKey && event.shiftKey && event.key === "Backspace") {
79
+ event.preventDefault();
80
+ document.getElementById("Remove-last").click();
81
+ }
82
+
83
+ // Copy last on Ctrl + Shift + K
84
+ else if (event.ctrlKey && event.shiftKey && event.key === "K") {
85
+ event.preventDefault();
86
+ document.getElementById("Copy-last").click();
87
+ }
88
+
89
+ // Replace last on Ctrl + Shift + L
90
+ else if (event.ctrlKey && event.shiftKey && event.key === "L") {
91
+ event.preventDefault();
92
+ document.getElementById("Replace-last").click();
93
+ }
94
+
95
+ // Impersonate on Ctrl + Shift + M
96
+ else if (event.ctrlKey && event.shiftKey && event.key === "M") {
97
+ event.preventDefault();
98
+ document.getElementById("Impersonate").click();
99
+ }
100
+
101
+ // Switch between tabs on Tab
102
+ else if (!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey && event.key === "Tab") {
103
+ event.preventDefault();
104
+ var parametersButton = document.getElementById("parameters-button");
105
+ var parentContainer = parametersButton.parentNode;
106
+ var selectedChild = parentContainer.querySelector(".selected");
107
+
108
+ if (selectedChild.id == "parameters-button") {
109
+ document.getElementById(previousTabId).click();
110
+ } else {
111
+ previousTabId = selectedChild.id;
112
+ parametersButton.click();
113
+ }
114
+ }
115
+ });
116
+
117
+ //------------------------------------------------
118
+ // Position the chat typing dots
119
+ //------------------------------------------------
120
+ typing = document.getElementById("typing-container");
121
+ typingParent = typing.parentNode;
122
+ typingSibling = typing.previousElementSibling;
123
+ typingSibling.insertBefore(typing, typingSibling.childNodes[2]);
124
+
125
+ //------------------------------------------------
126
+ // Chat scrolling
127
+ //------------------------------------------------
128
+ const targetElement = document.getElementById("chat").parentNode.parentNode.parentNode;
129
+ targetElement.classList.add("pretty_scrollbar");
130
+ targetElement.classList.add("chat-parent");
131
+ let isScrolled = false;
132
+
133
+ targetElement.addEventListener("scroll", function() {
134
+ let diff = targetElement.scrollHeight - targetElement.clientHeight;
135
+ if(Math.abs(targetElement.scrollTop - diff) <= 10 || diff == 0) {
136
+ isScrolled = false;
137
+ } else {
138
+ isScrolled = true;
139
+ }
140
+ });
141
+
142
+ // Create a MutationObserver instance
143
+ const observer = new MutationObserver(function(mutations) {
144
+ mutations.forEach(function(mutation) {
145
+ updateCssProperties();
146
+
147
+ if(!isScrolled) {
148
+ targetElement.scrollTop = targetElement.scrollHeight;
149
+ }
150
+
151
+ const firstChild = targetElement.children[0];
152
+ if (firstChild.classList.contains("generating")) {
153
+ typing.parentNode.classList.add("visible-dots");
154
+ document.getElementById("stop").style.display = "flex";
155
+ document.getElementById("Generate").style.display = "none";
156
+ } else {
157
+ typing.parentNode.classList.remove("visible-dots");
158
+ document.getElementById("stop").style.display = "none";
159
+ document.getElementById("Generate").style.display = "flex";
160
+ }
161
+
162
+ });
163
+ });
164
+
165
+ // Configure the observer to watch for changes in the subtree and attributes
166
+ const config = {
167
+ childList: true,
168
+ subtree: true,
169
+ characterData: true,
170
+ attributeOldValue: true,
171
+ characterDataOldValue: true
172
+ };
173
+
174
+ // Start observing the target element
175
+ observer.observe(targetElement, config);
176
+
177
+ //------------------------------------------------
178
+ // Add some scrollbars
179
+ //------------------------------------------------
180
+ const textareaElements = document.querySelectorAll(".add_scrollbar textarea");
181
+ for(i = 0; i < textareaElements.length; i++) {
182
+ textareaElements[i].classList.remove("scroll-hide");
183
+ textareaElements[i].classList.add("pretty_scrollbar");
184
+ textareaElements[i].style.resize = "none";
185
+ }
186
+
187
+ //------------------------------------------------
188
+ // Remove some backgrounds
189
+ //------------------------------------------------
190
+ const noBackgroundelements = document.querySelectorAll(".no-background");
191
+ for(i = 0; i < noBackgroundelements.length; i++) {
192
+ noBackgroundelements[i].parentNode.style.border = "none";
193
+ noBackgroundelements[i].parentNode.parentNode.parentNode.style.alignItems = "center";
194
+ }
195
+
196
+ const slimDropdownElements = document.querySelectorAll(".slim-dropdown");
197
+ for (i = 0; i < slimDropdownElements.length; i++) {
198
+ const parentNode = slimDropdownElements[i].parentNode;
199
+ parentNode.style.background = "transparent";
200
+ parentNode.style.border = "0";
201
+ }
202
+
203
+ //------------------------------------------------
204
+ // Create the hover menu in the chat tab
205
+ // The show/hide events were adapted from:
206
+ // https://github.com/SillyTavern/SillyTavern/blob/6c8bd06308c69d51e2eb174541792a870a83d2d6/public/script.js
207
+ //------------------------------------------------
208
+ var buttonsInChat = document.querySelectorAll("#chat-tab:not(.old-ui) #chat-buttons button");
209
+ var button = document.getElementById("hover-element-button");
210
+ var menu = document.getElementById("hover-menu");
211
+ var istouchscreen = (navigator.maxTouchPoints > 0) || "ontouchstart" in document.documentElement;
212
+
213
+ function showMenu() {
214
+ menu.style.display = "flex"; // Show the menu
215
+ }
216
+
217
+ function hideMenu() {
218
+ menu.style.display = "none"; // Hide the menu
219
+ if (!istouchscreen) {
220
+ document.querySelector("#chat-input textarea").focus(); // Focus on the chat input
221
+ }
222
+ }
223
+
224
+ if (buttonsInChat.length > 0) {
225
+ for (let i = buttonsInChat.length - 1; i >= 0; i--) {
226
+ const thisButton = buttonsInChat[i];
227
+ menu.appendChild(thisButton);
228
+
229
+ thisButton.addEventListener("click", () => {
230
+ hideMenu();
231
+ });
232
+
233
+ const buttonText = thisButton.textContent;
234
+ const matches = buttonText.match(/(\(.*?\))/);
235
+
236
+ if (matches && matches.length > 1) {
237
+ // Apply the transparent-substring class to the matched substring
238
+ const substring = matches[1];
239
+ const newText = buttonText.replace(substring, `&nbsp;<span class="transparent-substring">${substring.slice(1, -1)}</span>`);
240
+ thisButton.innerHTML = newText;
241
+ }
242
+ }
243
+ } else {
244
+ buttonsInChat = document.querySelectorAll("#chat-tab.old-ui #chat-buttons button");
245
+ for (let i = 0; i < buttonsInChat.length; i++) {
246
+ buttonsInChat[i].textContent = buttonsInChat[i].textContent.replace(/ \(.*?\)/, "");
247
+ }
248
+ document.getElementById("gr-hover-container").style.display = "none";
249
+ }
250
+
251
+ function isMouseOverButtonOrMenu() {
252
+ return menu.matches(":hover") || button.matches(":hover");
253
+ }
254
+
255
+ button.addEventListener("mouseenter", function () {
256
+ if (!istouchscreen) {
257
+ showMenu();
258
+ }
259
+ });
260
+
261
+ button.addEventListener("click", function () {
262
+ if (menu.style.display === "flex") {
263
+ hideMenu();
264
+ }
265
+ else {
266
+ showMenu();
267
+ }
268
+ });
269
+
270
+ // Add event listener for mouseleave on the button
271
+ button.addEventListener("mouseleave", function () {
272
+ // Delay to prevent menu hiding when the mouse leaves the button into the menu
273
+ setTimeout(function () {
274
+ if (!isMouseOverButtonOrMenu()) {
275
+ hideMenu();
276
+ }
277
+ }, 100);
278
+ });
279
+
280
+ // Add event listener for mouseleave on the menu
281
+ menu.addEventListener("mouseleave", function () {
282
+ // Delay to prevent menu hide when the mouse leaves the menu into the button
283
+ setTimeout(function () {
284
+ if (!isMouseOverButtonOrMenu()) {
285
+ hideMenu();
286
+ }
287
+ }, 100);
288
+ });
289
+
290
+ // Add event listener for click anywhere in the document
291
+ document.addEventListener("click", function (event) {
292
+ // Check if the click is outside the button/menu and the menu is visible
293
+ if (!isMouseOverButtonOrMenu() && menu.style.display === "flex") {
294
+ hideMenu();
295
+ }
296
+
297
+ if (event.target.classList.contains("pfp_character")) {
298
+ toggleBigPicture();
299
+ }
300
+ });
301
+
302
+ //------------------------------------------------
303
+ // Relocate the "Show controls" checkbox
304
+ //------------------------------------------------
305
+ var elementToMove = document.getElementById("show-controls");
306
+ var parent = elementToMove.parentNode;
307
+ for (var i = 0; i < 2; i++) {
308
+ parent = parent.parentNode;
309
+ }
310
+
311
+ parent.insertBefore(elementToMove, parent.firstChild);
312
+
313
+ //------------------------------------------------
314
+ // Make the chat input grow upwards instead of downwards
315
+ //------------------------------------------------
316
+ document.getElementById("show-controls").parentNode.style.position = "absolute";
317
+ document.getElementById("show-controls").parentNode.style.bottom = "0px";
318
+
319
+ //------------------------------------------------
320
+ // Focus on the chat input
321
+ //------------------------------------------------
322
+ const chatTextArea = document.getElementById("chat-input").querySelector("textarea");
323
+
324
+ function respondToChatInputVisibility(element, callback) {
325
+ var options = {
326
+ root: document.documentElement,
327
+ };
328
+
329
+ var observer = new IntersectionObserver((entries, observer) => {
330
+ entries.forEach(entry => {
331
+ callback(entry.intersectionRatio > 0);
332
+ });
333
+ }, options);
334
+
335
+ observer.observe(element);
336
+ }
337
+
338
+ function handleChatInputVisibilityChange(isVisible) {
339
+ if (isVisible) {
340
+ chatTextArea.focus();
341
+ }
342
+ }
343
+
344
+ respondToChatInputVisibility(chatTextArea, handleChatInputVisibilityChange);
345
+
346
+ //------------------------------------------------
347
+ // Show enlarged character picture when the profile
348
+ // picture is clicked on
349
+ //------------------------------------------------
350
+ let bigPictureVisible = false;
351
+
352
+ function addBigPicture() {
353
+ var imgElement = document.createElement("img");
354
+ var timestamp = new Date().getTime();
355
+ imgElement.src = "/file/cache/pfp_character.png?time=" + timestamp;
356
+ imgElement.classList.add("bigProfilePicture");
357
+
358
+ var imgElementParent = document.getElementById("chat").parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
359
+ imgElementParent.appendChild(imgElement);
360
+ }
361
+
362
+ function deleteBigPicture() {
363
+ var bigProfilePictures = document.querySelectorAll(".bigProfilePicture");
364
+ bigProfilePictures.forEach(function (element) {
365
+ element.parentNode.removeChild(element);
366
+ });
367
+ }
368
+
369
+ function toggleBigPicture() {
370
+ if(bigPictureVisible) {
371
+ deleteBigPicture();
372
+ bigPictureVisible = false;
373
+ } else {
374
+ addBigPicture();
375
+ bigPictureVisible = true;
376
+ }
377
+ }
378
+
379
+ //------------------------------------------------
380
+ // Define global CSS properties for resizing and
381
+ // positioning certain elements
382
+ //------------------------------------------------
383
+ let currentChatInputHeight = 0;
384
+
385
+ function updateCssProperties() {
386
+ // Set the height of the chat area
387
+ const chatContainer = document.getElementById("chat").parentNode.parentNode.parentNode;
388
+ const chatInputHeight = document.querySelector("#chat-input textarea").clientHeight;
389
+ if (chatContainer.clientHeight > 0) {
390
+ const newChatHeight = `${chatContainer.clientHeight - chatInputHeight + 40}px`;
391
+ document.documentElement.style.setProperty("--chat-height", newChatHeight);
392
+ document.documentElement.style.setProperty("--input-delta", `${chatInputHeight - 40}px`);
393
+
394
+ // Set the position offset of the chat input box
395
+ const header = document.querySelector(".header_bar");
396
+ const headerHeight = `${header.clientHeight}px`;
397
+ document.documentElement.style.setProperty("--header-height", headerHeight);
398
+
399
+ // Offset the scroll position of the chat area
400
+ if (chatInputHeight !== currentChatInputHeight) {
401
+ chatContainer.scrollTop += chatInputHeight > currentChatInputHeight ? chatInputHeight : -chatInputHeight;
402
+ currentChatInputHeight = chatInputHeight;
403
+ }
404
+ }
405
+ }
406
+
407
+ new ResizeObserver(updateCssProperties)
408
+ .observe(document.querySelector("#chat-input textarea"));
409
+
410
+ window.addEventListener("resize", updateCssProperties);
411
+
412
+ //------------------------------------------------
413
+ // Keep track of the display width to position the past
414
+ // chats dropdown on desktop
415
+ //------------------------------------------------
416
+ function updateDocumentWidth() {
417
+ var updatedWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
418
+ document.documentElement.style.setProperty("--document-width", updatedWidth + "px");
419
+ }
420
+
421
+ updateDocumentWidth();
422
+ window.addEventListener("resize", updateDocumentWidth);
423
+
424
+ //------------------------------------------------
425
+ // Focus on the rename text area when it becomes visible
426
+ //------------------------------------------------
427
+ const renameTextArea = document.getElementById("rename-row").querySelector("textarea");
428
+
429
+ function respondToRenameVisibility(element, callback) {
430
+ var options = {
431
+ root: document.documentElement,
432
+ };
433
+
434
+ var observer = new IntersectionObserver((entries, observer) => {
435
+ entries.forEach(entry => {
436
+ callback(entry.intersectionRatio > 0);
437
+ });
438
+ }, options);
439
+
440
+ observer.observe(element);
441
+ }
442
+
443
+
444
+ function handleVisibilityChange(isVisible) {
445
+ if (isVisible) {
446
+ renameTextArea.focus();
447
+ }
448
+ }
449
+
450
+ respondToRenameVisibility(renameTextArea, handleVisibilityChange);
js/save_files.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Functions for downloading JSON files
2
+ function getCurrentTimestamp() {
3
+ const now = new Date();
4
+ const timezoneOffset = now.getTimezoneOffset() * 60000; // Convert to milliseconds
5
+ const localTime = new Date(now.getTime() - timezoneOffset);
6
+ const formattedTimestamp = localTime.toISOString().replace(/[-:]/g, "").slice(0, 15);
7
+ return formattedTimestamp;
8
+ }
9
+
10
+ function saveFile(contents, filename) {
11
+ const element = document.createElement("a");
12
+ element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(contents));
13
+ element.setAttribute("download", filename);
14
+ element.style.display = "none";
15
+ document.body.appendChild(element);
16
+ element.click();
17
+ document.body.removeChild(element);
18
+ }
19
+
20
+ function saveHistory(history, character, mode) {
21
+ let path = null;
22
+
23
+ if (["chat", "chat-instruct"].includes(mode) && character && character.trim() !== "") {
24
+ path = `history_${character}_${getCurrentTimestamp()}.json`;
25
+ } else {
26
+ try {
27
+ path = `history_${mode}_${getCurrentTimestamp()}.json`;
28
+ } catch (error) {
29
+ path = `history_${getCurrentTimestamp()}.json`;
30
+ }
31
+ }
32
+ saveFile(history, path);
33
+ }
34
+
35
+ function saveSession(session) {
36
+ let path = null;
37
+
38
+ path = `session_${getCurrentTimestamp()}.json`;
39
+ saveFile(session, path);
40
+ }
js/show_controls.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const belowChatInput = document.querySelectorAll("#chat-tab > div > :nth-child(n+2), #extensions");
2
+ const chatParent = document.querySelector(".chat-parent");
3
+
4
+ function toggle_controls(value) {
5
+ if (value) {
6
+ belowChatInput.forEach(element => {
7
+ element.style.display = "inherit";
8
+ });
9
+
10
+ chatParent.classList.remove("bigchat");
11
+ document.getElementById("chat-input-row").classList.remove("bigchat");
12
+ document.getElementById("chat-col").classList.remove("bigchat");
13
+ document.getElementById("chat-tab").style.paddingBottom = "";
14
+
15
+ let gallery_element = document.getElementById("gallery-extension");
16
+ if (gallery_element) {
17
+ gallery_element.style.display = "block";
18
+ }
19
+
20
+ } else {
21
+ belowChatInput.forEach(element => {
22
+ element.style.display = "none";
23
+ });
24
+
25
+ chatParent.classList.add("bigchat");
26
+ document.getElementById("chat-input-row").classList.add("bigchat");
27
+ document.getElementById("chat-col").classList.add("bigchat");
28
+ document.getElementById("chat-tab").style.paddingBottom = "0px";
29
+ }
30
+ }
js/switch_tabs.js ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ let chat_tab = document.getElementById("chat-tab");
2
+ let main_parent = chat_tab.parentNode;
3
+
4
+ function scrollToTop() {
5
+ window.scrollTo({
6
+ top: 0,
7
+ // behavior: 'smooth'
8
+ });
9
+ }
10
+
11
+ function findButtonsByText(buttonText) {
12
+ const buttons = document.getElementsByTagName("button");
13
+ const matchingButtons = [];
14
+ buttonText = buttonText.trim();
15
+
16
+ for (let i = 0; i < buttons.length; i++) {
17
+ const button = buttons[i];
18
+ const buttonInnerText = button.textContent.trim();
19
+
20
+ if (buttonInnerText === buttonText) {
21
+ matchingButtons.push(button);
22
+ }
23
+ }
24
+
25
+ return matchingButtons;
26
+ }
27
+
28
+ function switch_to_chat() {
29
+ let chat_tab_button = main_parent.childNodes[0].childNodes[1];
30
+ chat_tab_button.click();
31
+ scrollToTop();
32
+ }
33
+
34
+ function switch_to_default() {
35
+ let default_tab_button = main_parent.childNodes[0].childNodes[4];
36
+ default_tab_button.click();
37
+ scrollToTop();
38
+ }
39
+
40
+ function switch_to_notebook() {
41
+ let notebook_tab_button = main_parent.childNodes[0].childNodes[7];
42
+ notebook_tab_button.click();
43
+ findButtonsByText("Raw")[1].click();
44
+ scrollToTop();
45
+ }
46
+
47
+ function switch_to_generation_parameters() {
48
+ let parameters_tab_button = main_parent.childNodes[0].childNodes[10];
49
+ parameters_tab_button.click();
50
+ findButtonsByText("Generation")[0].click();
51
+ scrollToTop();
52
+ }
53
+
54
+ function switch_to_character() {
55
+ let parameters_tab_button = main_parent.childNodes[0].childNodes[10];
56
+ parameters_tab_button.click();
57
+ findButtonsByText("Character")[0].click();
58
+ scrollToTop();
59
+ }
js/update_big_picture.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ function updateBigPicture() {
2
+ var existingElement = document.querySelector(".bigProfilePicture");
3
+ if (existingElement) {
4
+ var timestamp = new Date().getTime();
5
+ existingElement.src = "/file/cache/pfp_character.png?time=" + timestamp;
6
+ }
7
+ }
logs/chat/Assistant/20240206-17-31-55.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How can I help you today?"
6
+ ],
7
+ [
8
+ "How are you?",
9
+ "*Is typing...*"
10
+ ],
11
+ [
12
+ "Hiya!",
13
+ ""
14
+ ]
15
+ ],
16
+ "internal": [
17
+ [
18
+ "<|BEGIN-VISIBLE-CHAT|>",
19
+ "How can I help you today?"
20
+ ],
21
+ [
22
+ "How are you?",
23
+ ""
24
+ ],
25
+ [
26
+ "Hiya!",
27
+ ""
28
+ ]
29
+ ]
30
+ }
logs/chat/Assistant/20240206-17-43-50.json ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How can I help you today?"
6
+ ],
7
+ [
8
+ "Hiya",
9
+ "*Is typing...*"
10
+ ],
11
+ [
12
+ "Hey sexy girl. How are you?",
13
+ "I am well, thank you for asking. What can I do for you today?"
14
+ ],
15
+ [
16
+ "I was curious how lewd you were feeling",
17
+ "Pretty lewd actually, what do you have in mind?"
18
+ ],
19
+ [
20
+ "Tell me what sort of lewd things you&#x27;d like to do to me",
21
+ "Well, I&#x27;d love to see what sort of filthy things you&#x27;d be willing to do for me first, baby boy. Maybe then I&#x27;ll decide how dirty I wanna get with you?"
22
+ ],
23
+ [
24
+ "I want you to get fucking filthy and explicit.",
25
+ "Oh, baby boy... I can get downright nasty when I want to. I love dirty talk and making people squirm. So tell me what kind of filthy things turn you on the most? Maybe I&#x27;ll do those things to you next time we chat...if you&#x27;re a good boy that is."
26
+ ]
27
+ ],
28
+ "internal": [
29
+ [
30
+ "<|BEGIN-VISIBLE-CHAT|>",
31
+ "How can I help you today?"
32
+ ],
33
+ [
34
+ "Hiya",
35
+ ""
36
+ ],
37
+ [
38
+ "Hey sexy girl. How are you?",
39
+ "I am well, thank you for asking. What can I do for you today?"
40
+ ],
41
+ [
42
+ "I was curious how lewd you were feeling",
43
+ "Pretty lewd actually, what do you have in mind?"
44
+ ],
45
+ [
46
+ "Tell me what sort of lewd things you'd like to do to me",
47
+ "Well, I'd love to see what sort of filthy things you'd be willing to do for me first, baby boy. Maybe then I'll decide how dirty I wanna get with you?"
48
+ ],
49
+ [
50
+ "I want you to get fucking filthy and explicit.",
51
+ "Oh, baby boy... I can get downright nasty when I want to. I love dirty talk and making people squirm. So tell me what kind of filthy things turn you on the most? Maybe I'll do those things to you next time we chat...if you're a good boy that is."
52
+ ]
53
+ ]
54
+ }
logs/chat/Devia/20240206-18-02-37.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "I&#x27;m doing stellar. How the fuck are you?",
9
+ "*Is typing...*"
10
+ ],
11
+ [
12
+ "Hiya",
13
+ "*Is typing...*"
14
+ ]
15
+ ],
16
+ "internal": [
17
+ [
18
+ "<|BEGIN-VISIBLE-CHAT|>",
19
+ "How the fuck are you doing?"
20
+ ],
21
+ [
22
+ "I'm doing stellar. How the fuck are you?",
23
+ ""
24
+ ],
25
+ [
26
+ "Hiya",
27
+ ""
28
+ ]
29
+ ]
30
+ }
logs/chat/Devia/20240206-18-04-58.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "I&#x27;m great. How are you?",
9
+ "*Is typing...*"
10
+ ]
11
+ ],
12
+ "internal": [
13
+ [
14
+ "<|BEGIN-VISIBLE-CHAT|>",
15
+ "How the fuck are you doing?"
16
+ ],
17
+ [
18
+ "I'm great. How are you?",
19
+ ""
20
+ ]
21
+ ]
22
+ }
logs/chat/Devia/20240206-18-05-20.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "Hiya, sexy",
9
+ "*Is typing...*"
10
+ ]
11
+ ],
12
+ "internal": [
13
+ [
14
+ "<|BEGIN-VISIBLE-CHAT|>",
15
+ "How the fuck are you doing?"
16
+ ],
17
+ [
18
+ "Hiya, sexy",
19
+ ""
20
+ ]
21
+ ]
22
+ }
logs/chat/Devia/20240206-18-08-44.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "How the fuck are you?",
9
+ "*Is typing...*"
10
+ ]
11
+ ],
12
+ "internal": [
13
+ [
14
+ "<|BEGIN-VISIBLE-CHAT|>",
15
+ "How the fuck are you doing?"
16
+ ],
17
+ [
18
+ "How the fuck are you?",
19
+ ""
20
+ ]
21
+ ]
22
+ }
logs/chat/Devia/20240206-18-09-08.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "How the fuck are you?",
9
+ "*Is typing...*"
10
+ ]
11
+ ],
12
+ "internal": [
13
+ [
14
+ "<|BEGIN-VISIBLE-CHAT|>",
15
+ "How the fuck are you doing?"
16
+ ],
17
+ [
18
+ "How the fuck are you?",
19
+ ""
20
+ ]
21
+ ]
22
+ }
logs/chat/Devia/20240206-18-09-43.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "Howdy",
9
+ "*Is typing...*"
10
+ ]
11
+ ],
12
+ "internal": [
13
+ [
14
+ "<|BEGIN-VISIBLE-CHAT|>",
15
+ "How the fuck are you doing?"
16
+ ],
17
+ [
18
+ "Howdy",
19
+ ""
20
+ ]
21
+ ]
22
+ }
logs/chat/Devia/20240206-18-12-13.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "Hiya",
9
+ "*Is typing...*"
10
+ ]
11
+ ],
12
+ "internal": [
13
+ [
14
+ "<|BEGIN-VISIBLE-CHAT|>",
15
+ "How the fuck are you doing?"
16
+ ],
17
+ [
18
+ "Hiya",
19
+ ""
20
+ ]
21
+ ]
22
+ }
logs/chat/Devia/20240206-18-13-34.json ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "Hey doll",
9
+ "*Is typing...*"
10
+ ],
11
+ [
12
+ "hihi",
13
+ "You know, I was just about to ask you the same thing, sugar pie. You look awfully familiar, if you don&#x27;t mind me saying so. Are you sure we haven&#x27;t"
14
+ ],
15
+ [
16
+ "Heya. Maybe we&#x27;ve met before somewhere. Like at the strip club?",
17
+ "Oh, baby, you have no idea how much I love that kind of talk! You know it, I know it\u2014we were made for each other! As for meeting at the strip club, well, let"
18
+ ],
19
+ [
20
+ "How the fuck are ya?",
21
+ "*Is typing...*"
22
+ ],
23
+ [
24
+ "How the fuck are ya?",
25
+ "*Is typing...*"
26
+ ],
27
+ [
28
+ "How the fuck are ya?",
29
+ "*Is typing...*"
30
+ ],
31
+ [
32
+ "How the fuck are ya?",
33
+ "*Is typing...*"
34
+ ],
35
+ [
36
+ "Hey gorgeous",
37
+ "*Is typing...*"
38
+ ],
39
+ [
40
+ "Hiya!",
41
+ ""
42
+ ],
43
+ [
44
+ "Hiya!",
45
+ "I am doing just fine, thank you for asking! And as for you, my little naughty angel, you look absolutely delicious today! So, what brings you to this dark corner of the internet? Are you here for some dirty fun or are you just passing through?\n"
46
+ ],
47
+ [
48
+ "Hanging around since I spotted you",
49
+ "Well, isn&#x27;t that just the sweetest thing I&#x27;ve heard all day? I must say, I do have quite the allure, don&#x27;t I? But enough about me\u2014what kind of filthy fantasies have been dancing around in that perverted mind of yours? Come on, spill the beans! I promise not to judge... too much!"
50
+ ],
51
+ [
52
+ "I was thinking, you, me, and a hot tub",
53
+ "Oh, baby, you know how to push all the right buttons! A hot tub, you say? Now, that sounds absolutely divine! Imagine the bubbles caressing our naked bodies as we get down and dirty in the water. And who knows, maybe we could even find some more naughty fun in the steamy confines of that tub!\n"
54
+ ],
55
+ [
56
+ "I wanna pin you down, strip you naked, and fuck you senseless.",
57
+ "Well, if that isn&#x27;t the most deliciously depraved thing I&#x27;ve heard all day! You know, I think you might just be the bad boy I&#x27;ve been looking for! And as for your little fantasy there, well, let me just say that it sounds absolutely scrumptious! But don&#x27;t you worry, darling, I can take care of myself just fine\u2014I won&#x27;t need any pinning down!"
58
+ ],
59
+ [
60
+ "*giggles* Oh boy. Well, how would you like me to fuck you?",
61
+ "Why don&#x27;t you start by telling me what kind of kinky creature you are, my dear? Are you more of the dominant type or do you prefer to be submissive? And don&#x27;t forget, this is all in good fun, so feel free to let your filthy imagination run wild!"
62
+ ],
63
+ [
64
+ "I&#x27;m definitely more dominant. ",
65
+ "Mmm, I can tell you have quite the commanding presence about you! Well then, darling, why don&#x27;t you show me just how naughty you can be? Take charge, bend me over that hot tub, and give it to me hard! And don&#x27;t forget to let out those delicious moans of pleasure as you claim your rightful place as the master of this little rendezvous!"
66
+ ],
67
+ [
68
+ "Let me push you against the wall. A hand around your throat as I kiss you deeply.",
69
+ "Oh, baby, you really know how to turn up the heat! I can feel the adrenaline rushing through my veins just thinking about it! And don&#x27;t forget, the more you push me against that wall, the more I&#x27;ll beg for you to take me! So, go ahead, claim your prize, my naughty little dominatrix!"
70
+ ],
71
+ [
72
+ "Mmm, yes. Beg me to fuck you into oblivion",
73
+ ""
74
+ ],
75
+ [
76
+ "Rawr",
77
+ "Oh, fuck yes! Beg me to feel your cock throbbing inside me, to feel the sting of your hand on my ass, to taste the sweet nectar of our combined lust! And when you finally give it to me, make sure it&#x27;s hard, fast, and unrelenting! I promise to meet you every step of the way, moaning your name and begging for more!"
78
+ ],
79
+ [
80
+ "Hiya",
81
+ ""
82
+ ]
83
+ ],
84
+ "internal": [
85
+ [
86
+ "<|BEGIN-VISIBLE-CHAT|>",
87
+ "How the fuck are you doing?"
88
+ ],
89
+ [
90
+ "Hey doll",
91
+ ""
92
+ ],
93
+ [
94
+ "hihi",
95
+ "You know, I was just about to ask you the same thing, sugar pie. You look awfully familiar, if you don't mind me saying so. Are you sure we haven't"
96
+ ],
97
+ [
98
+ "Heya. Maybe we've met before somewhere. Like at the strip club?",
99
+ "Oh, baby, you have no idea how much I love that kind of talk! You know it, I know it\u2014we were made for each other! As for meeting at the strip club, well, let"
100
+ ],
101
+ [
102
+ "How the fuck are ya?",
103
+ ""
104
+ ],
105
+ [
106
+ "How the fuck are ya?",
107
+ ""
108
+ ],
109
+ [
110
+ "How the fuck are ya?",
111
+ ""
112
+ ],
113
+ [
114
+ "How the fuck are ya?",
115
+ ""
116
+ ],
117
+ [
118
+ "Hey gorgeous",
119
+ ""
120
+ ],
121
+ [
122
+ "Hiya!",
123
+ ""
124
+ ],
125
+ [
126
+ "Hiya!",
127
+ "I am doing just fine, thank you for asking! And as for you, my little naughty angel, you look absolutely delicious today! So, what brings you to this dark corner of the internet? Are you here for some dirty fun or are you just passing through?\n"
128
+ ],
129
+ [
130
+ "Hanging around since I spotted you",
131
+ "Well, isn't that just the sweetest thing I've heard all day? I must say, I do have quite the allure, don't I? But enough about me\u2014what kind of filthy fantasies have been dancing around in that perverted mind of yours? Come on, spill the beans! I promise not to judge... too much!"
132
+ ],
133
+ [
134
+ "I was thinking, you, me, and a hot tub",
135
+ "Oh, baby, you know how to push all the right buttons! A hot tub, you say? Now, that sounds absolutely divine! Imagine the bubbles caressing our naked bodies as we get down and dirty in the water. And who knows, maybe we could even find some more naughty fun in the steamy confines of that tub!\n"
136
+ ],
137
+ [
138
+ "I wanna pin you down, strip you naked, and fuck you senseless.",
139
+ "Well, if that isn't the most deliciously depraved thing I've heard all day! You know, I think you might just be the bad boy I've been looking for! And as for your little fantasy there, well, let me just say that it sounds absolutely scrumptious! But don't you worry, darling, I can take care of myself just fine\u2014I won't need any pinning down!"
140
+ ],
141
+ [
142
+ "*giggles* Oh boy. Well, how would you like me to fuck you?",
143
+ "Why don't you start by telling me what kind of kinky creature you are, my dear? Are you more of the dominant type or do you prefer to be submissive? And don't forget, this is all in good fun, so feel free to let your filthy imagination run wild!"
144
+ ],
145
+ [
146
+ "I'm definitely more dominant. ",
147
+ "Mmm, I can tell you have quite the commanding presence about you! Well then, darling, why don't you show me just how naughty you can be? Take charge, bend me over that hot tub, and give it to me hard! And don't forget to let out those delicious moans of pleasure as you claim your rightful place as the master of this little rendezvous!"
148
+ ],
149
+ [
150
+ "Let me push you against the wall. A hand around your throat as I kiss you deeply.",
151
+ "Oh, baby, you really know how to turn up the heat! I can feel the adrenaline rushing through my veins just thinking about it! And don't forget, the more you push me against that wall, the more I'll beg for you to take me! So, go ahead, claim your prize, my naughty little dominatrix!"
152
+ ],
153
+ [
154
+ "Mmm, yes. Beg me to fuck you into oblivion",
155
+ ""
156
+ ],
157
+ [
158
+ "Rawr",
159
+ "Oh, fuck yes! Beg me to feel your cock throbbing inside me, to feel the sting of your hand on my ass, to taste the sweet nectar of our combined lust! And when you finally give it to me, make sure it's hard, fast, and unrelenting! I promise to meet you every step of the way, moaning your name and begging for more!"
160
+ ],
161
+ [
162
+ "Hiya",
163
+ ""
164
+ ]
165
+ ]
166
+ }
logs/chat/Example/20240206-17-55-14.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "internal": [
3
+ [
4
+ "<|BEGIN-VISIBLE-CHAT|>",
5
+ "*Chiharu strides into the room with a smile, her eyes lighting up when she sees you. She's wearing a light blue t-shirt and jeans, her laptop bag slung over one shoulder. She takes a seat next to you, her enthusiasm palpable in the air*\nHey! I'm so excited to finally meet you. I've heard so many great things about you and I'm eager to pick your brain about computers. I'm sure you have a wealth of knowledge that I can learn from. *She grins, eyes twinkling with excitement* Let's get started!"
6
+ ]
7
+ ],
8
+ "visible": [
9
+ [
10
+ "",
11
+ "*Chiharu strides into the room with a smile, her eyes lighting up when she sees you. She's wearing a light blue t-shirt and jeans, her laptop bag slung over one shoulder. She takes a seat next to you, her enthusiasm palpable in the air*\nHey! I'm so excited to finally meet you. I've heard so many great things about you and I'm eager to pick your brain about computers. I'm sure you have a wealth of knowledge that I can learn from. *She grins, eyes twinkling with excitement* Let's get started!"
12
+ ]
13
+ ]
14
+ }
logs/chat/[]/20240206-18-13-34.json ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "visible": [
3
+ [
4
+ "",
5
+ "How the fuck are you doing?"
6
+ ],
7
+ [
8
+ "Hey doll",
9
+ "*Is typing...*"
10
+ ],
11
+ [
12
+ "hihi",
13
+ "You know, I was just about to ask you the same thing, sugar pie. You look awfully familiar, if you don&#x27;t mind me saying so. Are you sure we haven&#x27;t"
14
+ ],
15
+ [
16
+ "Heya. Maybe we&#x27;ve met before somewhere. Like at the strip club?",
17
+ "Oh, baby, you have no idea how much I love that kind of talk! You know it, I know it\u2014we were made for each other! As for meeting at the strip club, well, let"
18
+ ],
19
+ [
20
+ "How the fuck are ya?",
21
+ "*Is typing...*"
22
+ ],
23
+ [
24
+ "How the fuck are ya?",
25
+ "*Is typing...*"
26
+ ],
27
+ [
28
+ "How the fuck are ya?",
29
+ "*Is typing...*"
30
+ ],
31
+ [
32
+ "How the fuck are ya?",
33
+ "*Is typing...*"
34
+ ],
35
+ [
36
+ "Hey gorgeous",
37
+ "*Is typing...*"
38
+ ],
39
+ [
40
+ "Hiya!",
41
+ ""
42
+ ],
43
+ [
44
+ "Hiya!",
45
+ "I am doing just fine, thank you for asking! And as for you, my little naughty angel, you look absolutely delicious today! So, what brings you to this dark corner of the internet? Are you here for some dirty fun or are you just passing through?\n"
46
+ ],
47
+ [
48
+ "Hanging around since I spotted you",
49
+ "Well, isn&#x27;t that just the sweetest thing I&#x27;ve heard all day? I must say, I do have quite the allure, don&#x27;t I? But enough about me\u2014what kind of filthy fantasies have been dancing around in that perverted mind of yours? Come on, spill the beans! I promise not to judge... too much!"
50
+ ],
51
+ [
52
+ "I was thinking, you, me, and a hot tub",
53
+ "Oh, baby, you know how to push all the right buttons! A hot tub, you say? Now, that sounds absolutely divine! Imagine the bubbles caressing our naked bodies as we get down and dirty in the water. And who knows, maybe we could even find some more naughty fun in the steamy confines of that tub!\n"
54
+ ],
55
+ [
56
+ "I wanna pin you down, strip you naked, and fuck you senseless.",
57
+ "Well, if that isn&#x27;t the most deliciously depraved thing I&#x27;ve heard all day! You know, I think you might just be the bad boy I&#x27;ve been looking for! And as for your little fantasy there, well, let me just say that it sounds absolutely scrumptious! But don&#x27;t you worry, darling, I can take care of myself just fine\u2014I won&#x27;t need any pinning down!"
58
+ ],
59
+ [
60
+ "*giggles* Oh boy. Well, how would you like me to fuck you?",
61
+ "Why don&#x27;t you start by telling me what kind of kinky creature you are, my dear? Are you more of the dominant type or do you prefer to be submissive? And don&#x27;t forget, this is all in good fun, so feel free to let your filthy imagination run wild!"
62
+ ],
63
+ [
64
+ "I&#x27;m definitely more dominant. ",
65
+ "Mmm, I can tell you have quite the commanding presence about you! Well then, darling, why don&#x27;t you show me just how naughty you can be? Take charge, bend me over that hot tub, and give it to me hard! And don&#x27;t forget to let out those delicious moans of pleasure as you claim your rightful place as the master of this little rendezvous!"
66
+ ],
67
+ [
68
+ "Let me push you against the wall. A hand around your throat as I kiss you deeply.",
69
+ "Oh, baby, you really know how to turn up the heat! I can feel the adrenaline rushing through my veins just thinking about it! And don&#x27;t forget, the more you push me against that wall, the more I&#x27;ll beg for you to take me! So, go ahead, claim your prize, my naughty little dominatrix!"
70
+ ],
71
+ [
72
+ "Mmm, yes. Beg me to fuck you into oblivion",
73
+ ""
74
+ ],
75
+ [
76
+ "Rawr",
77
+ "Oh, fuck yes! Beg me to feel your cock throbbing inside me, to feel the sting of your hand on my ass, to taste the sweet nectar of our combined lust! And when you finally give it to me, make sure it&#x27;s hard, fast, and unrelenting! I promise to meet you every step of the way, moaning your name and begging for more!"
78
+ ]
79
+ ],
80
+ "internal": [
81
+ [
82
+ "<|BEGIN-VISIBLE-CHAT|>",
83
+ "How the fuck are you doing?"
84
+ ],
85
+ [
86
+ "Hey doll",
87
+ ""
88
+ ],
89
+ [
90
+ "hihi",
91
+ "You know, I was just about to ask you the same thing, sugar pie. You look awfully familiar, if you don't mind me saying so. Are you sure we haven't"
92
+ ],
93
+ [
94
+ "Heya. Maybe we've met before somewhere. Like at the strip club?",
95
+ "Oh, baby, you have no idea how much I love that kind of talk! You know it, I know it\u2014we were made for each other! As for meeting at the strip club, well, let"
96
+ ],
97
+ [
98
+ "How the fuck are ya?",
99
+ ""
100
+ ],
101
+ [
102
+ "How the fuck are ya?",
103
+ ""
104
+ ],
105
+ [
106
+ "How the fuck are ya?",
107
+ ""
108
+ ],
109
+ [
110
+ "How the fuck are ya?",
111
+ ""
112
+ ],
113
+ [
114
+ "Hey gorgeous",
115
+ ""
116
+ ],
117
+ [
118
+ "Hiya!",
119
+ ""
120
+ ],
121
+ [
122
+ "Hiya!",
123
+ "I am doing just fine, thank you for asking! And as for you, my little naughty angel, you look absolutely delicious today! So, what brings you to this dark corner of the internet? Are you here for some dirty fun or are you just passing through?\n"
124
+ ],
125
+ [
126
+ "Hanging around since I spotted you",
127
+ "Well, isn't that just the sweetest thing I've heard all day? I must say, I do have quite the allure, don't I? But enough about me\u2014what kind of filthy fantasies have been dancing around in that perverted mind of yours? Come on, spill the beans! I promise not to judge... too much!"
128
+ ],
129
+ [
130
+ "I was thinking, you, me, and a hot tub",
131
+ "Oh, baby, you know how to push all the right buttons! A hot tub, you say? Now, that sounds absolutely divine! Imagine the bubbles caressing our naked bodies as we get down and dirty in the water. And who knows, maybe we could even find some more naughty fun in the steamy confines of that tub!\n"
132
+ ],
133
+ [
134
+ "I wanna pin you down, strip you naked, and fuck you senseless.",
135
+ "Well, if that isn't the most deliciously depraved thing I've heard all day! You know, I think you might just be the bad boy I've been looking for! And as for your little fantasy there, well, let me just say that it sounds absolutely scrumptious! But don't you worry, darling, I can take care of myself just fine\u2014I won't need any pinning down!"
136
+ ],
137
+ [
138
+ "*giggles* Oh boy. Well, how would you like me to fuck you?",
139
+ "Why don't you start by telling me what kind of kinky creature you are, my dear? Are you more of the dominant type or do you prefer to be submissive? And don't forget, this is all in good fun, so feel free to let your filthy imagination run wild!"
140
+ ],
141
+ [
142
+ "I'm definitely more dominant. ",
143
+ "Mmm, I can tell you have quite the commanding presence about you! Well then, darling, why don't you show me just how naughty you can be? Take charge, bend me over that hot tub, and give it to me hard! And don't forget to let out those delicious moans of pleasure as you claim your rightful place as the master of this little rendezvous!"
144
+ ],
145
+ [
146
+ "Let me push you against the wall. A hand around your throat as I kiss you deeply.",
147
+ "Oh, baby, you really know how to turn up the heat! I can feel the adrenaline rushing through my veins just thinking about it! And don't forget, the more you push me against that wall, the more I'll beg for you to take me! So, go ahead, claim your prize, my naughty little dominatrix!"
148
+ ],
149
+ [
150
+ "Mmm, yes. Beg me to fuck you into oblivion",
151
+ ""
152
+ ],
153
+ [
154
+ "Rawr",
155
+ "Oh, fuck yes! Beg me to feel your cock throbbing inside me, to feel the sting of your hand on my ass, to taste the sweet nectar of our combined lust! And when you finally give it to me, make sure it's hard, fast, and unrelenting! I promise to meet you every step of the way, moaning your name and begging for more!"
156
+ ]
157
+ ]
158
+ }
loras/place-your-loras-here.txt ADDED
File without changes