feat: Add custom toggles

This commit is contained in:
kwaroran
2024-05-27 11:18:15 +09:00
parent eb992a5c6b
commit 1d5a829f88
7 changed files with 62 additions and 6 deletions

View File

@@ -127,6 +127,7 @@ export const languageEnglish = {
nickname: "Nickname would used be in {{char}} or <char> in chat instead of character's name if it is set.", nickname: "Nickname would used be in {{char}} or <char> in chat instead of character's name if it is set.",
useRegexLorebook: "If enabled, it will use regex for lorebook search, instead of string matching. it uses /regex/flags format.", 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.", 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 `<toggle variable>=<toggle name>` format, seperated by newline. for example, `cot=Toggle COT`. you can use these toggles in prompt by using `{{getglobalvar::toggle_<toggle variable>}}`. like `{{getglobalvar::toggle_cot}}`.",
}, },
setup: { setup: {
chooseProvider: "Choose AI Provider", chooseProvider: "Choose AI Provider",
@@ -608,5 +609,6 @@ export const languageEnglish = {
risupresetDesc: "Risupreset format is a format specifically designed for RisuAI presets.", risupresetDesc: "Risupreset format is a format specifically designed for RisuAI presets.",
jsonDesc: "JSON format is a format that is easy to read and write for both humans and machines.", jsonDesc: "JSON format is a format that is easy to read and write for both humans and machines.",
nickname: "Nickname", nickname: "Nickname",
useRegexLorebook: "Use Regex" useRegexLorebook: "Use Regex",
customPromptTemplateToggle: "Custom Toggles",
} }

View File

@@ -9,6 +9,7 @@
import TextInput from "src/lib/UI/GUI/TextInput.svelte"; import TextInput from "src/lib/UI/GUI/TextInput.svelte";
import NumberInput from "src/lib/UI/GUI/NumberInput.svelte"; import NumberInput from "src/lib/UI/GUI/NumberInput.svelte";
import Help from "src/lib/Others/Help.svelte"; import Help from "src/lib/Others/Help.svelte";
import TextAreaInput from "src/lib/UI/GUI/TextAreaInput.svelte";
let sorted = 0 let sorted = 0
let opened = 0 let opened = 0
@@ -117,4 +118,6 @@
{/if} {/if}
<span class="text-textcolor mt-4">{language.maxThoughtTagDepth}</span> <span class="text-textcolor mt-4">{language.maxThoughtTagDepth}</span>
<NumberInput bind:value={$DataBase.promptSettings.maxThoughtTagDepth}/> <NumberInput bind:value={$DataBase.promptSettings.maxThoughtTagDepth}/>
<span class="text-textcolor mt-4">{language.customPromptTemplateToggle} <Help key='customPromptTemplateToggle' /></span>
<TextAreaInput bind:value={$DataBase.customPromptTemplateToggle}/>
{/if} {/if}

View File

@@ -29,6 +29,7 @@
import { updateInlayScreen } from "src/ts/process/inlayScreen"; import { updateInlayScreen } from "src/ts/process/inlayScreen";
import { registerOnnxModel } from "src/ts/process/transformers"; import { registerOnnxModel } from "src/ts/process/transformers";
import MultiLangInput from "../UI/GUI/MultiLangInput.svelte"; import MultiLangInput from "../UI/GUI/MultiLangInput.svelte";
import { getCustomToggles } from "src/ts/process/prompt";
let subMenu = 0 let subMenu = 0
@@ -246,6 +247,14 @@
<div class="flex mt-6 items-center"> <div class="flex mt-6 items-center">
<Check bind:check={$DataBase.jailbreakToggle} name={language.jailbreakToggle}/> <Check bind:check={$DataBase.jailbreakToggle} name={language.jailbreakToggle}/>
</div> </div>
{#each getCustomToggles($DataBase.customPromptTemplateToggle) as toggle}
<div class="flex mt-2 items-center">
<Check check={$DataBase.globalChatVariables[`toggle_${toggle[0]}`] === '1'} name={toggle[1]} onChange={() => {
$DataBase.globalChatVariables[`toggle_${toggle[0]}`] = $DataBase.globalChatVariables[`toggle_${toggle[0]}`] === '1' ? '0' : '1'
}} />
</div>
{/each}
{#if $DataBase.supaMemoryType !== 'none' || $DataBase.hanuraiEnable} {#if $DataBase.supaMemoryType !== 'none' || $DataBase.hanuraiEnable}
{#if $DataBase.hanuraiEnable} {#if $DataBase.hanuraiEnable}

View File

@@ -2,7 +2,7 @@
import type { character, groupChat } from "src/ts/storage/database"; import type { character, groupChat } from "src/ts/storage/database";
import { DataBase } from "src/ts/storage/database"; import { DataBase } from "src/ts/storage/database";
import TextInput from "../UI/GUI/TextInput.svelte"; import TextInput from "../UI/GUI/TextInput.svelte";
import { DownloadIcon, EditIcon, FolderUpIcon, MenuIcon, TrashIcon } from "lucide-svelte"; import { DownloadIcon, PencilIcon, FolderUpIcon, MenuIcon, TrashIcon } from "lucide-svelte";
import { exportChat, importChat } from "src/ts/characters"; import { exportChat, importChat } from "src/ts/characters";
import { alertConfirm, alertError, alertSelect } from "src/ts/alert"; import { alertConfirm, alertError, alertSelect } from "src/ts/alert";
import { language } from "src/lang"; import { language } from "src/lang";
@@ -11,6 +11,7 @@
import CheckInput from "../UI/GUI/CheckInput.svelte"; import CheckInput from "../UI/GUI/CheckInput.svelte";
import { createMultiuserRoom } from "src/ts/sync/multiuser"; import { createMultiuserRoom } from "src/ts/sync/multiuser";
import { CurrentCharacter } from "src/ts/stores"; import { CurrentCharacter } from "src/ts/stores";
import { getCustomToggles } from "src/ts/process/prompt";
export let chara:character|groupChat export let chara:character|groupChat
let editMode = false let editMode = false
</script> </script>
@@ -62,7 +63,7 @@
<button class="text-textcolor2 hover:text-green-500 mr-1 cursor-pointer" on:click={() => { <button class="text-textcolor2 hover:text-green-500 mr-1 cursor-pointer" on:click={() => {
editMode = !editMode editMode = !editMode
}}> }}>
<EditIcon size={18}/> <PencilIcon size={18}/>
</button> </button>
<button class="text-textcolor2 hover:text-green-500 mr-1 cursor-pointer" on:click={async (e) => { <button class="text-textcolor2 hover:text-green-500 mr-1 cursor-pointer" on:click={async (e) => {
e.stopPropagation() e.stopPropagation()
@@ -101,7 +102,7 @@
<button class="text-textcolor2 hover:text-green-500 cursor-pointer" on:click={() => { <button class="text-textcolor2 hover:text-green-500 cursor-pointer" on:click={() => {
editMode = !editMode editMode = !editMode
}}> }}>
<EditIcon size={18}/> <PencilIcon size={18}/>
</button> </button>
</div> </div>
@@ -110,6 +111,14 @@
<CheckInput bind:check={$DataBase.jailbreakToggle} name={language.jailbreakToggle}/> <CheckInput bind:check={$DataBase.jailbreakToggle} name={language.jailbreakToggle}/>
</div> </div>
{#each getCustomToggles($DataBase.customPromptTemplateToggle) as toggle}
<div class="flex mt-2 items-center">
<CheckInput check={$DataBase.globalChatVariables[`toggle_${toggle[0]}`] === '1'} name={toggle[1]} onChange={() => {
$DataBase.globalChatVariables[`toggle_${toggle[0]}`] = $DataBase.globalChatVariables[`toggle_${toggle[0]}`] === '1' ? '0' : '1'
}} />
</div>
{/each}
{#if $DataBase.supaMemoryType !== 'none' || $DataBase.hanuraiEnable} {#if $DataBase.supaMemoryType !== 'none' || $DataBase.hanuraiEnable}
{#if $DataBase.hanuraiEnable} {#if $DataBase.hanuraiEnable}
<div class="flex mt-2 items-center"> <div class="flex mt-2 items-center">

View File

@@ -783,6 +783,9 @@ const matcher = (p1:string,matcherArg:matcherArg) => {
} }
return null return null
} }
case 'getglobalvar':{
return getGlobalChatVar(v)
}
case 'button':{ case 'button':{
return `<button class="button-default" risu-trigger="${arra[2]}">${arra[1]}</button>` return `<button class="button-default" risu-trigger="${arra[2]}">${arra[1]}</button>`
} }
@@ -1461,6 +1464,11 @@ export function getChatVar(key:string){
return (chat.scriptstate['$' + key])?.toString() ?? 'null' return (chat.scriptstate['$' + key])?.toString() ?? 'null'
} }
export function getGlobalChatVar(key:string){
const db = get(DataBase)
return db.globalChatVariables[key] ?? 'null'
}
export function setChatVar(key:string, value:string){ export function setChatVar(key:string, value:string){
const db = get(DataBase) const db = get(DataBase)
const selectedChar = get(selectedCharID) const selectedChar = get(selectedCharID)

View File

@@ -1,4 +1,6 @@
import { get } from "svelte/store";
import { tokenizeAccurate } from "../tokenizer"; import { tokenizeAccurate } from "../tokenizer";
import type { Database } from "../storage/database";
export type PromptItem = PromptItemPlain|PromptItemTyped|PromptItemChat|PromptItemAuthorNote; export type PromptItem = PromptItemPlain|PromptItemTyped|PromptItemChat|PromptItemAuthorNote;
export type PromptType = PromptItem['type']; export type PromptType = PromptItem['type'];
@@ -61,4 +63,21 @@ export async function tokenizePreset(prompts:PromptItem[], consti:boolean = fals
} }
} }
return total return total
}
export function getCustomToggles(template:string){
if(!template){
return []
}
const keyValue:[string, string][] = []
for(const line of template.split('\n')){
const [key, value] = line.split('=')
if(key && value){
keyValue.push([key, value])
}
}
return keyValue
} }

View File

@@ -400,6 +400,8 @@ export function setDatabase(data:Database){
data.sideBarSize ??= 0 data.sideBarSize ??= 0
data.textAreaTextSize ??= 0 data.textAreaTextSize ??= 0
data.combineTranslation ??= false data.combineTranslation ??= false
data.customPromptTemplateToggle ??= ''
data.globalChatVariables ??= {}
changeLanguage(data.language) changeLanguage(data.language)
DataBase.set(data) DataBase.set(data)
@@ -657,7 +659,8 @@ export interface Database{
combineTranslation:boolean combineTranslation:boolean
dynamicAssets:boolean dynamicAssets:boolean
dynamicAssetsEditDisplay:boolean dynamicAssetsEditDisplay:boolean
customPromptTemplateToggle:string
globalChatVariables:{[key:string]:string}
} }
export interface customscript{ export interface customscript{
@@ -878,6 +881,7 @@ export interface botPreset{
top_a?:number top_a?:number
openrouterProvider?:string openrouterProvider?:string
useInstructPrompt?:boolean useInstructPrompt?:boolean
customPromptTemplateToggle?:string
} }
@@ -1144,7 +1148,8 @@ export function saveCurrentPreset(){
min_p: db.min_p, min_p: db.min_p,
top_a: db.top_a, top_a: db.top_a,
openrouterProvider: db.openrouterProvider, openrouterProvider: db.openrouterProvider,
useInstructPrompt: db.useInstructPrompt useInstructPrompt: db.useInstructPrompt,
customPromptTemplateToggle: db.customPromptTemplateToggle ?? ""
} }
db.botPresets = pres db.botPresets = pres
setDatabase(db) setDatabase(db)
@@ -1227,6 +1232,7 @@ export function setPreset(db:Database, newPres: botPreset){
db.top_a = newPres.top_a db.top_a = newPres.top_a
db.openrouterProvider = newPres.openrouterProvider db.openrouterProvider = newPres.openrouterProvider
db.useInstructPrompt = newPres.useInstructPrompt ?? false db.useInstructPrompt = newPres.useInstructPrompt ?? false
db.customPromptTemplateToggle = newPres.customPromptTemplateToggle ?? ''
return db return db
} }