[feat] added unstringlizer
This commit is contained in:
@@ -3,7 +3,7 @@ import type { OpenAIChat } from ".";
|
|||||||
import { DataBase, setDatabase, type character } from "../database";
|
import { DataBase, setDatabase, type character } from "../database";
|
||||||
import { pluginProcess } from "./plugins";
|
import { pluginProcess } from "./plugins";
|
||||||
import { language } from "../../lang";
|
import { language } from "../../lang";
|
||||||
import { stringlizeChat } from "./stringlize";
|
import { stringlizeChat, unstringlizeChat } from "./stringlize";
|
||||||
import { globalFetch, isTauri } from "../globalApi";
|
import { globalFetch, isTauri } from "../globalApi";
|
||||||
|
|
||||||
interface requestDataArgument{
|
interface requestDataArgument{
|
||||||
@@ -215,7 +215,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
type: "success",
|
type: "success",
|
||||||
result: da.data.output
|
result: unstringlizeChat(da.data.output, formated, currentChar?.name ?? '')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,15 +291,9 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
try {
|
try {
|
||||||
let result:string = isNewAPI ? dat.results[0].text : dat.data[0].substring(proompt.length)
|
let result:string = isNewAPI ? dat.results[0].text : dat.data[0].substring(proompt.length)
|
||||||
|
|
||||||
for(const stopStr of stopStrings){
|
|
||||||
if(result.endsWith(stopStr)){
|
|
||||||
result.substring(0,result.length - stopStr.length)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
result: result
|
result: unstringlizeChat(result, formated, currentChar?.name ?? '')
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -10,9 +10,45 @@ export function stringlizeChat(formated:OpenAIChat[], char:string = ''){
|
|||||||
if(form.role === 'system'){
|
if(form.role === 'system'){
|
||||||
resultString.push("system note: " + form.content)
|
resultString.push("system note: " + form.content)
|
||||||
}
|
}
|
||||||
else{
|
else if(form.name){
|
||||||
resultString.push(form.name + ": " + form.content)
|
resultString.push(form.name + ": " + form.content)
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
resultString.push(form.content)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return resultString.join('\n\n') + `\n\n${char}:`
|
return resultString.join('\n\n') + `\n\n${char}:`
|
||||||
|
}
|
||||||
|
|
||||||
|
export function unstringlizeChat(text:string, formated:OpenAIChat[], char:string = ''){
|
||||||
|
let minIndex = -1
|
||||||
|
let chunks:string[] = ["system note:"]
|
||||||
|
if(char){
|
||||||
|
chunks.push(`${char}:`)
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const form of formated){
|
||||||
|
if(form.name){
|
||||||
|
const chunk = `${form.name}:`
|
||||||
|
if(!chunks.includes(chunk)){
|
||||||
|
chunks.push(chunk)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const chunk of chunks){
|
||||||
|
const ind = text.indexOf(chunk)
|
||||||
|
if(ind === -1){
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if(minIndex === -1 || minIndex > ind){
|
||||||
|
minIndex = ind
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(minIndex !== -1){
|
||||||
|
text.substring(0, minIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
return text
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user