From 0e5e587c907ef0ba4101ebd9583abbc040f524f8 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 4 Jun 2024 19:36:09 +0900 Subject: [PATCH] feat: add probability decorator --- src/ts/characters.ts | 21 ++++++++++++++++++++- src/ts/gui/highlight.ts | 2 +- src/ts/process/lorebook.ts | 5 +++++ src/ts/storage/database.ts | 1 + src/ts/storage/globalApi.ts | 7 +++++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/ts/characters.ts b/src/ts/characters.ts index 53982902..f94025f3 100644 --- a/src/ts/characters.ts +++ b/src/ts/characters.ts @@ -1,5 +1,5 @@ import { get, writable } from "svelte/store"; -import { DataBase, saveImage, setDatabase, type character, type Chat, defaultSdDataFunc } from "./storage/database"; +import { DataBase, saveImage, setDatabase, type character, type Chat, defaultSdDataFunc, type loreBook } from "./storage/database"; import { alertConfirm, alertError, alertNormal, alertSelect, alertStore } from "./alert"; import { language } from "../lang"; import { decode as decodeMsgpack } from "msgpackr"; @@ -336,6 +336,7 @@ export function characterFormatUpdate(index:number|character){ cha.backgroundHTML ??= '' cha.backgroundCSS ??= '' cha.creation_date ??= Date.now() + cha.globalLore = updateLorebooks(cha.globalLore) if(!cha.newGenData){ cha = updateInlayScreen(cha) } @@ -365,6 +366,24 @@ export function characterFormatUpdate(index:number|character){ return cha } +export function updateLorebooks(book:loreBook[]){ + return book.map((v) => { + v.bookVersion ??= 1 + if(v.bookVersion >= 2){ + return v + } + if(v.activationPercent){ + const perc = v.activationPercent + v.activationPercent = null + + v.content = `@@probability ${perc}\n${v.content}` + } + v.content = v.content.replace(/@@@?end/g, '@@depth 0').replace(/\<(char|bot)\>/g, '{{char}}').replace(/\<(user)\>/g, '{{user}}') + v.bookVersion = 2 + return v + }) + +} export function createBlankChar():character{ return { diff --git a/src/ts/gui/highlight.ts b/src/ts/gui/highlight.ts index 29d2f737..c554bc6c 100644 --- a/src/ts/gui/highlight.ts +++ b/src/ts/gui/highlight.ts @@ -118,7 +118,7 @@ const deprecatedCBSwithParams = [ const decorators = [ 'activate_only_after', 'activate_only_every', 'keep_activate_after_match', 'dont_activate_after_match', 'depth', 'reverse_depth', 'instruct_depth', 'reverse_instruct_depth', 'instruct_scan_depth', 'role', 'scan_depth', 'is_greeting', 'position', 'ignore_on_max_context', - 'additional_keys', 'exclude_keys', 'is_user_icon', 'activate', 'dont_activate', 'disable_ui_prompt' + 'additional_keys', 'exclude_keys', 'is_user_icon', 'activate', 'dont_activate', 'disable_ui_prompt', 'probability' ] const deprecatedDecorators = [ diff --git a/src/ts/process/lorebook.ts b/src/ts/process/lorebook.ts index 8d279a0c..0815e77a 100644 --- a/src/ts/process/lorebook.ts +++ b/src/ts/process/lorebook.ts @@ -424,6 +424,11 @@ export async function loadLoreBookV3Prompt(){ } return false } + case 'probability':{ + if(Math.random() * 100 > parseInt(arg[0])){ + activated = false + } + } default:{ return false } diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 59af8dc5..07e03509 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -707,6 +707,7 @@ export interface loreBook{ data:string[] }, useRegex?:boolean + bookVersion?:number } export interface character{ diff --git a/src/ts/storage/globalApi.ts b/src/ts/storage/globalApi.ts index 549ed060..3af09fc3 100644 --- a/src/ts/storage/globalApi.ts +++ b/src/ts/storage/globalApi.ts @@ -33,6 +33,7 @@ import { startObserveDom } from "../observer"; import { removeDefaultHandler } from "src/main"; import { updateGuisize } from "../gui/guisize"; import { encodeCapKeySafe } from "./mobileStorage"; +import { updateLorebooks } from "../characters"; //@ts-ignore export const isTauri = !!window.__TAURI__ @@ -891,6 +892,12 @@ async function checkNewFormat() { return v !== null }) + db.modules = (db.modules ?? []).map((v) => { + if(v.lorebook){ + v.lorebook = updateLorebooks(v.lorebook) + } + return v + }) if(!db.formatversion){ function checkParge(data:string){