[feat] added 'Use Probability Condition' in lorebook

This commit is contained in:
kwaroran
2023-05-31 10:25:53 +09:00
parent 8e5df44090
commit f7856dc4dd
8 changed files with 55 additions and 11 deletions

View File

@@ -382,7 +382,8 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array):Promise<boole
mode: "normal",
alwaysActive: book.constant ?? false,
selective: book.selective ?? false,
extentions: {...book.extensions, risu_case_sensitive: book.case_sensitive}
extentions: {...book.extensions, risu_case_sensitive: book.case_sensitive},
activationPercent: book.extensions?.risu_activationPercent
})
}
@@ -450,18 +451,26 @@ export async function exportSpecV2(char:character) {
let charBook:charBookEntry[] = []
for(const lore of char.globalLore){
let ext:{
risu_case_sensitive?: boolean;
risu_activationPercent?: number
} = cloneDeep(lore.extentions ?? {})
let caseSensitive = ext.risu_case_sensitive ?? false
ext.risu_activationPercent = lore.activationPercent
charBook.push({
keys: lore.key.split(',').map(r => r.trim()),
secondary_keys: lore.selective ? lore.secondkey.split(',').map(r => r.trim()) : undefined,
content: lore.content,
extensions: lore.extentions ?? {},
extensions: ext,
enabled: true,
insertion_order: lore.insertorder,
constant: lore.alwaysActive,
selective:lore.selective,
name: lore.comment,
comment: lore.comment,
case_sensitive: lore.extentions?.risu_case_sensitive
case_sensitive: caseSensitive,
})
}

View File

@@ -2,7 +2,7 @@ import { get } from "svelte/store";
import {selectedCharID} from '../stores'
import { DataBase, setDatabase, type loreBook } from "../storage/database";
import { tokenize } from "../tokenizer";
import { selectSingleFile } from "../util";
import { checkNullish, selectSingleFile } from "../util";
import { alertError, alertNormal } from "../alert";
import { language } from "../../lang";
import { downloadFile } from "../storage/globalApi";
@@ -80,6 +80,16 @@ export async function loadLoreBookPrompt(){
for (const lore of fullLore){
if(lore){
if(lore.key.length > 1 || lore.alwaysActive){
if(!checkNullish(lore.activationPercent)){
let activationPercent = lore.activationPercent
if(isNaN(activationPercent) || !activationPercent || activationPercent < 0){
activationPercent = 0
}
if(activationPercent < (Math.random() * 100)){
continue
}
}
formatedLore.push({
keys: lore.alwaysActive ? 'always' : (lore.key ?? '').replace(rmRegex, '').toLocaleLowerCase().split(',').filter((a) => {
return a.length > 1

View File

@@ -8,7 +8,7 @@ import { defaultAutoSuggestPrompt, defaultJailbreak, defaultMainPrompt } from '.
export const DataBase = writable({} as any as Database)
export const loadedStore = writable(false)
export let appVer = '1.22.1'
export let appVer = '1.22.2'
export function setDatabase(data:Database){
if(checkNullish(data.characters)){
@@ -283,6 +283,7 @@ export interface loreBook{
extentions?:{
risu_case_sensitive:boolean
}
activationPercent?:number
}
export interface character{