diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte index 27b102ae..59e1ab26 100644 --- a/src/lib/ChatScreens/DefaultChatScreen.svelte +++ b/src/lib/ChatScreens/DefaultChatScreen.svelte @@ -400,7 +400,11 @@ {/if} {#if $DataBase.useAutoSuggestions} - messageInput=msg} {send}/> + messageInput=( + $DataBase.subModel === "textgen_webui" && $DataBase.autoSuggestClean + ? msg.replace(/ +\(.+?\) *$| - [^"'*]*?$/, '') + : msg + )} {send}/> {/if} {#each messageForm($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message, loadPages) as chat, i} diff --git a/src/lib/ChatScreens/Suggestion.svelte b/src/lib/ChatScreens/Suggestion.svelte index c6aa0b4b..d8c660fc 100644 --- a/src/lib/ChatScreens/Suggestion.svelte +++ b/src/lib/ChatScreens/Suggestion.svelte @@ -81,12 +81,10 @@ role: 'system', content: replacePlaceholders($DataBase.autoSuggestPrompt, currentChar.name) }, - { - role: 'user', - content: lastMessages.map(({ role, data }) => `${ - role === 'char' ? currentChar.name : $DataBase.username - }: ${data}`).join("\n\n") + `\n\n${$DataBase.username}:` - }, + ...lastMessages.map(({ role, data }) => ({ + role: role === "user" ? "user" as const : "assistant" as const, + content: data, + })), ] } diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index b7484091..a5e44ae0 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -306,6 +306,8 @@ {language.autoSuggest} Prefix + + {:else if $DataBase.aiModel.startsWith('novelai')} Top P diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index f829dbfd..00d30ddd 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -399,7 +399,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' let blockingUrl = db.textgenWebUIBlockingURL.replace(/\/api.*/, "/api/v1/generate") let bodyTemplate:any const suggesting = model === "submodel" - const proompt = stringlizeChatOba(formated, suggesting) + const proompt = stringlizeChatOba(formated, currentChar.name, suggesting) const stopStrings = getStopStrings(suggesting) console.log(proompt) console.log(stopStrings) diff --git a/src/ts/process/stringlize.ts b/src/ts/process/stringlize.ts index 44919e5e..b8de559c 100644 --- a/src/ts/process/stringlize.ts +++ b/src/ts/process/stringlize.ts @@ -29,7 +29,7 @@ function appendWhitespace(prefix:string, seperator:string=" ") { } return prefix } -export function stringlizeChatOba(formated:OpenAIChat[], suggesting:boolean=false){ +export function stringlizeChatOba(formated:OpenAIChat[], characterName:string='', suggesting:boolean=false){ const db = get(DataBase) let resultString:string[] = [] let { header, systemPrefix, userPrefix, assistantPrefix, seperator } = db.ooba.formating; @@ -45,21 +45,24 @@ export function stringlizeChatOba(formated:OpenAIChat[], suggesting:boolean=fals continue } let prefix = "" + let name = "" if(form.role === 'user'){ - prefix = appendWhitespace(userPrefix, seperator) + prefix = appendWhitespace(suggesting ? assistantPrefix : userPrefix, seperator) + name = `${db.username}: ` } else if(form.role === 'assistant'){ - prefix = appendWhitespace(assistantPrefix, seperator) + prefix = appendWhitespace(suggesting ? userPrefix : assistantPrefix, seperator) + name = `${characterName}: ` } else if(form.role === 'system'){ prefix = appendWhitespace(systemPrefix, seperator) } - resultString.push(prefix + form.content) + resultString.push(prefix + name + form.content) } if (suggesting){ - resultString.push(appendWhitespace(assistantPrefix, seperator) + "\n" + db.autoSuggestPrefix) + resultString.push(appendWhitespace(assistantPrefix, seperator) + `${db.username}:\n` + db.autoSuggestPrefix) } else { - resultString.push(assistantPrefix) + resultString.push(assistantPrefix + `${characterName}:`) } return resultString.join(seperator) } @@ -81,6 +84,9 @@ export function getStopStrings(suggesting:boolean=false){ "<|end", "<|im_end", userPrefix, + "\nYou ", + `*${username}'`, + `*${username} `, `\n${username} `, `${username}:`, ] @@ -90,6 +96,10 @@ export function getStopStrings(suggesting:boolean=false){ if(suggesting){ stopStrings.push("\n\n") } + if(!suggesting){ + stopStrings.push("*You ") + stopStrings.push(" You ") + } for (const user of userStrings){ for (const u of [ user.toLowerCase(), diff --git a/src/ts/process/templates/getRecomended.ts b/src/ts/process/templates/getRecomended.ts index 29919962..5206f683 100644 --- a/src/ts/process/templates/getRecomended.ts +++ b/src/ts/process/templates/getRecomended.ts @@ -49,8 +49,9 @@ export async function setRecommended(model: string, ask:'ask'|'force') { pr.mainPrompt = pr.bias = pr.globalNote = undefined pr.jailbreak = "" if(!db.autoSuggestPrompt || db.autoSuggestPrompt === defaultAutoSuggestPrompt){ - pr.autoSuggestPrompt = defaultAutoSuggestPromptOoba; - pr.autoSuggestPrefix = defaultAutoSuggestPrefixOoba; + pr.autoSuggestPrompt = defaultAutoSuggestPromptOoba + pr.autoSuggestPrefix = defaultAutoSuggestPrefixOoba + pr.autoSuggestClean = true } switch(sel){ case 0:{ //Vicuna, WizardLM, Airoboros diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 5717a60c..fa22637b 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -271,7 +271,10 @@ export function setDatabase(data:Database){ data.autoSuggestPrompt = defaultAutoSuggestPrompt } if(checkNullish(data.autoSuggestPrefix)){ - data.autoSuggestPrompt = "" + data.autoSuggestPrefix = "" + } + if(checkNullish(data.autoSuggestClean)){ + data.autoSuggestClean = true } if(checkNullish(data.imageCompression)){ data.imageCompression = true @@ -460,6 +463,7 @@ export interface botPreset{ NAISettings?: NAISettings autoSuggestPrompt?: string autoSuggestPrefix?: string + autoSuggestClean?: boolean } export interface Database{ @@ -571,6 +575,7 @@ export interface Database{ useAutoSuggestions:boolean autoSuggestPrompt:string autoSuggestPrefix:string + autoSuggestClean:boolean claudeAPIKey:string, useChatCopy:boolean, novellistAPI:string, @@ -885,6 +890,7 @@ export function setPreset(db:Database, newPres: botPreset){ db.NAIsettings = newPres.NAISettings ?? db.NAIsettings db.autoSuggestPrompt = newPres.autoSuggestPrompt ?? db.autoSuggestPrompt db.autoSuggestPrefix = newPres.autoSuggestPrefix ?? db.autoSuggestPrefix + db.autoSuggestClean = newPres.autoSuggestClean ?? db.autoSuggestClean return db } diff --git a/src/ts/storage/defaultPrompts.ts b/src/ts/storage/defaultPrompts.ts index 9cd1da01..0ddf8281 100644 --- a/src/ts/storage/defaultPrompts.ts +++ b/src/ts/storage/defaultPrompts.ts @@ -28,15 +28,5 @@ Out Examples: Let's read these guidelines step by step three times to be sure we have accurately adhered to the rules. ` -export const defaultAutoSuggestPromptOoba = `Write {{user}}'s next responses that meet the following criteria: - -1. The purpose, intention, personality, and tendency must be consistent with the previous conversations. -2. It must contain {{user}}'s response only, NOT {{char}}'s. -3. The responses should be as diverse as feasible while remaining consistent. -4. It could be what {{char}} expects or does NOT expect. -5. It should be interesting and creative while NOT being obvious or boring. -6. It must make the future development and situation more detailed. - -Write 5 possible {{user}}'s next responses in distinct categories. -Write only one {{user}}'s response per line; each line must start with a hyphen '-'.` +export const defaultAutoSuggestPromptOoba = `The responses should be interesting and consistent, rather than dull and repetitive. It should be consistent with the context and as unique as possible. The responses could be what {{char}} expects or does not expect. Write 5 possibilities of {{user}}'s following response per line, each reflecting a different alignment. Each line must be only one independent {{user}}'s response, which starts with a hyphen '-'.` export const defaultAutoSuggestPrefixOoba = `- "`