From aaa5843c519e6c789575dac32ae7b67afbb79e73 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 8 Jan 2024 09:03:12 +0900 Subject: [PATCH] Add custom chain of thought feature and max thought tag depth setting --- src/lang/en.ts | 3 ++ src/lib/Setting/Pages/PromptSettings.svelte | 6 ++++ src/lib/UI/ProomptItem.svelte | 6 ++-- src/ts/process/embedding/transformers.ts | 1 - src/ts/process/index.ts | 34 +++++++++++++++------ src/ts/process/proompt.ts | 4 ++- src/ts/storage/database.ts | 5 ++- 7 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index fc3ce605..c0d2f936 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -485,4 +485,7 @@ export const languageEnglish = { exportAsDataset: "Export Save as Dataset", editTranslationDisplay: "Edit Translation Display", selectModel: "Select Model", + autoRemoveThoughtTag: "Remove Thought Tag", + customChainOfThought: "Custom Chain of Thoughts", + maxThoughtTagDepth: "Max Thought Tag Depth", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/PromptSettings.svelte b/src/lib/Setting/Pages/PromptSettings.svelte index b3a3c842..19fa588e 100644 --- a/src/lib/Setting/Pages/PromptSettings.svelte +++ b/src/lib/Setting/Pages/PromptSettings.svelte @@ -7,6 +7,7 @@ import { DataBase } from "src/ts/storage/database"; import Check from "src/lib/UI/GUI/CheckInput.svelte"; import TextInput from "src/lib/UI/GUI/TextInput.svelte"; + import NumberInput from "src/lib/UI/GUI/NumberInput.svelte"; let sorted = 0 let opened = 0 @@ -111,4 +112,9 @@ + + {#if $DataBase.proomptSettings.customChainOfThought} + {language.maxThoughtTagDepth} + + {/if} {/if} \ No newline at end of file diff --git a/src/lib/UI/ProomptItem.svelte b/src/lib/UI/ProomptItem.svelte index 9c086107..6a9a0f2d 100644 --- a/src/lib/UI/ProomptItem.svelte +++ b/src/lib/UI/ProomptItem.svelte @@ -25,7 +25,7 @@ {language.type} { - if(proompt.type === 'plain' || proompt.type === 'jailbreak'){ + if(proompt.type === 'plain' || proompt.type === 'jailbreak' || proompt.type === 'cot'){ proompt.text = "" proompt.role = "system" } @@ -42,7 +42,9 @@ {language.formating.authorNote} {language.formating.lorebook} {language.formating.memory} - + {#if $DataBase.proomptSettings.customChainOfThought} + {language.cot} + {/if} {#if proompt.type === 'plain' || proompt.type === 'jailbreak'} diff --git a/src/ts/process/embedding/transformers.ts b/src/ts/process/embedding/transformers.ts index 7fef6647..09874b33 100644 --- a/src/ts/process/embedding/transformers.ts +++ b/src/ts/process/embedding/transformers.ts @@ -3,7 +3,6 @@ import { unzip } from 'fflate'; import { loadAsset, saveAsset } from 'src/ts/storage/globalApi'; import { selectSingleFile } from 'src/ts/util'; import { v4 } from 'uuid'; - let tfCache:Cache = null let tfLoaded = false let tfMap:{[key:string]:string} = {} diff --git a/src/ts/process/index.ts b/src/ts/process/index.ts index 2d85f7ab..95301577 100644 --- a/src/ts/process/index.ts +++ b/src/ts/process/index.ts @@ -262,7 +262,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n }) } - if(db.chainOfThought){ + if(db.chainOfThought && (!(usingPromptTemplate && db.proomptSettings.customChainOfThought))){ unformated.postEverything.push({ role: 'system', content: ` - before respond everything, Think step by step as a ai assistant how would you respond inside xml tag. this must be less than 5 paragraphs.` @@ -403,10 +403,14 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n break } case 'plain': - case 'jailbreak':{ + case 'jailbreak': + case 'cot':{ if((!db.jailbreakToggle) && (card.type === 'jailbreak')){ continue } + if((!db.chainOfThought) && (card.type === 'cot')){ + continue + } const convertRole = { "system": "system", @@ -521,8 +525,9 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n currentTokens += triggerResult.tokens } + let index = 0 for(const msg of ms){ - let formedChat = await processScript(nowChatroom,risuChatParser(msg.data, {chara: currentChar, rmVar: true}), 'editprocess') + let formatedChat = await processScript(nowChatroom,risuChatParser(msg.data, {chara: currentChar, rmVar: true}), 'editprocess') let name = '' if(msg.role === 'char'){ if(msg.saying){ @@ -541,10 +546,10 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n let inlays:string[] = [] if(db.inlayImage){ if(msg.role === 'char'){ - formedChat = formedChat.replace(/{{inlay::(.+?)}}/g, '') + formatedChat = formatedChat.replace(/{{inlay::(.+?)}}/g, '') } else{ - const inlayMatch = formedChat.match(/{{inlay::(.+?)}}/g) + const inlayMatch = formatedChat.match(/{{inlay::(.+?)}}/g) if(inlayMatch){ for(const inlay of inlayMatch){ inlays.push(inlay) @@ -568,25 +573,32 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n currentTokens += await tokenizer.tokenizeChat(imgchat) } } - formedChat = formedChat.replace(inlay, '') + formatedChat = formatedChat.replace(inlay, '') } } let attr:string[] = [] if(nowChatroom.type === 'group' || (usingPromptTemplate && db.proomptSettings.sendName)){ - formedChat = name + ': ' + formedChat + formatedChat = name + ': ' + formatedChat attr.push('nameAdded') } + if(usingPromptTemplate && db.proomptSettings.customChainOfThought && db.proomptSettings.maxThoughtTagDepth !== -1){ + const depth = ms.length - index + if(depth >= db.proomptSettings.maxThoughtTagDepth){ + formatedChat = formatedChat.replace(/(.+?)<\/Thoughts>/gm, '') + } + } const chat:OpenAIChat = { role: msg.role === 'user' ? 'user' : 'assistant', - content: formedChat, + content: formatedChat, memo: msg.chatId, attr: attr } chats.push(chat) currentTokens += await tokenizer.tokenizeChat(chat) + index++ } if(nowChatroom.supaMemory && db.supaMemoryType !== 'none'){ @@ -762,10 +774,14 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n break } case 'plain': - case 'jailbreak':{ + case 'jailbreak': + case 'cot':{ if((!db.jailbreakToggle) && (card.type === 'jailbreak')){ continue } + if((!db.chainOfThought) && (card.type === 'cot')){ + continue + } const convertRole = { "system": "system", diff --git a/src/ts/process/proompt.ts b/src/ts/process/proompt.ts index 17d379ce..2c8c8f09 100644 --- a/src/ts/process/proompt.ts +++ b/src/ts/process/proompt.ts @@ -8,10 +8,12 @@ export type ProomptSettings = { sendChatAsSystem: boolean sendName: boolean utilOverride: boolean + customChainOfThought?: boolean + maxThoughtTagDepth?: number } export interface ProomptPlain { - type: 'plain'|'jailbreak'; + type: 'plain'|'jailbreak'|'cot'; type2: 'normal'|'globalNote'|'main' text: string; role: 'user'|'bot'|'system'; diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index cfe16ab5..2d12eab3 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -367,10 +367,13 @@ export function setDatabase(data:Database){ postEndInnerFormat: '', sendChatAsSystem: false, sendName: false, - utilOverride: false + utilOverride: false, + customChainOfThought: false, + maxThoughtTagDepth: -1 } data.keiServerURL ??= '' data.top_k ??= 0 + data.proomptSettings.maxThoughtTagDepth ??= -1 changeLanguage(data.language) DataBase.set(data)