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}
+
+
{
+ let loreBooks = $DataBase.loreBook
+ let newLoreBook = {
+ name: `New LoreBook`,
+ data: []
+ }
+ loreBooks.push(newLoreBook)
+
+ $DataBase.loreBook = loreBooks
+ }}>
+
+
+
{
+ editMode = !editMode
+ }}>
+
+
+
+
+
+
+
\ 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}
-
{addLorebook(submenu)}} class="hover:text-neutral-200 cursor-pointer">
+ {addLorebook(globalMode ? -1 : submenu)}} class="hover:text-neutral-200 cursor-pointer">
{
- exportLoreBook(submenu === 0 ? 'global' : 'local')
+ exportLoreBook(globalMode ? 'sglobal' : submenu === 0 ? 'global' : 'local')
}} class="hover:text-neutral-200 ml-1 cursor-pointer">
{
- importLoreBook(submenu === 0 ? 'global' : 'local')
+ importLoreBook(globalMode ? 'sglobal' : submenu === 0 ? 'global' : 'local')
}} class="hover:text-neutral-200 ml-2 cursor-pointer">
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,