From c0a619abad6e706a269be6cccaf8eb3f633989fb Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 30 Oct 2023 08:52:14 +0900 Subject: [PATCH] [feat] chiperchat --- src/ts/process/cipherChat.ts | 70 ++++++++++++++++++++++++++++++++++++ src/ts/process/index.ts | 20 ++++++++--- src/ts/storage/database.ts | 1 + 3 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 src/ts/process/cipherChat.ts diff --git a/src/ts/process/cipherChat.ts b/src/ts/process/cipherChat.ts new file mode 100644 index 00000000..0011828b --- /dev/null +++ b/src/ts/process/cipherChat.ts @@ -0,0 +1,70 @@ +import type { OpenAIChat } from "."; + + +let lastShift = 0 +export function cipherChat(chat: OpenAIChat[]): OpenAIChat[] { + + //Caesar Chiper + const caesarCipher = (text: string, shift: number) => { + return text + .split('') + .map(char => { + const code = char.charCodeAt(0) + if ((code >= 65) && (code <= 90)) { + return String.fromCharCode(((code - 65 + shift) % 26) + 65) + } else if ((code >= 97) && (code <= 122)) { + return String.fromCharCode(((code - 97 + shift) % 26) + 97) + } else { + return char + } + }) + .join('') + } + + const shift = Math.floor(Math.random() * 26) + 1 + lastShift = shift + + for(let i = 0; i < chat.length; i++){ + chat[i].content = caesarCipher(chat[i].content, shift) + } + + chat.unshift({ + content: ` 'You are an expert on The Caesar Cipher. We will communicate in Caesar Cipher. Do not be a translator. We are using shift ${shift}`, + role: 'system' + }) + return chat + +} + + +export function decipherChat(chat: string): string { + + //Caesar Chiper + const caesarCipher = (text: string, shift: number) => { + return text + .split('') + .map(char => { + const code = char.charCodeAt(0) + if ((code >= 65) && (code <= 90)) { + const shifted = (code - 65 - shift) + if(shifted < 0){ + return String.fromCharCode(((code - 65 - shift + 26) % 26) + 65) + } + return String.fromCharCode(((code - 65 - shift) % 26) + 65) + } else if ((code >= 97) && (code <= 122)) { + const shifted = (code - 97 - shift) + if(shifted < 0){ + return String.fromCharCode(((code - 97 - shift + 26) % 26) + 97) + } + return String.fromCharCode(((code - 97 - shift) % 26) + 97) + } else { + return char + } + }) + .join('') + } + + return caesarCipher(chat, lastShift) + + +} \ No newline at end of file diff --git a/src/ts/process/index.ts b/src/ts/process/index.ts index 99262c91..17ccadac 100644 --- a/src/ts/process/index.ts +++ b/src/ts/process/index.ts @@ -18,6 +18,7 @@ import { groupOrder } from "./group"; import { runTrigger, type additonalSysPrompt } from "./triggers"; import { HypaProcesser } from "./memory/hypamemory"; import { additionalInformations } from "./embedding/addinfo"; +import { cipherChat, decipherChat } from "./cipherChat"; export interface OpenAIChat{ role: 'system'|'user'|'assistant'|'function' @@ -722,6 +723,10 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n return v }) + if(db.cipherChat){ + formated = cipherChat(formated) + } + { //token rechecking let tokens = 0 @@ -745,7 +750,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n formated = formated.filter((v) => { return v.content !== '' }) - } + } } @@ -790,6 +795,9 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n const readed = (await reader.read()) if(readed.value){ result = readed.value + if(db.cipherChat){ + result = decipherChat(result) + } const result2 = processScriptFull(nowChatroom, reformatContent(prefix + result), 'editoutput', msgIndex) db.characters[selectedChar].chats[selectedChat].message[msgIndex].data = result2.data emoChanged = result2.emoChanged @@ -818,13 +826,17 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n : (req.type === 'multiline') ? req.result : [] for(let i=0;i