From 3f0ebef7232dd7ff43d14aa9f86ba0a3eac054d1 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Wed, 24 May 2023 09:40:53 +0900 Subject: [PATCH] [feat] global lorebook --- src/lang/en.ts | 6 +- .../Pages/GlobalLoreBookSettings.svelte | 11 +++ src/lib/Setting/Settings.svelte | 19 ++++- src/lib/Setting/lorepreset.svelte | 77 +++++++++++++++++++ src/lib/SideBars/LoreBookSetting.svelte | 29 +++++-- src/ts/database.ts | 12 +++ src/ts/process/lorebook.ts | 39 +++++++--- 7 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 src/lib/Setting/Pages/GlobalLoreBookSettings.svelte create mode 100644 src/lib/Setting/lorepreset.svelte diff --git a/src/lang/en.ts b/src/lang/en.ts index 4c9d618a..a3d5a464 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -268,5 +268,7 @@ export const languageEnglish = { ttsReadOnlyQuoted: "Read Only Quoted", ttsStop: "Stop TTS", askRemoval:"Ask Removal", - replaceGlobalNote: "Global Note Replacement" -} + replaceGlobalNote: "Global Note Replacement", + charLoreBook: 'Character Lorebook', + globalLoreBook: 'Global Lorebook', +} \ No newline at end of file diff --git a/src/lib/Setting/Pages/GlobalLoreBookSettings.svelte b/src/lib/Setting/Pages/GlobalLoreBookSettings.svelte new file mode 100644 index 00000000..dc17babc --- /dev/null +++ b/src/lib/Setting/Pages/GlobalLoreBookSettings.svelte @@ -0,0 +1,11 @@ + +

{language.globalLoreBook}

+ + + \ No newline at end of file diff --git a/src/lib/Setting/Settings.svelte b/src/lib/Setting/Settings.svelte index bfbac3cb..ce1e9737 100644 --- a/src/lib/Setting/Settings.svelte +++ b/src/lib/Setting/Settings.svelte @@ -1,5 +1,5 @@ + +
+
+
+

{language.loreBook}

