From 8f667d63948a86ccb47ab608b8a74c3642fb647a Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Mon, 23 Dec 2024 17:07:19 +0900 Subject: [PATCH] Add Saving Icon --- src/App.svelte | 7 +- src/lang/en.ts | 1 + src/lib/Others/AccountWarningComp.svelte | 12 --- src/lib/Others/SavePopupIcon.svelte | 42 ++++++++ src/lib/Setting/Pages/DisplaySettings.svelte | 6 +- src/ts/globalApi.svelte.ts | 20 +++- src/ts/process/request.ts | 108 ++++++++++--------- src/ts/storage/database.svelte.ts | 2 + 8 files changed, 126 insertions(+), 72 deletions(-) delete mode 100644 src/lib/Others/AccountWarningComp.svelte create mode 100644 src/lib/Others/SavePopupIcon.svelte diff --git a/src/App.svelte b/src/App.svelte index b2a760df..f3dd4eb3 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -10,8 +10,7 @@ import Settings from './lib/Setting/Settings.svelte'; import { showRealmInfoStore, importCharacterProcess } from './ts/characterCards'; import RealmFrame from './lib/UI/Realm/RealmFrame.svelte'; - import { AccountWarning } from './ts/storage/accountStorage'; - import AccountWarningComp from './lib/Others/AccountWarningComp.svelte'; + import SavePopupIconComp from './lib/Others/SavePopupIcon.svelte'; import Botpreset from './lib/Setting/botpreset.svelte'; import ListedPersona from './lib/Setting/listedPersona.svelte'; import MobileHeader from './lib/Mobile/MobileHeader.svelte'; @@ -87,13 +86,11 @@ {#if $ShowRealmFrameStore} {/if} - {#if $AccountWarning} - - {/if} {#if $openPresetList} {$openPresetList = false}} /> {/if} {#if $openPersonaList} {$openPersonaList = false}} /> {/if} + \ No newline at end of file diff --git a/src/lang/en.ts b/src/lang/en.ts index e51b5b18..7cb213a7 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -833,4 +833,5 @@ export const languageEnglish = { noWebGPU: "Your Browser or OS doesn't support WebGPU. this will slow down the performance significantly.", menuSideBar: "Menu Side Bar", home: "Home", + showSavingIcon: "Show Saving Icon", } \ No newline at end of file diff --git a/src/lib/Others/AccountWarningComp.svelte b/src/lib/Others/AccountWarningComp.svelte deleted file mode 100644 index 8e75f044..00000000 --- a/src/lib/Others/AccountWarningComp.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/src/lib/Others/SavePopupIcon.svelte b/src/lib/Others/SavePopupIcon.svelte new file mode 100644 index 00000000..493ab97e --- /dev/null +++ b/src/lib/Others/SavePopupIcon.svelte @@ -0,0 +1,42 @@ + + +{#if DBState?.db?.showSavingIcon && saving.state} +
+ +
+{:else if $AccountWarning} + +{/if} + + \ No newline at end of file diff --git a/src/lib/Setting/Pages/DisplaySettings.svelte b/src/lib/Setting/Pages/DisplaySettings.svelte index 2bdd38f1..38fe538e 100644 --- a/src/lib/Setting/Pages/DisplaySettings.svelte +++ b/src/lib/Setting/Pages/DisplaySettings.svelte @@ -202,7 +202,7 @@ {language.lineHeight} - + {language.iconSize} @@ -300,6 +300,10 @@ +
+ +
+ {#if DBState.db.textScreenBorder}
{ diff --git a/src/ts/globalApi.svelte.ts b/src/ts/globalApi.svelte.ts index 225db6c9..d4483664 100644 --- a/src/ts/globalApi.svelte.ts +++ b/src/ts/globalApi.svelte.ts @@ -302,6 +302,9 @@ export async function loadAsset(id:string){ } let lastSave = '' +export let saving = $state({ + state: false +}) /** * Saves the current state of the database. @@ -335,19 +338,25 @@ export async function saveDb(){ $effect.root(() => { let selIdState = $state(0) + let oldSaveHash = '' selectedCharID.subscribe((v) => { selIdState = v }) $effect(() => { - $state.snapshot(DBState?.db?.characters?.[selIdState]) + let newSaveHash = '' + newSaveHash += JSON.stringify(DBState?.db?.characters?.[selIdState]) for(const key in DBState.db){ if(key !== 'characters'){ - $state.snapshot(DBState.db[key]) + newSaveHash += (DBState.db[key]) } } - changed = true + + if(newSaveHash !== oldSaveHash){ + changed = true + oldSaveHash = newSaveHash + } }) }) @@ -356,10 +365,11 @@ export async function saveDb(){ await sleep(1000) while(true){ if(!changed){ - await sleep(1000) + await sleep(500) continue } + saving.state = true changed = false try { @@ -430,6 +440,8 @@ export async function saveDb(){ console.error(error) } } + + saving.state = false } } diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index 7f0214d2..b3da8637 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -1392,60 +1392,68 @@ async function requestOoba(arg:RequestDataArgumentExtended):Promise { - const formated = arg.formated const db = getDatabase() - const maxTokens = arg.maxTokens - const bias = arg.biasString - const v2Function = pluginV2.providers.get(db.currentPluginProvider) - - const d = v2Function ? (await v2Function(applyParameters({ - prompt_chat: formated, - mode: arg.mode, - bias: [] - }, [ - 'frequency_penalty','min_p','presence_penalty','repetition_penalty','top_k','top_p','temperature' - ], {}, arg.mode) as any)) : await pluginProcess({ - bias: bias, - prompt_chat: formated, - temperature: (db.temperature / 100), - max_tokens: maxTokens, - presence_penalty: (db.PresensePenalty / 100), - frequency_penalty: (db.frequencyPenalty / 100) - }) - - if(!d){ - return { - type: 'fail', - result: (language.errors.unknownModel) - } - } - else if(!d.success){ - return { - type: 'fail', - result: d.content instanceof ReadableStream ? await (new Response(d.content)).text() : d.content - } - } - else if(d.content instanceof ReadableStream){ - - let fullText = '' - const piper = new TransformStream( { - transform(chunk, control) { - fullText += chunk - control.enqueue({ - "0": fullText - }) - } + try { + const formated = arg.formated + const maxTokens = arg.maxTokens + const bias = arg.biasString + const v2Function = pluginV2.providers.get(db.currentPluginProvider) + + const d = v2Function ? (await v2Function(applyParameters({ + prompt_chat: formated, + mode: arg.mode, + bias: [] + }, [ + 'frequency_penalty','min_p','presence_penalty','repetition_penalty','top_k','top_p','temperature' + ], {}, arg.mode) as any)) : await pluginProcess({ + bias: bias, + prompt_chat: formated, + temperature: (db.temperature / 100), + max_tokens: maxTokens, + presence_penalty: (db.PresensePenalty / 100), + frequency_penalty: (db.frequencyPenalty / 100) }) - - return { - type: 'streaming', - result: d.content.pipeThrough(piper) + + if(!d){ + return { + type: 'fail', + result: (language.errors.unknownModel) + } } - } - else{ + else if(!d.success){ + return { + type: 'fail', + result: d.content instanceof ReadableStream ? await (new Response(d.content)).text() : d.content + } + } + else if(d.content instanceof ReadableStream){ + + let fullText = '' + const piper = new TransformStream( { + transform(chunk, control) { + fullText += chunk + control.enqueue({ + "0": fullText + }) + } + }) + + return { + type: 'streaming', + result: d.content.pipeThrough(piper) + } + } + else{ + return { + type: 'success', + result: d.content + } + } + } catch (error) { + console.error(error) return { - type: 'success', - result: d.content + type: 'fail', + result: `Plugin Error from ${db.currentPluginProvider}: ` + JSON.stringify(error) } } } diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 5249b235..3d1c6af3 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -462,6 +462,7 @@ export function setDatabase(data:Database){ data.customFlags ??= [] data.enableCustomFlags ??= false data.assetMaxDifference ??= 4 + data.showSavingIcon ??= false changeLanguage(data.language) setDatabaseLite(data) } @@ -858,6 +859,7 @@ export interface Database{ assetMaxDifference:number menuSideBar:boolean pluginV2: RisuPlugin[] + showSavingIcon:boolean } interface SeparateParameters{