Refactor character card processing by consolidating logic into convertCharbook function

This commit is contained in:
kwaroran
2024-11-30 01:30:06 +09:00
parent b6ee2928dd
commit 7bad240d85

View File

@@ -494,36 +494,16 @@ function convertOffSpecCards(charaData:OldTavernChar|CharacterCardV2Risu, imgp:s
let loresettings:undefined|loreSettings = undefined let loresettings:undefined|loreSettings = undefined
let loreExt:undefined|any = undefined let loreExt:undefined|any = undefined
if(charbook){ if(charbook){
if((!checkNullish(charbook.recursive_scanning)) && const a = convertCharbook({
(!checkNullish(charbook.scan_depth)) && lorebook,
(!checkNullish(charbook.token_budget))){ charbook,
loresettings = { loresettings,
tokenBudget:charbook.token_budget, loreExt
scanDepth:charbook.scan_depth,
recursiveScanning: charbook.recursive_scanning,
fullWordMatching: charbook?.extensions?.risu_fullWordMatching ?? false,
}
}
loreExt = charbook.extensions
for(const book of charbook.entries){
lorebook.push({
key: book.keys.join(', '),
secondkey: book.secondary_keys?.join(', ') ?? '',
insertorder: book.insertion_order,
comment: book.name ?? book.comment ?? "",
content: book.content,
mode: "normal",
alwaysActive: book.constant ?? false,
selective: book.selective ?? false,
extentions: {...book.extensions, risu_case_sensitive: book.case_sensitive},
activationPercent: book.extensions?.risu_activationPercent,
loreCache: book.extensions?.risu_loreCache ?? null,
//@ts-ignore
useRegex: book.use_regex ?? false
}) })
}
lorebook = a.lorebook
loresettings = a.loresettings
loreExt = a.loreExt
} }
return { return {
@@ -794,6 +774,116 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3,
let loresettings:undefined|loreSettings = undefined let loresettings:undefined|loreSettings = undefined
let loreExt:undefined|any = undefined let loreExt:undefined|any = undefined
if(charbook){ if(charbook){
const a = convertCharbook({
lorebook,
charbook,
loresettings,
loreExt
})
lorebook = a.lorebook
loresettings = a.loresettings
loreExt = a.loreExt
}
let ext = safeStructuredClone(data?.extensions ?? {})
for(const key in ext){
if(key === 'risuai'){
delete ext[key]
}
if(key === 'depth_prompt'){
delete ext[key]
}
}
let char:character = {
name: data.name ?? '',
firstMessage: data.first_mes ?? '',
desc: data.description ?? '',
notes: '',
chats: [{
message: [],
note: '',
name: 'Chat 1',
localLore: []
}],
chatPage: 0,
image: im,
emotionImages: emotions,
bias: bias,
globalLore: lorebook, //lorebook
viewScreen: viewScreen,
chaId: uuidv4(),
sdData: sdData,
utilityBot: utilityBot,
customscript: customScripts,
exampleMessage: data.mes_example ?? '',
creatorNotes:data.creator_notes ?? '',
systemPrompt:data.system_prompt ?? '',
postHistoryInstructions:'',
alternateGreetings:data.alternate_greetings ?? [],
tags:data.tags ?? [],
creator:data.creator ?? '',
characterVersion: `${data.character_version}` || '',
personality:data.personality ?? '',
scenario:data.scenario ?? '',
firstMsgIndex: -1,
removedQuotes: false,
loreSettings: loresettings,
loreExt: loreExt,
additionalData: {
tag: data.tags ?? [],
creator: data.creator,
character_version: data.character_version
},
additionalAssets: extAssets,
replaceGlobalNote: data.post_history_instructions ?? '',
backgroundHTML: data?.extensions?.risuai?.backgroundHTML,
license: data?.extensions?.risuai?.license,
triggerscript: data?.extensions?.risuai?.triggerscript ?? [],
private: data?.extensions?.risuai?.private ?? false,
additionalText: data?.extensions?.risuai?.additionalText ?? '',
virtualscript: '', //removed dude to security issue
extentions: ext ?? {},
largePortrait: data?.extensions?.risuai?.largePortrait ?? (!data?.extensions?.risuai),
lorePlus: data?.extensions?.risuai?.lorePlus ?? false,
inlayViewScreen: data?.extensions?.risuai?.inlayViewScreen ?? false,
newGenData: data?.extensions?.risuai?.newGenData ?? undefined,
vits: vits,
ttsMode: vits ? 'vits' : 'normal',
imported: true,
source: card?.data?.extensions?.risuai?.source ?? [],
ccAssets: ccAssets,
lowLevelAccess: risuext?.lowLevelAccess ?? false,
defaultVariables: data?.extensions?.risuai?.defaultVariables ?? '',
}
if(card.spec === 'chara_card_v3'){
char.group_only_greetings = card.data.group_only_greetings ?? []
char.nickname = card.data.nickname ?? ''
char.source = card.data.source ?? card.data?.extensions?.risuai?.source ?? []
char.creation_date = card.data.creation_date ?? 0
char.modification_date = card.data.modification_date ?? 0
}
db.characters.push(char)
setDatabase(db)
alertNormal(language.importedCharacter)
return true
}
function convertCharbook(arg:{
lorebook:loreBook[]
charbook:CharacterBook
loresettings:loreSettings
loreExt:any
}){
let {lorebook, loresettings, loreExt, charbook} = arg
if((!checkNullish(charbook.recursive_scanning)) && if((!checkNullish(charbook.recursive_scanning)) &&
(!checkNullish(charbook.scan_depth)) && (!checkNullish(charbook.scan_depth)) &&
(!checkNullish(charbook.token_budget))){ (!checkNullish(charbook.token_budget))){
@@ -887,97 +977,11 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3,
}) })
} }
return {
lorebook,
loresettings,
loreExt
} }
let ext = safeStructuredClone(data?.extensions ?? {})
for(const key in ext){
if(key === 'risuai'){
delete ext[key]
}
if(key === 'depth_prompt'){
delete ext[key]
}
}
let char:character = {
name: data.name ?? '',
firstMessage: data.first_mes ?? '',
desc: data.description ?? '',
notes: '',
chats: [{
message: [],
note: '',
name: 'Chat 1',
localLore: []
}],
chatPage: 0,
image: im,
emotionImages: emotions,
bias: bias,
globalLore: lorebook, //lorebook
viewScreen: viewScreen,
chaId: uuidv4(),
sdData: sdData,
utilityBot: utilityBot,
customscript: customScripts,
exampleMessage: data.mes_example ?? '',
creatorNotes:data.creator_notes ?? '',
systemPrompt:data.system_prompt ?? '',
postHistoryInstructions:'',
alternateGreetings:data.alternate_greetings ?? [],
tags:data.tags ?? [],
creator:data.creator ?? '',
characterVersion: `${data.character_version}` || '',
personality:data.personality ?? '',
scenario:data.scenario ?? '',
firstMsgIndex: -1,
removedQuotes: false,
loreSettings: loresettings,
loreExt: loreExt,
additionalData: {
tag: data.tags ?? [],
creator: data.creator,
character_version: data.character_version
},
additionalAssets: extAssets,
replaceGlobalNote: data.post_history_instructions ?? '',
backgroundHTML: data?.extensions?.risuai?.backgroundHTML,
license: data?.extensions?.risuai?.license,
triggerscript: data?.extensions?.risuai?.triggerscript ?? [],
private: data?.extensions?.risuai?.private ?? false,
additionalText: data?.extensions?.risuai?.additionalText ?? '',
virtualscript: '', //removed dude to security issue
extentions: ext ?? {},
largePortrait: data?.extensions?.risuai?.largePortrait ?? (!data?.extensions?.risuai),
lorePlus: data?.extensions?.risuai?.lorePlus ?? false,
inlayViewScreen: data?.extensions?.risuai?.inlayViewScreen ?? false,
newGenData: data?.extensions?.risuai?.newGenData ?? undefined,
vits: vits,
ttsMode: vits ? 'vits' : 'normal',
imported: true,
source: card?.data?.extensions?.risuai?.source ?? [],
ccAssets: ccAssets,
lowLevelAccess: risuext?.lowLevelAccess ?? false,
defaultVariables: data?.extensions?.risuai?.defaultVariables ?? '',
}
if(card.spec === 'chara_card_v3'){
char.group_only_greetings = card.data.group_only_greetings ?? []
char.nickname = card.data.nickname ?? ''
char.source = card.data.source ?? card.data?.extensions?.risuai?.source ?? []
char.creation_date = card.data.creation_date ?? 0
char.modification_date = card.data.modification_date ?? 0
}
db.characters.push(char)
setDatabase(db)
alertNormal(language.importedCharacter)
return true
} }