[feat] continue response
This commit is contained in:
@@ -415,4 +415,6 @@ export const languageEnglish = {
|
|||||||
ToggleHypaMemory: "Toggle HypaMemory",
|
ToggleHypaMemory: "Toggle HypaMemory",
|
||||||
resetPromptTemplateConfirm: "Do you really want to reset prompt template?",
|
resetPromptTemplateConfirm: "Do you really want to reset prompt template?",
|
||||||
emotionMethod: "Emotion Method",
|
emotionMethod: "Emotion Method",
|
||||||
|
continueResponse: "Continue Response",
|
||||||
|
showMenuChatList: "Show Menu Chat List",
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Suggestion from './Suggestion.svelte';
|
import Suggestion from './Suggestion.svelte';
|
||||||
import { CameraIcon, DatabaseIcon, DicesIcon, GlobeIcon, LanguagesIcon, Laugh, MenuIcon, MicOffIcon, RefreshCcwIcon, ReplyIcon, Send } from "lucide-svelte";
|
import { CameraIcon, DatabaseIcon, DicesIcon, GlobeIcon, LanguagesIcon, Laugh, MenuIcon, MicOffIcon, RefreshCcwIcon, ReplyIcon, Send, StepForwardIcon } from "lucide-svelte";
|
||||||
import { CurrentCharacter, CurrentChat, CurrentUsername, selectedCharID, CurrentUserIcon, CurrentShowMemoryLimit,CurrentSimpleCharacter } from "../../ts/stores";
|
import { CurrentCharacter, CurrentChat, CurrentUsername, selectedCharID, CurrentUserIcon, CurrentShowMemoryLimit,CurrentSimpleCharacter } from "../../ts/stores";
|
||||||
import Chat from "./Chat.svelte";
|
import Chat from "./Chat.svelte";
|
||||||
import { DataBase, type Message, type character, type groupChat } from "../../ts/storage/database";
|
import { DataBase, type Message, type character, type groupChat } from "../../ts/storage/database";
|
||||||
@@ -25,7 +25,6 @@
|
|||||||
let messageInput:string = ''
|
let messageInput:string = ''
|
||||||
let messageInputTranslate:string = ''
|
let messageInputTranslate:string = ''
|
||||||
let openMenu = false
|
let openMenu = false
|
||||||
export let openChatList = false
|
|
||||||
let loadPages = 30
|
let loadPages = 30
|
||||||
let autoMode = false
|
let autoMode = false
|
||||||
let rerolls:Message[][] = []
|
let rerolls:Message[][] = []
|
||||||
@@ -34,8 +33,16 @@
|
|||||||
let doingChatInputTranslate = false
|
let doingChatInputTranslate = false
|
||||||
let currentCharacter:character|groupChat = $CurrentCharacter
|
let currentCharacter:character|groupChat = $CurrentCharacter
|
||||||
let toggleStickers:boolean = false
|
let toggleStickers:boolean = false
|
||||||
|
export let openChatList:boolean = false
|
||||||
|
|
||||||
async function send() {
|
async function send(){
|
||||||
|
return sendMain(false)
|
||||||
|
}
|
||||||
|
async function sendContinue(){
|
||||||
|
return sendMain(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function sendMain(continueResponse:boolean) {
|
||||||
let selectedChar = $selectedCharID
|
let selectedChar = $selectedCharID
|
||||||
console.log('send')
|
console.log('send')
|
||||||
if($doingChat){
|
if($doingChat){
|
||||||
@@ -88,7 +95,7 @@
|
|||||||
rerolls = []
|
rerolls = []
|
||||||
await sleep(10)
|
await sleep(10)
|
||||||
updateInputSizeAll()
|
updateInputSizeAll()
|
||||||
await sendChatMain()
|
await sendChatMain(continueResponse)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,11 +161,14 @@
|
|||||||
|
|
||||||
let abortController:null|AbortController = null
|
let abortController:null|AbortController = null
|
||||||
|
|
||||||
async function sendChatMain(saveReroll = false) {
|
async function sendChatMain(continued:boolean = false) {
|
||||||
messageInput = ''
|
messageInput = ''
|
||||||
abortController = new AbortController()
|
abortController = new AbortController()
|
||||||
try {
|
try {
|
||||||
await sendChat(-1, {signal:abortController.signal})
|
await sendChat(-1, {
|
||||||
|
signal:abortController.signal,
|
||||||
|
continue:continued
|
||||||
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
alertError(`${error}`)
|
alertError(`${error}`)
|
||||||
@@ -519,6 +529,21 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors"
|
||||||
|
class:text-textcolor2={($CurrentChat.message.length < 2) || ($CurrentChat.message[$CurrentChat.message.length - 1].role !== 'char')}
|
||||||
|
on:click={() => {
|
||||||
|
if(($CurrentChat.message.length < 2) || ($CurrentChat.message[$CurrentChat.message.length - 1].role !== 'char')){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sendContinue();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<StepForwardIcon />
|
||||||
|
<span class="ml-2">{language.continueResponse}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{#if $DataBase.showMenuChatList}
|
||||||
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={() => {
|
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={() => {
|
||||||
openChatList = true
|
openChatList = true
|
||||||
openMenu = false
|
openMenu = false
|
||||||
@@ -526,15 +551,9 @@
|
|||||||
<DatabaseIcon />
|
<DatabaseIcon />
|
||||||
<span class="ml-2">{language.chatList}</span>
|
<span class="ml-2">{language.chatList}</span>
|
||||||
</div>
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
{#if $DataBase.translator !== ''}
|
{#if $DataBase.translator !== ''}
|
||||||
<!-- <div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={async () => {
|
|
||||||
doingChatInputTranslate = true
|
|
||||||
messageInput = (await translate(messageInput, true))
|
|
||||||
doingChatInputTranslate = false
|
|
||||||
}}>
|
|
||||||
<LanguagesIcon />
|
|
||||||
<span class="ml-2">{language.translateInput}</span>
|
|
||||||
</div> -->
|
|
||||||
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoTranslateInput ? 'text-green-500':'lg:hover:text-green-500')} on:click={() => {
|
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoTranslateInput ? 'text-green-500':'lg:hover:text-green-500')} on:click={() => {
|
||||||
$DataBase.useAutoTranslateInput = !$DataBase.useAutoTranslateInput
|
$DataBase.useAutoTranslateInput = !$DataBase.useAutoTranslateInput
|
||||||
}}>
|
}}>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import { DataBase } from "src/ts/storage/database";
|
import { DataBase } from "src/ts/storage/database";
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<h2 class="mb-2 text-2xl font-bold mt-2">{language.accessibility}</h2>
|
<h2 class="mb-2 text-2xl font-bold mt-2">{language.accessibility}</h2>
|
||||||
|
|
||||||
<div class="flex items-center mt-2">
|
<div class="flex items-center mt-2">
|
||||||
@@ -33,3 +34,7 @@
|
|||||||
<div class="flex items-center mt-2">
|
<div class="flex items-center mt-2">
|
||||||
<Check bind:check={$DataBase.toggleConfirmRecommendedPreset} name={language.toggleConfirmRecommendedPreset}/>
|
<Check bind:check={$DataBase.toggleConfirmRecommendedPreset} name={language.toggleConfirmRecommendedPreset}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center mt-2">
|
||||||
|
<Check bind:check={$DataBase.showMenuChatList} name={language.showMenuChatList}/>
|
||||||
|
</div>
|
||||||
@@ -36,7 +36,7 @@ export interface OpenAIChatFull extends OpenAIChat{
|
|||||||
export const doingChat = writable(false)
|
export const doingChat = writable(false)
|
||||||
export const abortChat = writable(false)
|
export const abortChat = writable(false)
|
||||||
|
|
||||||
export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:number,signal?:AbortSignal} = {}):Promise<boolean> {
|
export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:number,signal?:AbortSignal,continue?:boolean} = {}):Promise<boolean> {
|
||||||
|
|
||||||
|
|
||||||
const abortSignal = arg.signal ?? (new AbortController()).signal
|
const abortSignal = arg.signal ?? (new AbortController()).signal
|
||||||
@@ -515,6 +515,14 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
|
|||||||
formatOrder.push('postEverything')
|
formatOrder.push('postEverything')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//continue chat model
|
||||||
|
if(arg.continue && (db.aiModel.startsWith('claude') || db.aiModel.startsWith('gpt') || db.aiModel.startsWith('openrouter') || db.aiModel.startsWith('reverse_proxy'))){
|
||||||
|
unformated.postEverything.push({
|
||||||
|
role: 'system',
|
||||||
|
content: '[Continue the last response]'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function pushPrompts(cha:OpenAIChat[]){
|
function pushPrompts(cha:OpenAIChat[]){
|
||||||
for(const chat of cha){
|
for(const chat of cha){
|
||||||
@@ -670,19 +678,26 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
|
|||||||
}
|
}
|
||||||
else if(req.type === 'streaming'){
|
else if(req.type === 'streaming'){
|
||||||
const reader = req.result.getReader()
|
const reader = req.result.getReader()
|
||||||
const msgIndex = db.characters[selectedChar].chats[selectedChat].message.length
|
let msgIndex = db.characters[selectedChar].chats[selectedChat].message.length
|
||||||
db.characters[selectedChar].chats[selectedChat].isStreaming = true
|
let prefix = ''
|
||||||
|
if(arg.continue){
|
||||||
|
msgIndex -= 1
|
||||||
|
prefix = db.characters[selectedChar].chats[selectedChat].message[msgIndex].data
|
||||||
|
}
|
||||||
|
else{
|
||||||
db.characters[selectedChar].chats[selectedChat].message.push({
|
db.characters[selectedChar].chats[selectedChat].message.push({
|
||||||
role: 'char',
|
role: 'char',
|
||||||
data: "",
|
data: "",
|
||||||
saying: currentChar.chaId,
|
saying: currentChar.chaId,
|
||||||
time: Date.now()
|
time: Date.now()
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
db.characters[selectedChar].chats[selectedChat].isStreaming = true
|
||||||
while(abortSignal.aborted === false){
|
while(abortSignal.aborted === false){
|
||||||
const readed = (await reader.read())
|
const readed = (await reader.read())
|
||||||
if(readed.value){
|
if(readed.value){
|
||||||
result = readed.value
|
result = readed.value
|
||||||
const result2 = processScriptFull(nowChatroom, reformatContent(result), 'editoutput', msgIndex)
|
const result2 = processScriptFull(nowChatroom, reformatContent(prefix + result), 'editoutput', msgIndex)
|
||||||
db.characters[selectedChar].chats[selectedChat].message[msgIndex].data = result2.data
|
db.characters[selectedChar].chats[selectedChat].message[msgIndex].data = result2.data
|
||||||
emoChanged = result2.emoChanged
|
emoChanged = result2.emoChanged
|
||||||
db.characters[selectedChar].reloadKeys += 1
|
db.characters[selectedChar].reloadKeys += 1
|
||||||
@@ -709,17 +724,33 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
|
|||||||
const msgs = (req.type === 'success') ? [['char',req.result]] as const
|
const msgs = (req.type === 'success') ? [['char',req.result]] as const
|
||||||
: (req.type === 'multiline') ? req.result
|
: (req.type === 'multiline') ? req.result
|
||||||
: []
|
: []
|
||||||
for(const msg of msgs){
|
for(let i=0;i<msgs.length;i++){
|
||||||
const msgIndex = db.characters[selectedChar].chats[selectedChat].message.length
|
const msg = msgs[i]
|
||||||
const result2 = processScriptFull(nowChatroom, reformatContent(msg[1]), 'editoutput', msgIndex)
|
let msgIndex = db.characters[selectedChar].chats[selectedChat].message.length
|
||||||
|
let result2 = processScriptFull(nowChatroom, reformatContent(msg[1]), 'editoutput', msgIndex)
|
||||||
|
if(i === 0 && arg.continue){
|
||||||
|
msgIndex -= 1
|
||||||
|
let beforeChat = db.characters[selectedChar].chats[selectedChat].message[msgIndex]
|
||||||
|
result2 = processScriptFull(nowChatroom, reformatContent(beforeChat.data + msg[1]), 'editoutput', msgIndex)
|
||||||
|
}
|
||||||
result = result2.data
|
result = result2.data
|
||||||
emoChanged = result2.emoChanged
|
emoChanged = result2.emoChanged
|
||||||
|
if(i === 0 && arg.continue){
|
||||||
|
db.characters[selectedChar].chats[selectedChat].message[msgIndex] = {
|
||||||
|
role: 'char',
|
||||||
|
data: result,
|
||||||
|
saying: currentChar.chaId,
|
||||||
|
time: Date.now()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
db.characters[selectedChar].chats[selectedChat].message.push({
|
db.characters[selectedChar].chats[selectedChat].message.push({
|
||||||
role: msg[0],
|
role: msg[0],
|
||||||
data: result,
|
data: result,
|
||||||
saying: currentChar.chaId,
|
saying: currentChar.chaId,
|
||||||
time: Date.now()
|
time: Date.now()
|
||||||
})
|
})
|
||||||
|
}
|
||||||
db.characters[selectedChar].reloadKeys += 1
|
db.characters[selectedChar].reloadKeys += 1
|
||||||
await sayTTS(currentChar, result)
|
await sayTTS(currentChar, result)
|
||||||
setDatabase(db)
|
setDatabase(db)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { invoke } from "@tauri-apps/api/tauri";
|
import { invoke } from "@tauri-apps/api/tauri";
|
||||||
import { globalFetch } from "src/ts/storage/globalApi";
|
import { globalFetch } from "src/ts/storage/globalApi";
|
||||||
import { sleep } from "src/ts/util";
|
import { sleep } from "src/ts/util";
|
||||||
import path from "@tauri-apps/api/path";
|
import * as path from "@tauri-apps/api/path";
|
||||||
import { exists } from "@tauri-apps/api/fs";
|
import { exists } from "@tauri-apps/api/fs";
|
||||||
import { alertClear, alertError, alertMd, alertWait } from "src/ts/alert";
|
import { alertClear, alertError, alertMd, alertWait } from "src/ts/alert";
|
||||||
import { get } from "svelte/store";
|
import { get } from "svelte/store";
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { globalFetch } from "src/ts/storage/globalApi"
|
|||||||
import { alertError, alertInput, alertNormal, alertWait } from "src/ts/alert"
|
import { alertError, alertInput, alertNormal, alertWait } from "src/ts/alert"
|
||||||
import { sleep } from "src/ts/util"
|
import { sleep } from "src/ts/util"
|
||||||
|
|
||||||
export function stringlizeNAIChat(formated:OpenAIChat[], char:string = ''){
|
export function stringlizeNAIChat(formated:OpenAIChat[], char:string, continued: boolean){
|
||||||
|
|
||||||
|
|
||||||
const db = get(DataBase)
|
const db = get(DataBase)
|
||||||
@@ -35,7 +35,12 @@ export function stringlizeNAIChat(formated:OpenAIChat[], char:string = ''){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return resultString.join(seperator) + `\n\n${char}:`
|
let res = resultString.join(seperator)
|
||||||
|
|
||||||
|
if(!continued){
|
||||||
|
res += `\n\n${char}:`
|
||||||
|
}
|
||||||
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
export const novelLogin = async () => {
|
export const novelLogin = async () => {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ interface requestDataArgument{
|
|||||||
useStreaming?:boolean
|
useStreaming?:boolean
|
||||||
isGroupChat?:boolean
|
isGroupChat?:boolean
|
||||||
useEmotion?:boolean
|
useEmotion?:boolean
|
||||||
|
continue?:boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
type requestDataResponse = {
|
type requestDataResponse = {
|
||||||
@@ -90,6 +91,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
let temperature = arg.temperature ?? (db.temperature / 100)
|
let temperature = arg.temperature ?? (db.temperature / 100)
|
||||||
let bias = arg.bias
|
let bias = arg.bias
|
||||||
let currentChar = arg.currentChar
|
let currentChar = arg.currentChar
|
||||||
|
arg.continue = arg.continue ?? false
|
||||||
let biasString = arg.biasString ?? []
|
let biasString = arg.biasString ?? []
|
||||||
const aiModel = (model === 'model' || (!db.advancedBotSettings)) ? db.aiModel : db.subModel
|
const aiModel = (model === 'model' || (!db.advancedBotSettings)) ? db.aiModel : db.subModel
|
||||||
|
|
||||||
@@ -356,7 +358,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
}
|
}
|
||||||
case 'novelai':
|
case 'novelai':
|
||||||
case 'novelai_kayra':{
|
case 'novelai_kayra':{
|
||||||
const proompt = stringlizeNAIChat(formated, currentChar?.name ?? '')
|
const proompt = stringlizeNAIChat(formated, currentChar?.name ?? '', arg.continue)
|
||||||
let logit_bias_exp:{
|
let logit_bias_exp:{
|
||||||
sequence: number[], bias: number, ensure_sequence_finish: false, generate_once: true
|
sequence: number[], bias: number, ensure_sequence_finish: false, generate_once: true
|
||||||
}[] = []
|
}[] = []
|
||||||
@@ -439,7 +441,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, currentChar.name, suggesting)
|
const proompt = stringlizeChatOba(formated, currentChar.name, suggesting, arg.continue)
|
||||||
const stopStrings = getStopStrings(suggesting)
|
const stopStrings = getStopStrings(suggesting)
|
||||||
console.log(proompt)
|
console.log(proompt)
|
||||||
console.log(stopStrings)
|
console.log(stopStrings)
|
||||||
@@ -583,7 +585,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
case 'palm2':{
|
case 'palm2':{
|
||||||
const body = {
|
const body = {
|
||||||
"prompt": {
|
"prompt": {
|
||||||
"text": stringlizeChat(formated, currentChar?.name ?? '')
|
"text": stringlizeChat(formated, currentChar?.name ?? '', arg.continue)
|
||||||
},
|
},
|
||||||
"safetySettings":[
|
"safetySettings":[
|
||||||
{
|
{
|
||||||
@@ -654,7 +656,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "kobold":{
|
case "kobold":{
|
||||||
const proompt = stringlizeChat(formated, currentChar?.name ?? '')
|
const proompt = stringlizeChat(formated, currentChar?.name ?? '', arg.continue)
|
||||||
const url = new URL(db.koboldURL)
|
const url = new URL(db.koboldURL)
|
||||||
if(url.pathname.length < 3){
|
if(url.pathname.length < 3){
|
||||||
url.pathname = 'api/v1/generate'
|
url.pathname = 'api/v1/generate'
|
||||||
@@ -704,7 +706,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
};
|
};
|
||||||
|
|
||||||
const send_body = {
|
const send_body = {
|
||||||
text: stringlizeAINChat(formated, currentChar?.name ?? ''),
|
text: stringlizeAINChat(formated, currentChar?.name ?? '', arg.continue),
|
||||||
length: maxTokens,
|
length: maxTokens,
|
||||||
temperature: temperature,
|
temperature: temperature,
|
||||||
top_p: db.ainconfig.top_p,
|
top_p: db.ainconfig.top_p,
|
||||||
@@ -764,7 +766,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
|
|
||||||
const response = await createDeep([{
|
const response = await createDeep([{
|
||||||
role: 'user',
|
role: 'user',
|
||||||
content: stringlizeChat(formated, currentChar?.name ?? '')
|
content: stringlizeChat(formated, currentChar?.name ?? '', arg.continue)
|
||||||
}])
|
}])
|
||||||
|
|
||||||
if(!response.ok){
|
if(!response.ok){
|
||||||
@@ -862,7 +864,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
|
|
||||||
}
|
}
|
||||||
if(aiModel.startsWith("horde:::")){
|
if(aiModel.startsWith("horde:::")){
|
||||||
const proompt = stringlizeChat(formated, currentChar?.name ?? '')
|
const proompt = stringlizeChat(formated, currentChar?.name ?? '', arg.continue)
|
||||||
|
|
||||||
const realModel = aiModel.split(":::")[1]
|
const realModel = aiModel.split(":::")[1]
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export function multiChatReplacer(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function stringlizeChat(formated:OpenAIChat[], char:string = ''){
|
export function stringlizeChat(formated:OpenAIChat[], char:string, continued:boolean){
|
||||||
let resultString:string[] = []
|
let resultString:string[] = []
|
||||||
for(const form of formated){
|
for(const form of formated){
|
||||||
if(form.role === 'system'){
|
if(form.role === 'system'){
|
||||||
@@ -20,7 +20,12 @@ export function stringlizeChat(formated:OpenAIChat[], char:string = ''){
|
|||||||
resultString.push(form.content)
|
resultString.push(form.content)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resultString.join('\n\n') + `\n\n${char}:`
|
let res = resultString.join('\n\n')
|
||||||
|
|
||||||
|
if(!continued){
|
||||||
|
res += `\n\n${char}:`
|
||||||
|
}
|
||||||
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
function appendWhitespace(prefix:string, seperator:string=" ") {
|
function appendWhitespace(prefix:string, seperator:string=" ") {
|
||||||
@@ -29,7 +34,7 @@ function appendWhitespace(prefix:string, seperator:string=" ") {
|
|||||||
}
|
}
|
||||||
return prefix
|
return prefix
|
||||||
}
|
}
|
||||||
export function stringlizeChatOba(formated:OpenAIChat[], characterName:string='', suggesting:boolean=false){
|
export function stringlizeChatOba(formated:OpenAIChat[], characterName:string, suggesting:boolean, continued:boolean){
|
||||||
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;
|
||||||
@@ -59,11 +64,13 @@ export function stringlizeChatOba(formated:OpenAIChat[], characterName:string=''
|
|||||||
}
|
}
|
||||||
resultString.push(prefix + name + form.content)
|
resultString.push(prefix + name + form.content)
|
||||||
}
|
}
|
||||||
|
if(!continued){
|
||||||
if (suggesting){
|
if (suggesting){
|
||||||
resultString.push(appendWhitespace(assistantPrefix, seperator) + `${db.username}:\n` + db.autoSuggestPrefix)
|
resultString.push(appendWhitespace(assistantPrefix, seperator) + `${db.username}:\n` + db.autoSuggestPrefix)
|
||||||
} else {
|
} else {
|
||||||
resultString.push(assistantPrefix + `${characterName}:`)
|
resultString.push(assistantPrefix + `${characterName}:`)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return resultString.join(seperator)
|
return resultString.join(seperator)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +197,7 @@ export function getUnstringlizerChunks(formated:OpenAIChat[], char:string, mode:
|
|||||||
return {chunks,extChunk:charNames.concat(chunks)}
|
return {chunks,extChunk:charNames.concat(chunks)}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function stringlizeAINChat(formated:OpenAIChat[], char:string = ''){
|
export function stringlizeAINChat(formated:OpenAIChat[], char:string, continued: boolean){
|
||||||
let resultString:string[] = []
|
let resultString:string[] = []
|
||||||
const db = get(DataBase)
|
const db = get(DataBase)
|
||||||
|
|
||||||
@@ -213,7 +220,14 @@ export function stringlizeAINChat(formated:OpenAIChat[], char:string = ''){
|
|||||||
resultString.push(form.content)
|
resultString.push(form.content)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resultString.join('\n\n') + `\n\n${char} 「`
|
let res = resultString.join('\n\n')
|
||||||
|
if(!continued){
|
||||||
|
res += + `\n\n${char} 「`
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
res += " 「"
|
||||||
|
}
|
||||||
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractAINOutputStrings(inputString:string, characters:string[]) {
|
function extractAINOutputStrings(inputString:string, characters:string[]) {
|
||||||
|
|||||||
@@ -310,6 +310,164 @@ export function setDatabase(data:Database){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface Database{
|
||||||
|
characters: (character|groupChat)[],
|
||||||
|
apiType: string
|
||||||
|
forceReplaceUrl2:string
|
||||||
|
openAIKey: string
|
||||||
|
proxyKey:string
|
||||||
|
mainPrompt: string
|
||||||
|
jailbreak: string
|
||||||
|
globalNote:string
|
||||||
|
temperature: number
|
||||||
|
askRemoval:boolean
|
||||||
|
maxContext: number
|
||||||
|
maxResponse: number
|
||||||
|
frequencyPenalty: number
|
||||||
|
PresensePenalty: number
|
||||||
|
formatingOrder: FormatingOrderItem[]
|
||||||
|
aiModel: string
|
||||||
|
jailbreakToggle:boolean
|
||||||
|
loreBookDepth: number
|
||||||
|
loreBookToken: number,
|
||||||
|
loreBook: {
|
||||||
|
name:string
|
||||||
|
data:loreBook[]
|
||||||
|
}[]
|
||||||
|
loreBookPage: number
|
||||||
|
supaMemoryPrompt: string
|
||||||
|
username: string
|
||||||
|
userIcon: string
|
||||||
|
additionalPrompt: string
|
||||||
|
descriptionPrefix: string
|
||||||
|
forceReplaceUrl: string
|
||||||
|
language: string
|
||||||
|
translator: string
|
||||||
|
plugins: RisuPlugin[]
|
||||||
|
officialplugins: {
|
||||||
|
automark?: boolean
|
||||||
|
}
|
||||||
|
currentPluginProvider: string
|
||||||
|
zoomsize:number
|
||||||
|
lastup:string
|
||||||
|
customBackground:string
|
||||||
|
textgenWebUIStreamURL:string
|
||||||
|
textgenWebUIBlockingURL:string
|
||||||
|
autoTranslate: boolean
|
||||||
|
fullScreen:boolean
|
||||||
|
playMessage:boolean
|
||||||
|
iconsize:number
|
||||||
|
theme: string
|
||||||
|
subModel:string
|
||||||
|
timeOut:number
|
||||||
|
emotionPrompt: string,
|
||||||
|
requester:string
|
||||||
|
formatversion:number
|
||||||
|
waifuWidth:number
|
||||||
|
waifuWidth2:number
|
||||||
|
botPresets:botPreset[]
|
||||||
|
botPresetsId:number
|
||||||
|
sdProvider: string
|
||||||
|
webUiUrl:string
|
||||||
|
sdSteps:number
|
||||||
|
sdCFG:number
|
||||||
|
sdConfig:sdConfig
|
||||||
|
runpodKey:string
|
||||||
|
promptPreprocess:boolean
|
||||||
|
bias: [string, number][]
|
||||||
|
swipe:boolean
|
||||||
|
instantRemove:boolean
|
||||||
|
textTheme: string
|
||||||
|
customTextTheme: {
|
||||||
|
FontColorStandard: string,
|
||||||
|
FontColorBold : string,
|
||||||
|
FontColorItalic : string,
|
||||||
|
FontColorItalicBold : string,
|
||||||
|
}
|
||||||
|
requestRetrys:number
|
||||||
|
emotionPrompt2:string
|
||||||
|
useSayNothing:boolean
|
||||||
|
didFirstSetup: boolean
|
||||||
|
requestmet: string
|
||||||
|
requestproxy: string
|
||||||
|
showUnrecommended:boolean
|
||||||
|
elevenLabKey:string
|
||||||
|
voicevoxUrl:string
|
||||||
|
useExperimental:boolean
|
||||||
|
showMemoryLimit:boolean
|
||||||
|
roundIcons:boolean
|
||||||
|
useStreaming:boolean
|
||||||
|
palmAPI:string,
|
||||||
|
supaMemoryKey:string
|
||||||
|
supaMemoryType:string
|
||||||
|
textScreenColor?:string
|
||||||
|
textBorder?:boolean
|
||||||
|
textScreenRounded?:boolean
|
||||||
|
textScreenBorder?:string
|
||||||
|
characterOrder:(string|folder)[]
|
||||||
|
hordeConfig:hordeConfig,
|
||||||
|
toggleConfirmRecommendedPreset:boolean,
|
||||||
|
novelai:{
|
||||||
|
token:string,
|
||||||
|
model:string
|
||||||
|
}
|
||||||
|
globalscript: customscript[],
|
||||||
|
sendWithEnter:boolean
|
||||||
|
clickToEdit: boolean
|
||||||
|
koboldURL:string
|
||||||
|
advancedBotSettings:boolean
|
||||||
|
useAutoSuggestions:boolean
|
||||||
|
autoSuggestPrompt:string
|
||||||
|
autoSuggestPrefix:string
|
||||||
|
autoSuggestClean:boolean
|
||||||
|
claudeAPIKey:string,
|
||||||
|
useChatCopy:boolean,
|
||||||
|
novellistAPI:string,
|
||||||
|
useAutoTranslateInput:boolean
|
||||||
|
imageCompression:boolean
|
||||||
|
account?:{
|
||||||
|
token:string
|
||||||
|
id:string,
|
||||||
|
data: {
|
||||||
|
refresh_token?:string,
|
||||||
|
access_token?:string
|
||||||
|
expires_in?: number
|
||||||
|
}
|
||||||
|
useSync?:boolean
|
||||||
|
},
|
||||||
|
classicMaxWidth: boolean,
|
||||||
|
useChatSticker:boolean,
|
||||||
|
useAdditionalAssetsPreview:boolean,
|
||||||
|
usePlainFetch:boolean
|
||||||
|
hypaMemory:boolean
|
||||||
|
proxyRequestModel:string
|
||||||
|
ooba:OobaSettings
|
||||||
|
ainconfig: AINsettings
|
||||||
|
personaPrompt:string
|
||||||
|
openrouterRequestModel:string
|
||||||
|
openrouterKey:string
|
||||||
|
selectedPersona:number
|
||||||
|
personas:{
|
||||||
|
personaPrompt:string
|
||||||
|
name:string
|
||||||
|
icon:string
|
||||||
|
}[]
|
||||||
|
assetWidth:number
|
||||||
|
animationSpeed:number
|
||||||
|
botSettingAtStart:false
|
||||||
|
NAIsettings:NAISettings
|
||||||
|
hideRealm:boolean
|
||||||
|
colorScheme:ColorScheme
|
||||||
|
colorSchemeName:string
|
||||||
|
promptTemplate?:Proompt[]
|
||||||
|
forceProxyAsOpenAI?:boolean
|
||||||
|
hypaModel:'ada'|'MiniLM'
|
||||||
|
saveTime?:number
|
||||||
|
mancerHeader:string
|
||||||
|
emotionProcesser:'submodel'|'embedding',
|
||||||
|
showMenuChatList?:boolean
|
||||||
|
}
|
||||||
|
|
||||||
export interface customscript{
|
export interface customscript{
|
||||||
comment: string;
|
comment: string;
|
||||||
in:string
|
in:string
|
||||||
@@ -470,162 +628,6 @@ export interface botPreset{
|
|||||||
promptTemplate?:Proompt[]
|
promptTemplate?:Proompt[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Database{
|
|
||||||
characters: (character|groupChat)[],
|
|
||||||
apiType: string
|
|
||||||
forceReplaceUrl2:string
|
|
||||||
openAIKey: string
|
|
||||||
proxyKey:string
|
|
||||||
mainPrompt: string
|
|
||||||
jailbreak: string
|
|
||||||
globalNote:string
|
|
||||||
temperature: number
|
|
||||||
askRemoval:boolean
|
|
||||||
maxContext: number
|
|
||||||
maxResponse: number
|
|
||||||
frequencyPenalty: number
|
|
||||||
PresensePenalty: number
|
|
||||||
formatingOrder: FormatingOrderItem[]
|
|
||||||
aiModel: string
|
|
||||||
jailbreakToggle:boolean
|
|
||||||
loreBookDepth: number
|
|
||||||
loreBookToken: number,
|
|
||||||
loreBook: {
|
|
||||||
name:string
|
|
||||||
data:loreBook[]
|
|
||||||
}[]
|
|
||||||
loreBookPage: number
|
|
||||||
supaMemoryPrompt: string
|
|
||||||
username: string
|
|
||||||
userIcon: string
|
|
||||||
additionalPrompt: string
|
|
||||||
descriptionPrefix: string
|
|
||||||
forceReplaceUrl: string
|
|
||||||
language: string
|
|
||||||
translator: string
|
|
||||||
plugins: RisuPlugin[]
|
|
||||||
officialplugins: {
|
|
||||||
automark?: boolean
|
|
||||||
}
|
|
||||||
currentPluginProvider: string
|
|
||||||
zoomsize:number
|
|
||||||
lastup:string
|
|
||||||
customBackground:string
|
|
||||||
textgenWebUIStreamURL:string
|
|
||||||
textgenWebUIBlockingURL:string
|
|
||||||
autoTranslate: boolean
|
|
||||||
fullScreen:boolean
|
|
||||||
playMessage:boolean
|
|
||||||
iconsize:number
|
|
||||||
theme: string
|
|
||||||
subModel:string
|
|
||||||
timeOut:number
|
|
||||||
emotionPrompt: string,
|
|
||||||
requester:string
|
|
||||||
formatversion:number
|
|
||||||
waifuWidth:number
|
|
||||||
waifuWidth2:number
|
|
||||||
botPresets:botPreset[]
|
|
||||||
botPresetsId:number
|
|
||||||
sdProvider: string
|
|
||||||
webUiUrl:string
|
|
||||||
sdSteps:number
|
|
||||||
sdCFG:number
|
|
||||||
sdConfig:sdConfig
|
|
||||||
runpodKey:string
|
|
||||||
promptPreprocess:boolean
|
|
||||||
bias: [string, number][]
|
|
||||||
swipe:boolean
|
|
||||||
instantRemove:boolean
|
|
||||||
textTheme: string
|
|
||||||
customTextTheme: {
|
|
||||||
FontColorStandard: string,
|
|
||||||
FontColorBold : string,
|
|
||||||
FontColorItalic : string,
|
|
||||||
FontColorItalicBold : string,
|
|
||||||
}
|
|
||||||
requestRetrys:number
|
|
||||||
emotionPrompt2:string
|
|
||||||
useSayNothing:boolean
|
|
||||||
didFirstSetup: boolean
|
|
||||||
requestmet: string
|
|
||||||
requestproxy: string
|
|
||||||
showUnrecommended:boolean
|
|
||||||
elevenLabKey:string
|
|
||||||
voicevoxUrl:string
|
|
||||||
useExperimental:boolean
|
|
||||||
showMemoryLimit:boolean
|
|
||||||
roundIcons:boolean
|
|
||||||
useStreaming:boolean
|
|
||||||
palmAPI:string,
|
|
||||||
supaMemoryKey:string
|
|
||||||
supaMemoryType:string
|
|
||||||
textScreenColor?:string
|
|
||||||
textBorder?:boolean
|
|
||||||
textScreenRounded?:boolean
|
|
||||||
textScreenBorder?:string
|
|
||||||
characterOrder:(string|folder)[]
|
|
||||||
hordeConfig:hordeConfig,
|
|
||||||
toggleConfirmRecommendedPreset:boolean,
|
|
||||||
novelai:{
|
|
||||||
token:string,
|
|
||||||
model:string
|
|
||||||
}
|
|
||||||
globalscript: customscript[],
|
|
||||||
sendWithEnter:boolean
|
|
||||||
clickToEdit: boolean
|
|
||||||
koboldURL:string
|
|
||||||
advancedBotSettings:boolean
|
|
||||||
useAutoSuggestions:boolean
|
|
||||||
autoSuggestPrompt:string
|
|
||||||
autoSuggestPrefix:string
|
|
||||||
autoSuggestClean:boolean
|
|
||||||
claudeAPIKey:string,
|
|
||||||
useChatCopy:boolean,
|
|
||||||
novellistAPI:string,
|
|
||||||
useAutoTranslateInput:boolean
|
|
||||||
imageCompression:boolean
|
|
||||||
account?:{
|
|
||||||
token:string
|
|
||||||
id:string,
|
|
||||||
data: {
|
|
||||||
refresh_token?:string,
|
|
||||||
access_token?:string
|
|
||||||
expires_in?: number
|
|
||||||
}
|
|
||||||
useSync?:boolean
|
|
||||||
},
|
|
||||||
classicMaxWidth: boolean,
|
|
||||||
useChatSticker:boolean,
|
|
||||||
useAdditionalAssetsPreview:boolean,
|
|
||||||
usePlainFetch:boolean
|
|
||||||
hypaMemory:boolean
|
|
||||||
proxyRequestModel:string
|
|
||||||
ooba:OobaSettings
|
|
||||||
ainconfig: AINsettings
|
|
||||||
personaPrompt:string
|
|
||||||
openrouterRequestModel:string
|
|
||||||
openrouterKey:string
|
|
||||||
selectedPersona:number
|
|
||||||
personas:{
|
|
||||||
personaPrompt:string
|
|
||||||
name:string
|
|
||||||
icon:string
|
|
||||||
}[]
|
|
||||||
assetWidth:number
|
|
||||||
animationSpeed:number
|
|
||||||
botSettingAtStart:false
|
|
||||||
NAIsettings:NAISettings
|
|
||||||
hideRealm:boolean
|
|
||||||
colorScheme:ColorScheme
|
|
||||||
colorSchemeName:string
|
|
||||||
promptTemplate?:Proompt[]
|
|
||||||
forceProxyAsOpenAI?:boolean
|
|
||||||
hypaModel:'ada'|'MiniLM'
|
|
||||||
saveTime?:number
|
|
||||||
mancerHeader:string
|
|
||||||
emotionProcesser:'submodel'|'embedding'
|
|
||||||
}
|
|
||||||
|
|
||||||
interface hordeConfig{
|
interface hordeConfig{
|
||||||
apiKey:string
|
apiKey:string
|
||||||
|
|||||||
Reference in New Issue
Block a user