diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 05a7b49d..6d736306 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -1195,11 +1195,12 @@ export async function importPreset(){ const decoded = await decodeMsgpack(fflate.decompressSync(f.data)) console.log(decoded) if(decoded.presetVersion === 0 && decoded.type === 'preset'){ - pre = decodeMsgpack(Buffer.from(await decryptBuffer(decoded.pres, 'risupreset'))) + pre = {...presetTemplate,...decodeMsgpack(Buffer.from(await decryptBuffer(decoded.pres, 'risupreset')))} } } else{ - pre = (JSON.parse(Buffer.from(f.data).toString('utf-8'))) + pre = {...presetTemplate,...(JSON.parse(Buffer.from(f.data).toString('utf-8')))} + console.log(pre) } let db = get(DataBase) if(pre.presetVersion && pre.presetVersion >= 3){ @@ -1226,6 +1227,101 @@ export async function importPreset(){ setDatabase(db) return } + + if(Array.isArray(pre?.prompt_order?.[0]?.order) && Array.isArray(pre?.prompts)){ + //ST preset + const pr = cloneDeep(presetTemplate) + pr.promptTemplate = [] + + function findPrompt(identifier:number){ + return pre.prompts.find((p:any) => p.identifier === identifier) + } + pr.temperature = (pre.temperature ?? 0.8) * 100 + pr.frequencyPenalty = (pre.frequency_penalty ?? 0.7) * 100 + pr.PresensePenalty = (pre.presence_penalty * 0.7) * 100 + pr.top_p = pre.top_p ?? 1 + + for(const prompt of pre?.prompt_order?.[0]?.order){ + const p = findPrompt(prompt?.identifier ?? '') + if(p){ + switch(p.identifier){ + case 'main':{ + pr.promptTemplate.push({ + type: 'plain', + type2: 'main', + text: p.content ?? "", + role: p.role ?? "system" + }) + break + } + case 'jailbreak': + case 'nsfw':{ + pr.promptTemplate.push({ + type: 'jailbreak', + type2: 'normal', + text: p.content ?? "", + role: p.role ?? "system" + }) + break + } + case 'dialogueExamples': + case 'charPersonality': + case 'scenario':{ + break //ignore + } + case 'chatHistory':{ + pr.promptTemplate.push({ + type: 'chat', + rangeEnd: 'end', + rangeStart: 0 + }) + break + } + case 'worldInfoBefore':{ + pr.promptTemplate.push({ + type: 'lorebook' + }) + break + } + case 'worldInfoAfter':{ + pr.promptTemplate.push({ + type: 'postEverything' + }) + break + } + case 'charDescription':{ + pr.promptTemplate.push({ + type: 'description' + }) + break + } + case 'personaDescription':{ + pr.promptTemplate.push({ + type: 'persona' + }) + break + } + default:{ + console.log(p) + pr.promptTemplate.push({ + type: 'plain', + type2: 'normal', + text: p.content ?? "", + role: p.role ?? "system" + }) + } + } + } + else{ + console.log("Prompt not found", prompt) + + } + } + pr.name = "Imported ST Preset" + db.botPresets.push(pr) + setDatabase(db) + return + } pre.name ??= "Imported" db.botPresets.push(pre) setDatabase(db)