From 0e292bd69063eecf91c627e25b34bff47c1a97a8 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 2 Dec 2024 04:27:50 +0900 Subject: [PATCH 1/6] aria-role fixes --- package.json | 3 ++- pnpm-lock.yaml | 11 ++++++++- src/lib/ChatScreens/DefaultChatScreen.svelte | 1 + src/lib/ChatScreens/ResizeBox.svelte | 2 +- src/lib/Others/ChatList.svelte | 8 +++++-- src/lib/Playground/PlaygroundImageGen.svelte | 2 +- .../Pages/Module/ModuleChatMenu.svelte | 2 +- src/lib/Setting/botpreset.svelte | 18 +++++++++++--- src/lib/Setting/lorepreset.svelte | 6 ++++- src/lib/SideBars/CharConfig.svelte | 1 + src/lib/SideBars/SideChatList.svelte | 24 +++++++++++++++---- src/lib/SideBars/Sidebar.svelte | 21 ++++++++++------ src/lib/UI/GUI/MultiLangDisplay.svelte | 5 ++-- src/lib/UI/GUI/MultiLangInput.svelte | 13 +++++----- src/lib/UI/GUI/TextAreaInput.svelte | 2 ++ src/lib/UI/Realm/RealmHubIcon.svelte | 12 +++++----- src/lib/UI/Realm/RealmLicense.svelte | 2 +- src/lib/UI/Realm/RealmMain.svelte | 2 +- src/lib/UI/Realm/RealmPopUp.svelte | 2 +- src/lib/VisualNovel/VisualNovelMain.svelte | 4 +--- 20 files changed, 99 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index c025f6ef..230ede44 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "showdown": "^2.1.0", "sortablejs": "^1.15.2", "streamsaver": "^2.0.6", + "sv": "^0.6.5", "svelte-awesome-color-picker": "^3.1.0", "three": "^0.154.0", "tippy.js": "^6.3.7", @@ -110,7 +111,7 @@ "internal-ip": "^7.0.0", "postcss": "^8.4.33", "svelte": "^5.1.9", - "svelte-check": "^4.0.0", + "svelte-check": "^4.0.5", "svelte-preprocess": "^6.0.0", "tailwindcss": "^3.4.1", "tslib": "^2.6.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b072698..e2520dda 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -191,6 +191,9 @@ importers: streamsaver: specifier: ^2.0.6 version: 2.0.6 + sv: + specifier: ^0.6.5 + version: 0.6.5 svelte-awesome-color-picker: specifier: ^3.1.0 version: 3.1.0(svelte@5.1.9) @@ -286,7 +289,7 @@ importers: specifier: ^5.1.9 version: 5.1.9 svelte-check: - specifier: ^4.0.0 + specifier: ^4.0.5 version: 4.0.5(svelte@5.1.9)(typescript@5.6.3) svelte-preprocess: specifier: ^6.0.0 @@ -3343,6 +3346,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + sv@0.6.5: + resolution: {integrity: sha512-zd2Ja0HKNlmg+gWjAw9ziS0ShAiAx8nFE4tfbIeaXoQ3vq84PEKh5GvKr3dZdVRgyKT6q2V1rb+yrhpF+S5LjA==} + hasBin: true + svelte-awesome-color-picker@3.1.0: resolution: {integrity: sha512-na9B9qLaV8XQ6W6eyP6vFyDV2TBF4qvGad6799D4GzbazkiFtoO+lbaFFViAWanz/eECwe/WUAUdg6Jy7LIKFw==} peerDependencies: @@ -7006,6 +7013,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + sv@0.6.5: {} + svelte-awesome-color-picker@3.1.0(svelte@5.1.9): dependencies: colord: 2.9.3 diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte index a59760d5..7bdf0b87 100644 --- a/src/lib/ChatScreens/DefaultChatScreen.svelte +++ b/src/lib/ChatScreens/DefaultChatScreen.svelte @@ -475,6 +475,7 @@ {#if $doingChat || doingChatInputTranslate} {:else if DBState.db.enabledModules.includes(rmodule.id)} - {:else} + })} onkeydown={(e) => {}}> {/if} {#if chara.hasAsset} - + })} onkeydown={(e) => {}}> {/if} {#if chara.hasLore} - + })} onkeydown={(e) => {}}> {/if} diff --git a/src/lib/UI/Realm/RealmLicense.svelte b/src/lib/UI/Realm/RealmLicense.svelte index 6a611277..1a110414 100644 --- a/src/lib/UI/Realm/RealmLicense.svelte +++ b/src/lib/UI/Realm/RealmLicense.svelte @@ -13,7 +13,7 @@ {#if Object.keys(CCLicenseData).includes(license)}
-
{ +
{ e.stopPropagation(); openURL(`https://creativecommons.org/licenses/${CCLicenseData[license][0]}/4.0/`) })}> diff --git a/src/lib/UI/Realm/RealmMain.svelte b/src/lib/UI/Realm/RealmMain.svelte index c28b2328..2e3eb3f3 100644 --- a/src/lib/UI/Realm/RealmMain.svelte +++ b/src/lib/UI/Realm/RealmMain.svelte @@ -163,7 +163,7 @@ {#if menuOpen} -
{ +
{ menuOpen = false }}>
diff --git a/src/lib/UI/Realm/RealmPopUp.svelte b/src/lib/UI/Realm/RealmPopUp.svelte index 5d5c1334..6fef1cbb 100644 --- a/src/lib/UI/Realm/RealmPopUp.svelte +++ b/src/lib/UI/Realm/RealmPopUp.svelte @@ -19,7 +19,7 @@ -
{ +
{ openedData = null }}>
diff --git a/src/lib/VisualNovel/VisualNovelMain.svelte b/src/lib/VisualNovel/VisualNovelMain.svelte index e323fe9d..1081e50c 100644 --- a/src/lib/VisualNovel/VisualNovelMain.svelte +++ b/src/lib/VisualNovel/VisualNovelMain.svelte @@ -23,9 +23,7 @@
-
{ - forceRender() - }}> +
\ No newline at end of file From 18ea5aff4e3d7b0d4545948dc558016e47965610 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 2 Dec 2024 04:42:13 +0900 Subject: [PATCH 2/6] Add notification feature with permission handling and UI toggle --- src/lang/en.ts | 2 ++ src/lib/Setting/Pages/DisplaySettings.svelte | 22 ++++++++++++++++++++ src/ts/process/index.svelte.ts | 16 ++++++++++++++ src/ts/storage/database.svelte.ts | 1 + 4 files changed, 41 insertions(+) diff --git a/src/lang/en.ts b/src/lang/en.ts index bc0d11a6..ff25a193 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -813,4 +813,6 @@ export const languageEnglish = { retranslate: "Retranslate", loading: "Loading", autoTranslateCachedOnly: "Auto Translate Cached Only", + notification: "Notification", + permissionDenied: "Permission Denied by Your Browser or OS", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/DisplaySettings.svelte b/src/lib/Setting/Pages/DisplaySettings.svelte index 4af86f67..1d7ee9dd 100644 --- a/src/lib/Setting/Pages/DisplaySettings.svelte +++ b/src/lib/Setting/Pages/DisplaySettings.svelte @@ -18,6 +18,7 @@ import Arcodion from "src/lib/UI/Arcodion.svelte"; import Button from "src/lib/UI/GUI/Button.svelte"; import { CustomGUISettingMenuStore } from "src/ts/stores.svelte"; + import { alertError } from "src/ts/alert"; const onSchemeInputChange = (e:Event) => { changeColorScheme((e.target as HTMLInputElement).value) @@ -362,6 +363,27 @@
+
+ { + let hasPermission = {state: 'denied'} + try { + hasPermission = await navigator.permissions.query({name: 'notifications'}) + } catch (error) { + //for browsers that do not support permissions api + } + if(!DBState.db.notification){ + return + } + if(hasPermission.state === 'denied'){ + const permission = await Notification.requestPermission() + if(permission === 'denied'){ + alertError(language.permissionDenied) + DBState.db.notification = false + } + } + }}/> +
+ {#if DBState.db.showUnrecommended}
diff --git a/src/ts/process/index.svelte.ts b/src/ts/process/index.svelte.ts index b6f73e64..4d22d63b 100644 --- a/src/ts/process/index.svelte.ts +++ b/src/ts/process/index.svelte.ts @@ -1330,6 +1330,22 @@ export async function sendChat(chatProcessIndex = -1,arg:{ }) } + if(DBState.db.notification){ + try { + const permission = await Notification.requestPermission() + if(permission === 'granted'){ + const noti = new Notification('RisuAI', { + body: result + }) + noti.onclick = () => { + window.focus() + } + } + } catch (error) { + + } + } + chatProcessStage.set(4) peerSync() diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index ec6de12c..9003f5fe 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -848,6 +848,7 @@ export interface Database{ translateBeforeHTMLFormatting:boolean autoTranslateCachedOnly:boolean lightningRealmImport:boolean + notification: boolean } interface SeparateParameters{ From 3c8ac16367b039bc88e12e616ce8ed76d3a2fb8f Mon Sep 17 00:00:00 2001 From: Bo26fhmC5M <88071760+Bo26fhmC5M@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:04:56 +0900 Subject: [PATCH 3/6] Fix {{#if_pure}} syntax issue where spaces and whitespace were not preserved as intended. --- src/ts/parser.svelte.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 71dbe1f3..1b63994a 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -1760,16 +1760,19 @@ function trimLines(p1:string){ } function blockEndMatcher(p1:string,type:{type:blockMatch,type2?:string},matcherArg:matcherArg):string{ + const p1Trimed = p1.trim() switch(type.type){ case 'pure': - case 'parse-pure': case 'pure-display': case 'function':{ - return p1 + return p1Trimed } case 'parse': case 'each':{ - return trimLines(p1) + return trimLines(p1Trimed) + } + case 'parse-pure':{ + return p1 } default:{ return '' @@ -1952,7 +1955,7 @@ export function risuChatParser(da:string, arg:{ } blockNestType.delete(nested.length) const dat2 = nested.shift() - const matchResult = blockEndMatcher(dat2.trim(), blockType, matcherObj) + const matchResult = blockEndMatcher(dat2, blockType, matcherObj) if(blockType.type === 'each'){ const subind = blockType.type2.lastIndexOf(' ') const sub = blockType.type2.substring(subind + 1) From 9ac91190f91fbdd1d4eccc090e9abc94ddc8584b Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 3 Dec 2024 21:16:50 +0900 Subject: [PATCH 4/6] bump version --- src-tauri/tauri.conf.json | 2 +- src/ts/characterCards.ts | 24 +++++++++++++++++------- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 910f4cda..25fd8478 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "141.0.0", + "version": "141.1.0", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/characterCards.ts b/src/ts/characterCards.ts index c895d90a..5bd50658 100644 --- a/src/ts/characterCards.ts +++ b/src/ts/characterCards.ts @@ -1643,7 +1643,7 @@ export async function downloadRisuHub(id:string, arg:{ msg: "Downloading..." }) } - const res = await fetch("https://realm.risuai.net/api/v1/download/png-v3/" + id + '?cors=true', { + const res = await fetch("https://realm.risuai.net/api/v1/download/dynamic/" + id + '?cors=true', { headers: { "x-risu-api-version": "4" } @@ -1653,13 +1653,23 @@ export async function downloadRisuHub(id:string, arg:{ return } - if(res.headers.get('content-type') === 'image/png'){ + if(res.headers.get('content-type') === 'image/png' || res.headers.get('content-type') === 'application/zip'){ let db = getDatabase() - await importCharacterProcess({ - name: 'realm.png', - data: res.body, - lightningRealmImport: db.lightningRealmImport - }) + if(res.headers.get('content-type') === 'application/zip'){ + console.log('zip') + await importCharacterProcess({ + name: 'realm.charx', + data: new Uint8Array(await res.arrayBuffer()), + lightningRealmImport: db.lightningRealmImport, + }) + } + else{ + await importCharacterProcess({ + name: 'realm.png', + data: res.body, + lightningRealmImport: db.lightningRealmImport, + }) + } checkCharOrder() db = getDatabase() if(db.characters[db.characters.length-1] && (db.goCharacterOnImport || arg.forceRedirect)){ diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 9003f5fe..3e5ab72a 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "141.0.0" +export let appVer = "141.1.0" export let webAppSubVer = '' diff --git a/version.json b/version.json index 9e7a354d..62eb536a 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"141.0.0"} \ No newline at end of file +{"version":"141.1.0"} \ No newline at end of file From 50d20bcc3feac335238ef85c1434e713d9040db3 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 3 Dec 2024 21:34:55 +0900 Subject: [PATCH 5/6] Add custom flags --- src/lang/en.ts | 2 ++ src/lib/Setting/Pages/BotSettings.svelte | 32 ++++++++++++++++++++++++ src/ts/model/modellist.ts | 14 ++++++++--- src/ts/storage/database.svelte.ts | 12 ++++++++- 4 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index ff25a193..d10ba8f5 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -815,4 +815,6 @@ export const languageEnglish = { autoTranslateCachedOnly: "Auto Translate Cached Only", notification: "Notification", permissionDenied: "Permission Denied by Your Browser or OS", + customFlags: "Custom Flags", + enableCustomFlags: "Enable Custom Flags", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index 9615ffd3..7f04094a 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -596,6 +596,38 @@ }}/> {/if} + + {#snippet CustomFlagButton(name:string,flag:number)} + + {/snippet} + + + + + + {#if DBState.db.enableCustomFlags} + {@render CustomFlagButton('hasImageInput', 0)} + {@render CustomFlagButton('hasImageOutput', 1)} + {@render CustomFlagButton('hasAudioInput', 2)} + {@render CustomFlagButton('hasAudioOutput', 3)} + {@render CustomFlagButton('hasPrefill', 4)} + {@render CustomFlagButton('hasCache', 5)} + {@render CustomFlagButton('hasFullSystemPrompt', 6)} + {@render CustomFlagButton('hasFirstSystemPrompt', 7)} + {@render CustomFlagButton('hasStreaming', 8)} + {@render CustomFlagButton('requiresAlternateRole', 9)} + {@render CustomFlagButton('mustStartWithUserInput', 10)} + {/if} + diff --git a/src/ts/model/modellist.ts b/src/ts/model/modellist.ts index 5d94cc1a..5428b02d 100644 --- a/src/ts/model/modellist.ts +++ b/src/ts/model/modellist.ts @@ -1,4 +1,5 @@ import type { Parameter } from "../process/request" +import { getDatabase } from "../storage/database.svelte" export enum LLMFlags{ hasImageInput, @@ -979,11 +980,16 @@ for(let model of LLMModels){ export function getModelInfo(id: string): LLMModel{ - const found:LLMModel = LLMModels.find(model => model.id === id) + const db = getDatabase() + const found:LLMModel = safeStructuredClone(LLMModels.find(model => model.id === id)) + + if(found){ + if(db.enableCustomFlags){ + found.flags = db.customFlags + } - console.log('found', found) - - if(found) return found + return found + } if(id.startsWith('hf:::')){ const withoutPrefix = id.replace('hf:::', '') diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 3e5ab72a..c0e4457d 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -459,6 +459,8 @@ export function setDatabase(data:Database){ translate: {}, otherAx: {} } + data.customFlags ??= [] + data.enableCustomFlags ??= false changeLanguage(data.language) setDatabaseLite(data) } @@ -849,6 +851,8 @@ export interface Database{ autoTranslateCachedOnly:boolean lightningRealmImport:boolean notification: boolean + customFlags: LLMFlags[] + enableCustomFlags: boolean } interface SeparateParameters{ @@ -1168,6 +1172,8 @@ export interface botPreset{ systemContentReplacement?: string systemRoleReplacement?: 'user'|'assistant' openAIPrediction?: string + enableCustomFlags?: boolean + customFlags?: LLMFlags[] } @@ -1466,6 +1472,8 @@ export function saveCurrentPreset(){ customAPIFormat: safeStructuredClone(db.customAPIFormat), systemContentReplacement: db.systemContentReplacement, systemRoleReplacement: db.systemRoleReplacement, + customFlags: safeStructuredClone(db.customFlags), + enableCustomFlags: db.enableCustomFlags, } db.botPresets = pres setDatabase(db) @@ -1571,6 +1579,8 @@ export function setPreset(db:Database, newPres: botPreset){ db.customAPIFormat = safeStructuredClone(newPres.customAPIFormat) ?? LLMFormat.OpenAICompatible db.systemContentReplacement = newPres.systemContentReplacement ?? '' db.systemRoleReplacement = newPres.systemRoleReplacement ?? 'user' + db.customFlags = safeStructuredClone(newPres.customFlags) ?? [] + db.enableCustomFlags = newPres.enableCustomFlags ?? false return db } @@ -1581,7 +1591,7 @@ import type { RisuModule } from '../process/modules'; import type { HypaV2Data } from '../process/memory/hypav2'; import { decodeRPack, encodeRPack } from '../rpack/rpack_bg'; import { DBState, selectedCharID } from '../stores.svelte'; -import { LLMFormat } from '../model/modellist'; +import { LLMFlags, LLMFormat } from '../model/modellist'; import type { Parameter } from '../process/request'; export async function downloadPreset(id:number, type:'json'|'risupreset'|'return' = 'json'){ From 2b8195041f8bcc18b1ce87beb84b6c639959f121 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 3 Dec 2024 21:35:09 +0900 Subject: [PATCH 6/6] bump version to 141.2.0 --- src-tauri/tauri.conf.json | 2 +- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 25fd8478..a24f4c91 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "141.1.0", + "version": "141.2.0", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index c0e4457d..044da14f 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "141.1.0" +export let appVer = "141.2.0" export let webAppSubVer = '' diff --git a/version.json b/version.json index 62eb536a..b77d4a89 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"141.1.0"} \ No newline at end of file +{"version":"141.2.0"} \ No newline at end of file