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{