+
+ +
+
+ {#each $DataBase.loreBook as lore, ind} + +
+ + {/each} +
+ + +
+
+ + + \ No newline at end of file diff --git a/src/lib/SideBars/LoreBookSetting.svelte b/src/lib/SideBars/LoreBookSetting.svelte index 59813b86..91489ee9 100644 --- a/src/lib/SideBars/LoreBookSetting.svelte +++ b/src/lib/SideBars/LoreBookSetting.svelte @@ -7,7 +7,7 @@ import LoreBookData from "./LoreBookData.svelte"; import Check from "../Others/Check.svelte"; let submenu = 0 - let globalMode = false + export let globalMode = false {#if !globalMode} @@ -30,9 +30,26 @@ {/if} {#if submenu !== 2} - {submenu === 0 ? $DataBase.characters[$selectedCharID].type === 'group' ? language.groupLoreInfo : language.globalLoreInfo : language.localLoreInfo} + {#if !globalMode} + {submenu === 0 ? $DataBase.characters[$selectedCharID].type === 'group' ? language.groupLoreInfo : language.globalLoreInfo : language.localLoreInfo} + {/if}
- {#if submenu === 0} + {#if globalMode} + {#if $DataBase.loreBook[$DataBase.loreBookPage].data.length === 0} + No Lorebook + {:else} + {#each $DataBase.loreBook[$DataBase.loreBookPage].data as book, i} + {#if i !== 0} +
+ {/if} + { + let lore = $DataBase.loreBook[$DataBase.loreBookPage].data + lore.splice(i, 1) + $DataBase.loreBook[$DataBase.loreBookPage].data = lore + }}/> + {/each} + {/if} + {:else if submenu === 0} {#if $DataBase.characters[$selectedCharID].globalLore.length === 0} No Lorebook {:else} @@ -96,16 +113,16 @@ {#if submenu !== 2}
- diff --git a/src/ts/database.ts b/src/ts/database.ts index eac656cf..1092e4a0 100644 --- a/src/ts/database.ts +++ b/src/ts/database.ts @@ -235,6 +235,13 @@ export function setDatabase(data:Database){ model: "clio-v1", } } + if(checkNullish(data.loreBook)){ + data.loreBookPage = 0 + data.loreBook = [{ + name: "My First LoreBook", + data: [] + }] + } changeLanguage(data.language) @@ -382,6 +389,11 @@ export interface Database{ jailbreakToggle:boolean loreBookDepth: number loreBookToken: number, + loreBook: { + name:string + data:loreBook[] + }[] + loreBookPage: number supaMemoryPrompt: string username: string userIcon: string diff --git a/src/ts/process/lorebook.ts b/src/ts/process/lorebook.ts index 8a523f1d..137fb056 100644 --- a/src/ts/process/lorebook.ts +++ b/src/ts/process/lorebook.ts @@ -10,7 +10,19 @@ import { downloadFile } from "../globalApi"; export function addLorebook(type:number) { let selectedID = get(selectedCharID) let db = get(DataBase) - if(type === 0){ + if(type === -1){ + db.loreBook[db.loreBookPage].data.push({ + key: '', + comment: `New Lore ${db.loreBook[db.loreBookPage].data.length + 1}`, + content: '', + mode: 'normal', + insertorder: 100, + alwaysActive: false, + secondkey: "", + selective: false + }) + } + else if(type === 0){ db.characters[selectedID].globalLore.push({ key: '', comment: `New Lore ${db.characters[selectedID].globalLore.length + 1}`, @@ -53,9 +65,10 @@ export async function loadLoreBookPrompt(){ const db = get(DataBase) const char = db.characters[selectedID] const page = char.chatPage - const globalLore = char.globalLore - const charLore = char.chats[page].localLore - const fullLore = globalLore.concat(charLore) + const characterLore = char.globalLore + const chatLore = char.chats[page].localLore + const globalLore = db.loreBook[db.loreBookPage].data + const fullLore = characterLore.concat(chatLore.concat(globalLore)) const currentChat = char.chats[page].message const loreDepth = char.loreSettings?.scanDepth ?? db.loreBookDepth const loreToken = char.loreSettings?.tokenBudget ?? db.loreBookToken @@ -144,11 +157,14 @@ export async function loadLoreBookPrompt(){ } -export async function importLoreBook(mode:'global'|'local'){ +export async function importLoreBook(mode:'global'|'local'|'sglobal'){ const selectedID = get(selectedCharID) let db = get(DataBase) const page = db.characters[selectedID].chatPage - let lore = mode === 'global' ? db.characters[selectedID].globalLore : db.characters[selectedID].chats[page].localLore + let lore = + mode === 'global' ? db.characters[selectedID].globalLore : + mode === 'sglobal' ? db.loreBook[db.loreBookPage].data : + db.characters[selectedID].chats[page].localLore const lorebook = (await selectSingleFile(['json'])).data if(!lorebook){ return @@ -189,6 +205,9 @@ export async function importLoreBook(mode:'global'|'local'){ if(mode === 'global'){ db.characters[selectedID].globalLore = lore } + if(mode === 'sglobal'){ + db.loreBook[db.loreBookPage].data = lore + } else{ db.characters[selectedID].chats[page].localLore = lore } @@ -198,13 +217,15 @@ export async function importLoreBook(mode:'global'|'local'){ } } -export async function exportLoreBook(mode:'global'|'local'){ +export async function exportLoreBook(mode:'global'|'local'|'sglobal'){ try { const selectedID = get(selectedCharID) const db = get(DataBase) const page = db.characters[selectedID].chatPage - const lore = mode === 'global' ? db.characters[selectedID].globalLore : db.characters[selectedID].chats[page].localLore - + const lore = + mode === 'global' ? db.characters[selectedID].globalLore : + mode === 'sglobal' ? db.loreBook[db.loreBookPage].data : + db.characters[selectedID].chats[page].localLore const stringl = Buffer.from(JSON.stringify({ type: 'risu', ver: 1,