diff --git a/src/lang/en.ts b/src/lang/en.ts index 6196f4bc..dd11fe9e 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -128,6 +128,7 @@ export const languageEnglish = { useRegexLorebook: "If enabled, it will use regex for lorebook search, instead of string matching. it uses /regex/flags format.", customChainOfThought: "Warning: chain of thought toggle is no longer recommended to use. put chain of thought prompt in other prompt entries instead.", customPromptTemplateToggle: "Here you can define your own prompt toggles. use `=` format, seperated by newline. for example, `cot=Toggle COT`. you can use these toggles in prompt by using `{{getglobalvar::toggle_}}`. like `{{getglobalvar::toggle_cot}}`.", + defaultVariables: "Here you can define your own default variables. use `=` format, seperated by newline. for example, `name=RisuAI`, which then can be used with trigger scripts and variables CBS like `{{getvar::A}}`, `{{setvar::A::B}}` or `{{? $A + 1}}`. if prompt template's default variable and character's default variable has same name, character's default variable will be used.", }, setup: { chooseProvider: "Choose AI Provider", @@ -611,4 +612,5 @@ export const languageEnglish = { nickname: "Nickname", useRegexLorebook: "Use Regex", customPromptTemplateToggle: "Custom Toggles", + defaultVariables: "Default Variables" } \ No newline at end of file diff --git a/src/lib/Setting/Pages/PromptSettings.svelte b/src/lib/Setting/Pages/PromptSettings.svelte index 82daa42b..eb655985 100644 --- a/src/lib/Setting/Pages/PromptSettings.svelte +++ b/src/lib/Setting/Pages/PromptSettings.svelte @@ -120,4 +120,6 @@ {language.customPromptTemplateToggle} + {language.defaultVariables} + {/if} \ No newline at end of file diff --git a/src/lib/SideBars/CharConfig.svelte b/src/lib/SideBars/CharConfig.svelte index e292f011..c691898d 100644 --- a/src/lib/SideBars/CharConfig.svelte +++ b/src/lib/SideBars/CharConfig.svelte @@ -254,6 +254,7 @@ }} /> {/each} + {#if $DataBase.supaMemoryType !== 'none' || $DataBase.hanuraiEnable} {#if $DataBase.hanuraiEnable} @@ -764,6 +765,9 @@ {language.backgroundHTML} + {language.defaultVariables} + + {language.creator} diff --git a/src/ts/parser.ts b/src/ts/parser.ts index 02600576..bf1d2502 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -9,7 +9,7 @@ import { get } from 'svelte/store'; import css from '@adobe/css-tools' import { selectedCharID } from './stores'; import { calcString } from './process/infunctions'; -import { findCharacterbyId, sfc32, uuidtoNumber } from './util'; +import { findCharacterbyId, parseKeyValue, sfc32, uuidtoNumber } from './util'; import { getInlayImage } from './process/files/image'; import { autoMarkNew } from './plugins/automark'; import { getModuleLorebooks } from './process/modules'; @@ -1461,7 +1461,18 @@ export function getChatVar(key:string){ } const chat = char.chats[char.chatPage] chat.scriptstate = chat.scriptstate ?? {} - return (chat.scriptstate['$' + key])?.toString() ?? 'null' + const state = (chat.scriptstate['$' + key]) + if(state === undefined || state === null){ + const defaultVariables = parseKeyValue(char.defaultVariables).concat(parseKeyValue(db.templateDefaultVariables)) + const findResult = defaultVariables.find((f) => { + return f[0] === key + }) + if(findResult){ + return findResult[1] + } + return 'null' + } + return state.toString() } export function getGlobalChatVar(key:string){ diff --git a/src/ts/process/triggers.ts b/src/ts/process/triggers.ts index 4bc9ac62..68afa136 100644 --- a/src/ts/process/triggers.ts +++ b/src/ts/process/triggers.ts @@ -5,6 +5,7 @@ import { getModuleTriggers } from "./modules"; import { get } from "svelte/store"; import { CurrentCharacter, CurrentChat, selectedCharID } from "../stores"; import { processMultiCommand } from "./command"; +import { parseKeyValue } from "../util"; export interface triggerscript{ comment: string; @@ -94,13 +95,25 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{ promptend: '' } const triggers = char.triggerscript.concat(getModuleTriggers()) + const db = get(DataBase) + const defaultVariables = parseKeyValue(char.defaultVariables).concat(parseKeyValue(db.templateDefaultVariables)) let chat = structuredClone(arg.chat ?? char.chats[char.chatPage]) if((!triggers) || (triggers.length === 0)){ return null } function getVar(key:string){ - return `${chat.scriptstate?.['$' + key] ?? "null"}` + const state = chat.scriptstate?.['$' + key] + if(state === undefined || state === null){ + const findResult = defaultVariables.find((f) => { + return f[0] === key + }) + if(findResult){ + return findResult[1] + } + return 'null' + } + return state.toString() } function setVar(key:string, value:string){ diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 059b3549..665b50d5 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -402,6 +402,7 @@ export function setDatabase(data:Database){ data.combineTranslation ??= false data.customPromptTemplateToggle ??= '' data.globalChatVariables ??= {} + data.templateDefaultVariables ??= '' changeLanguage(data.language) DataBase.set(data) @@ -661,6 +662,7 @@ export interface Database{ dynamicAssetsEditDisplay:boolean customPromptTemplateToggle:string globalChatVariables:{[key:string]:string} + templateDefaultVariables:string } export interface customscript{ @@ -789,6 +791,7 @@ export interface character{ name: string ext: string }> + defaultVariables?:string } @@ -834,6 +837,7 @@ export interface groupChat{ lorePlus?:boolean trashTime?:number nickname?:string + defaultVariables?:string } export interface botPreset{ @@ -882,6 +886,7 @@ export interface botPreset{ openrouterProvider?:string useInstructPrompt?:boolean customPromptTemplateToggle?:string + templateDefaultVariables?:string } @@ -1149,7 +1154,8 @@ export function saveCurrentPreset(){ top_a: db.top_a, openrouterProvider: db.openrouterProvider, useInstructPrompt: db.useInstructPrompt, - customPromptTemplateToggle: db.customPromptTemplateToggle ?? "" + customPromptTemplateToggle: db.customPromptTemplateToggle ?? "", + templateDefaultVariables: db.templateDefaultVariables ?? "" } db.botPresets = pres setDatabase(db) @@ -1233,6 +1239,7 @@ export function setPreset(db:Database, newPres: botPreset){ db.openrouterProvider = newPres.openrouterProvider db.useInstructPrompt = newPres.useInstructPrompt ?? false db.customPromptTemplateToggle = newPres.customPromptTemplateToggle ?? '' + db.templateDefaultVariables = newPres.templateDefaultVariables ?? '' return db }