[fix] prompt template and autosuggest

This commit is contained in:
aegkmq
2023-08-02 21:14:24 +09:00
parent 59dea11635
commit 838eaf81c8
4 changed files with 14 additions and 21 deletions

View File

@@ -77,16 +77,14 @@
if($DataBase.subModel === "textgen_webui"){ if($DataBase.subModel === "textgen_webui"){
promptbody = [ promptbody = [
...lastMessages.map(({ role, data }) => ({
role: role === "user" ? "user" as const : "assistant" as const,
content: data,
})),
{ {
role: 'system', role: 'system',
content: replacePlaceholders($DataBase.autoSuggestPrompt, currentChar.name) 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}:`
},
] ]
} }

View File

@@ -383,7 +383,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
let blockingUrl = db.textgenWebUIBlockingURL.replace(/\/api.*/, "/api/v1/generate") let blockingUrl = db.textgenWebUIBlockingURL.replace(/\/api.*/, "/api/v1/generate")
let bodyTemplate:any let bodyTemplate:any
const suggesting = model === "submodel" const suggesting = model === "submodel"
const proompt = stringlizeChatOba(formated, suggesting) const proompt = stringlizeChatOba(formated, currentChar.name, suggesting)
const stopStrings = getStopStrings(suggesting) const stopStrings = getStopStrings(suggesting)
console.log(proompt) console.log(proompt)
console.log(stopStrings) console.log(stopStrings)

View File

@@ -29,7 +29,7 @@ function appendWhitespace(prefix:string, seperator:string=" ") {
} }
return prefix return prefix
} }
export function stringlizeChatOba(formated:OpenAIChat[], suggesting:boolean=false){ export function stringlizeChatOba(formated:OpenAIChat[], characterName:string='', suggesting:boolean=false){
const db = get(DataBase) const db = get(DataBase)
let resultString:string[] = [] let resultString:string[] = []
let { header, systemPrefix, userPrefix, assistantPrefix, seperator } = db.ooba.formating; let { header, systemPrefix, userPrefix, assistantPrefix, seperator } = db.ooba.formating;
@@ -45,21 +45,24 @@ export function stringlizeChatOba(formated:OpenAIChat[], suggesting:boolean=fals
continue continue
} }
let prefix = "" let prefix = ""
let name = ""
if(form.role === 'user'){ if(form.role === 'user'){
prefix = appendWhitespace(userPrefix, seperator) prefix = appendWhitespace(userPrefix, seperator)
name = `${db.username}: `
} }
else if(form.role === 'assistant'){ else if(form.role === 'assistant'){
prefix = appendWhitespace(assistantPrefix, seperator) prefix = appendWhitespace(assistantPrefix, seperator)
name = `${characterName}: `
} }
else if(form.role === 'system'){ else if(form.role === 'system'){
prefix = appendWhitespace(systemPrefix, seperator) prefix = appendWhitespace(systemPrefix, seperator)
} }
resultString.push(prefix + form.content) resultString.push(prefix + name + form.content)
} }
if (suggesting){ if (suggesting){
resultString.push(appendWhitespace(assistantPrefix, seperator) + "\n" + db.autoSuggestPrefix) resultString.push(appendWhitespace(assistantPrefix, seperator) + "\n" + db.autoSuggestPrefix)
} else { } else {
resultString.push(assistantPrefix) resultString.push(assistantPrefix + `${characterName}:`)
} }
return resultString.join(seperator) return resultString.join(seperator)
} }
@@ -81,6 +84,8 @@ export function getStopStrings(suggesting:boolean=false){
"<|end", "<|end",
"<|im_end", "<|im_end",
userPrefix, userPrefix,
`*${username}'`,
`*${username} `,
`\n${username} `, `\n${username} `,
`${username}:`, `${username}:`,
] ]

View File

@@ -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. 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: 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 '-'.`
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 defaultAutoSuggestPrefixOoba = `- "` export const defaultAutoSuggestPrefixOoba = `- "`