Update to 0.7.9 (#33)

This commit is contained in:
kwaroran
2023-05-10 20:34:17 +09:00
committed by GitHub
6 changed files with 111 additions and 70 deletions

View File

@@ -8,7 +8,7 @@
},
"package": {
"productName": "RisuAI",
"version": "0.7.8"
"version": "0.7.9"
},
"tauri": {
"allowlist": {

View File

@@ -27,29 +27,7 @@ export async function importCharacter() {
}
if((da.char_name || da.name) && (da.char_persona || da.description) && (da.char_greeting || da.first_mes)){
let db = get(DataBase)
db.characters.push({
name: da.char_name ?? da.name,
firstMessage: da.char_greeting ?? da.first_mes,
desc: da.char_persona ?? da.description,
notes: '',
chats: [{
message: [],
note: '',
name: 'Chat 1',
localLore: []
}],
chatPage: 0,
image: '',
emotionImages: [],
bias: [],
globalLore: [],
viewScreen: 'none',
chaId: uuidv4(),
sdData: defaultSdDataFunc(),
utilityBot: false,
customscript: [],
exampleMessage: ''
})
db.characters.push(convertOldTavernAndJSON(da))
DataBase.set(db)
alertNormal(language.importedCharacter)
return
@@ -83,7 +61,6 @@ export async function importCharacter() {
return
}
let char:character = va.data
let db = get(DataBase)
if(char.emotionImages && char.emotionImages.length > 0){
@@ -118,38 +95,12 @@ export async function importCharacter() {
}
else if(readed.chara){
const charaData:OldTavernChar = JSON.parse(Buffer.from(readed.chara, 'base64').toString('utf-8'))
if(charaData.first_mes && charaData.name && charaData.description){
const imgp = await saveImage(PngMetadata.filter(img))
let db = get(DataBase)
db.characters.push({
name: charaData.name,
firstMessage: charaData.first_mes,
desc: charaData.description,
notes: '',
chats: [{
message: [],
note: '',
name: 'Chat 1',
localLore: []
}],
chatPage: 0,
image: imgp,
emotionImages: [],
bias: [],
globalLore: [],
viewScreen: 'none',
chaId: uuidv4(),
sdData: defaultSdDataFunc(),
utilityBot: false,
customscript: [],
exampleMessage: ''
})
DataBase.set(db)
alertNormal(language.importedCharacter)
return db.characters.length - 1
}
alertError(language.errors.noData)
return null
const imgp = await saveImage(PngMetadata.filter(img))
let db = get(DataBase)
db.characters.push(convertOldTavernAndJSON(charaData, imgp))
DataBase.set(db)
alertNormal(language.importedCharacter)
return db.characters.length - 1
}
else{
alertError(language.errors.noData)
@@ -161,6 +112,88 @@ export async function importCharacter() {
}
}
export async function characterHubImport() {
const charPath = (new URLSearchParams(location.search)).get('charahub')
try {
if(charPath){
const url = new URL(location.href);
url.searchParams.delete('charahub');
window.history.pushState(null, '', url.toString());
const chara = await fetch("https://api.characterhub.org/api/characters/download", {
method: "POST",
body: JSON.stringify({
"format": "tavern",
"fullPath": charPath,
"version": "main"
}),
headers: {
"content-type": "application/json"
}
})
const img = new Uint8Array(await chara.arrayBuffer())
const readed = (await exifr.parse(img, true))
{
const charaData:CharacterCardV2 = JSON.parse(Buffer.from(readed.chara, 'base64').toString('utf-8'))
if(await importSpecv2(charaData, img)){
return
}
}
{
const imgp = await saveImage(PngMetadata.filter(img))
let db = get(DataBase)
const charaData:OldTavernChar = JSON.parse(Buffer.from(readed.chara, 'base64').toString('utf-8'))
db.characters.push(convertOldTavernAndJSON(charaData, imgp))
DataBase.set(db)
alertNormal(language.importedCharacter)
return
}
}
} catch (error) {
alertError(language.errors.noData)
return null
}
}
function convertOldTavernAndJSON(charaData:OldTavernChar, imgp:string|undefined = undefined):character{
let desc = charaData.description ?? ''
if(charaData.personality){
desc += '\n\n' + charaData.personality
}
if(charaData.scenario){
desc += '\n\n' + charaData.scenario
}
return {
name: charaData.name ?? 'unknown name',
firstMessage: charaData.first_mes ?? 'unknown first message',
desc: desc,
notes: '',
chats: [{
message: [],
note: '',
name: 'Chat 1',
localLore: []
}],
chatPage: 0,
image: imgp,
emotionImages: [],
bias: [],
globalLore: [],
viewScreen: 'none',
chaId: uuidv4(),
sdData: defaultSdDataFunc(),
utilityBot: false,
customscript: [],
exampleMessage: charaData.mes_example
}
}
export async function exportChar(charaID:number) {
const db = get(DataBase)
@@ -313,7 +346,7 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array):Promise<boole
setDatabase(db)
alertNormal(language.importedCharacter)
return true
}
@@ -357,7 +390,7 @@ interface OldTavernChar{
create_date: string
description: string
first_mes: string
mes_example: "<START>"
mes_example: string
name: string
personality: ""
scenario: ""

View File

@@ -7,7 +7,7 @@ import { cloneDeep } from 'lodash';
export const DataBase = writable({} as any as Database)
export const loadedStore = writable(false)
export let appVer = '0.7.8'
export let appVer = '0.7.9'
export function setDatabase(data:Database){

View File

@@ -15,6 +15,7 @@ import { loadPlugins } from "./process/plugins";
import { alertError, alertStore } from "./alert";
import { checkDriverInit } from "./drive/drive";
import { hasher } from "./parser";
import { characterHubImport } from "./characterCards";
//@ts-ignore
export const isTauri = !!window.__TAURI__
@@ -266,6 +267,9 @@ export async function loadData() {
usingSw = false
}
checkOldDomain()
if(get(DataBase).didFirstSetup){
characterHubImport()
}
}
try {
await pargeChunks()

View File

@@ -112,6 +112,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
let bodyTemplate:any
const proompt = stringlizeChat(formated, currentChar.name)
const isNewAPI = DURL.includes('api')
const stopStrings = [`\nUser:`,`\nuser:`,`\n${db.username}:`]
if(isNewAPI){
bodyTemplate = {
'max_new_tokens': 80,
@@ -119,7 +121,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
'temperature': (db.temperature / 100),
'top_p': 0.9,
'typical_p': 1,
'repetition_penalty': (db.PresensePenalty / 100),
'repetition_penalty': db.PresensePenalty < 85 ? 0.85 : (db.PresensePenalty / 100),
'encoder_repetition_penalty': 1,
'top_k': 100,
'min_length': 0,
@@ -130,7 +132,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
'early_stopping': false,
'truncation_length': maxTokens,
'ban_eos_token': false,
'custom_stopping_strings': [`\nUser:`,`\nuser:`],
'stopping_strings': stopStrings,
'seed': -1,
add_bos_token: true,
prompt: proompt
@@ -145,7 +147,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
'temperature': (db.temperature / 100),
'top_p': 0.9,
'typical_p': 1,
'repetition_penalty': (db.PresensePenalty / 100),
'repetition_penalty': db.PresensePenalty < 85 ? 0.85 : (db.PresensePenalty / 100),
'encoder_repetition_penalty': 1,
'top_k': 100,
'min_length': 0,
@@ -156,7 +158,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
'early_stopping': false,
'truncation_length': maxTokens,
'ban_eos_token': false,
'custom_stopping_strings': [`\nUser:`,`\nuser:`],
'custom_stopping_strings': stopStrings,
'seed': -1,
add_bos_token: true,
}
@@ -175,15 +177,17 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
console.log(res.data)
if(res.ok){
try {
if(isNewAPI){
return {
type: 'success',
result: dat.results[0].text.substring(proompt.length)
let result:string = isNewAPI ? dat.results[0].text : dat.data[0].substring(proompt.length)
for(const stopStr of stopStrings){
if(result.endsWith(stopStr)){
result.substring(0,result.length - stopStr.length)
}
}
return {
type: 'success',
result: dat.data[0].substring(proompt.length)
result: result
}
} catch (error) {
return {

View File

@@ -1 +1 @@
{"version":"0.7.8"}
{"version":"0.7.9"}