diff --git a/src/lang/en.ts b/src/lang/en.ts index 87f93c7a..8391011e 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -458,4 +458,5 @@ export const languageEnglish = { saveBackupLocal: "Save Backup Locally", loadBackupLocal: "Load Backup Locally", topP: "Top P", + genTimes: "Generation Choices", } \ No newline at end of file diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte index 8e88294f..34685802 100644 --- a/src/lib/ChatScreens/DefaultChatScreen.svelte +++ b/src/lib/ChatScreens/DefaultChatScreen.svelte @@ -22,6 +22,7 @@ import { runTrigger } from 'src/ts/process/triggers'; import { v4 } from 'uuid'; import { postInlayImage } from 'src/ts/image'; + import { PreUnreroll, Prereroll } from 'src/ts/process/prereroll'; let messageInput:string = '' let messageInputTranslate:string = '' @@ -45,7 +46,6 @@ async function sendMain(continueResponse:boolean) { let selectedChar = $selectedCharID - console.log('send') if($doingChat){ return } @@ -108,6 +108,14 @@ rerolls = [] rerollid = -1 } + const genId = $CurrentChat.message.at(-1)?.generationInfo?.generationId + if(genId){ + const r = Prereroll(genId) + if(r){ + $CurrentChat.message[$CurrentChat.message.length - 1].data = r + return + } + } if(rerollid < rerolls.length - 1){ if(Array.isArray(rerolls[rerollid + 1])){ let db = $DataBase @@ -150,14 +158,22 @@ } async function unReroll() { - if(rerollid <= 0){ + if($doingChat){ return } if(lastCharId !== $selectedCharID){ rerolls = [] rerollid = -1 } - if($doingChat){ + const genId = $CurrentChat.message.at(-1)?.generationInfo?.generationId + if(genId){ + const r = PreUnreroll(genId) + if(r){ + $CurrentChat.message[$CurrentChat.message.length - 1].data = r + return + } + } + if(rerollid <= 0){ return } if(Array.isArray(rerolls[rerollid - 1])){ diff --git a/src/lib/Setting/Pages/AdvancedSettings.svelte b/src/lib/Setting/Pages/AdvancedSettings.svelte index 5d26f02f..71172120 100644 --- a/src/lib/Setting/Pages/AdvancedSettings.svelte +++ b/src/lib/Setting/Pages/AdvancedSettings.svelte @@ -30,6 +30,9 @@ {language.requestretrys} +{language.genTimes} + + Request Lib Reqwest diff --git a/src/ts/process/index.ts b/src/ts/process/index.ts index 56683414..2df052d6 100644 --- a/src/ts/process/index.ts +++ b/src/ts/process/index.ts @@ -24,6 +24,7 @@ import { getGenerationModelString } from "./models/modelString"; import { sendPeerChar } from "../sync/multiuser"; import { runInlayScreen } from "./inlayScreen"; import { runCharacterJS } from "../plugins/embedscript"; +import { addRerolls } from "./prereroll"; export interface OpenAIChat{ role: 'system'|'user'|'assistant'|'function' @@ -943,6 +944,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n const msgs = (req.type === 'success') ? [['char',req.result]] as const : (req.type === 'multiline') ? req.result : [] + let mrerolls:string[] = [] for(let i=0;i 0){ + addRerolls(generationId, mrerolls) + } + currentChat = db.characters[selectedChar].chats[selectedChat] const triggerResult = await runTrigger(currentChar, 'output', {chat:currentChat}) diff --git a/src/ts/process/prereroll.ts b/src/ts/process/prereroll.ts new file mode 100644 index 00000000..8fd80dde --- /dev/null +++ b/src/ts/process/prereroll.ts @@ -0,0 +1,29 @@ +let rerolls:{[key:string]:string[]} = {}; +let rerollIndex:{[key:string]:number} = {}; + +export function Prereroll(genId:string){ + if(rerolls[genId]){ + let index = rerollIndex[genId]; + index += 1; + rerollIndex[genId] = index; + return rerolls[genId][index] ?? null; + } + return null; +} +export function PreUnreroll(genId:string){ + if(rerolls[genId]){ + let index = rerollIndex[genId]; + index -= 1; + if(index < 0){ + return null + } + rerollIndex[genId] = index; + return rerolls[genId][index] ?? null; + } + return null; +} + +export function addRerolls(genId:string, values:string[]){ + rerolls[genId] = values; + rerollIndex[genId] = 0; +} \ No newline at end of file diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index 7ff2602b..00325238 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -478,6 +478,11 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' if(risuIdentify){ headers["X-Proxy-Risu"] = 'RisuAI' } + const multiGen = (db.genTime > 1 && aiModel.startsWith('gpt')) + if(multiGen){ + // @ts-ignore + body.n = db.genTime + } let throughProxi = (!isTauri) && (!isNodeServer) && (!db.usePlainFetch) if(db.useStreaming && arg.useStreaming){ body.stream = true @@ -578,6 +583,15 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' const dat = res.data as any if(res.ok){ try { + if(multiGen && dat.choices){ + return { + type: 'multiline', + result: dat.choices.map((v) => { + return ["char",v.message.content] + }) + } + + } const msg:OpenAIChatFull = (dat.choices[0].message) return { type: 'success', diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 3613d15f..68665097 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -360,6 +360,7 @@ export function setDatabase(data:Database){ data.google ??= {} data.google.accessToken ??= '' data.google.projectId ??= '' + data.genTime ??= 1 changeLanguage(data.language) DataBase.set(data) } @@ -561,6 +562,7 @@ export interface Database{ } mistralKey?:string chainOfThought?:boolean + genTime:number } export interface customscript{