Update to 0.7.9 (#33)
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
},
|
},
|
||||||
"package": {
|
"package": {
|
||||||
"productName": "RisuAI",
|
"productName": "RisuAI",
|
||||||
"version": "0.7.8"
|
"version": "0.7.9"
|
||||||
},
|
},
|
||||||
"tauri": {
|
"tauri": {
|
||||||
"allowlist": {
|
"allowlist": {
|
||||||
|
|||||||
@@ -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)){
|
if((da.char_name || da.name) && (da.char_persona || da.description) && (da.char_greeting || da.first_mes)){
|
||||||
let db = get(DataBase)
|
let db = get(DataBase)
|
||||||
db.characters.push({
|
db.characters.push(convertOldTavernAndJSON(da))
|
||||||
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: ''
|
|
||||||
})
|
|
||||||
DataBase.set(db)
|
DataBase.set(db)
|
||||||
alertNormal(language.importedCharacter)
|
alertNormal(language.importedCharacter)
|
||||||
return
|
return
|
||||||
@@ -83,7 +61,6 @@ export async function importCharacter() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let char:character = va.data
|
let char:character = va.data
|
||||||
let db = get(DataBase)
|
let db = get(DataBase)
|
||||||
if(char.emotionImages && char.emotionImages.length > 0){
|
if(char.emotionImages && char.emotionImages.length > 0){
|
||||||
@@ -118,38 +95,12 @@ export async function importCharacter() {
|
|||||||
}
|
}
|
||||||
else if(readed.chara){
|
else if(readed.chara){
|
||||||
const charaData:OldTavernChar = JSON.parse(Buffer.from(readed.chara, 'base64').toString('utf-8'))
|
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))
|
||||||
const imgp = await saveImage(PngMetadata.filter(img))
|
let db = get(DataBase)
|
||||||
let db = get(DataBase)
|
db.characters.push(convertOldTavernAndJSON(charaData, imgp))
|
||||||
db.characters.push({
|
DataBase.set(db)
|
||||||
name: charaData.name,
|
alertNormal(language.importedCharacter)
|
||||||
firstMessage: charaData.first_mes,
|
return db.characters.length - 1
|
||||||
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
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
alertError(language.errors.noData)
|
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) {
|
export async function exportChar(charaID:number) {
|
||||||
const db = get(DataBase)
|
const db = get(DataBase)
|
||||||
@@ -313,7 +346,7 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array):Promise<boole
|
|||||||
|
|
||||||
setDatabase(db)
|
setDatabase(db)
|
||||||
|
|
||||||
|
alertNormal(language.importedCharacter)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -357,7 +390,7 @@ interface OldTavernChar{
|
|||||||
create_date: string
|
create_date: string
|
||||||
description: string
|
description: string
|
||||||
first_mes: string
|
first_mes: string
|
||||||
mes_example: "<START>"
|
mes_example: string
|
||||||
name: string
|
name: string
|
||||||
personality: ""
|
personality: ""
|
||||||
scenario: ""
|
scenario: ""
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { cloneDeep } from 'lodash';
|
|||||||
|
|
||||||
export const DataBase = writable({} as any as Database)
|
export const DataBase = writable({} as any as Database)
|
||||||
export const loadedStore = writable(false)
|
export const loadedStore = writable(false)
|
||||||
export let appVer = '0.7.8'
|
export let appVer = '0.7.9'
|
||||||
|
|
||||||
|
|
||||||
export function setDatabase(data:Database){
|
export function setDatabase(data:Database){
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import { loadPlugins } from "./process/plugins";
|
|||||||
import { alertError, alertStore } from "./alert";
|
import { alertError, alertStore } from "./alert";
|
||||||
import { checkDriverInit } from "./drive/drive";
|
import { checkDriverInit } from "./drive/drive";
|
||||||
import { hasher } from "./parser";
|
import { hasher } from "./parser";
|
||||||
|
import { characterHubImport } from "./characterCards";
|
||||||
|
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
export const isTauri = !!window.__TAURI__
|
export const isTauri = !!window.__TAURI__
|
||||||
@@ -266,6 +267,9 @@ export async function loadData() {
|
|||||||
usingSw = false
|
usingSw = false
|
||||||
}
|
}
|
||||||
checkOldDomain()
|
checkOldDomain()
|
||||||
|
if(get(DataBase).didFirstSetup){
|
||||||
|
characterHubImport()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await pargeChunks()
|
await pargeChunks()
|
||||||
|
|||||||
@@ -112,6 +112,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
let bodyTemplate:any
|
let bodyTemplate:any
|
||||||
const proompt = stringlizeChat(formated, currentChar.name)
|
const proompt = stringlizeChat(formated, currentChar.name)
|
||||||
const isNewAPI = DURL.includes('api')
|
const isNewAPI = DURL.includes('api')
|
||||||
|
const stopStrings = [`\nUser:`,`\nuser:`,`\n${db.username}:`]
|
||||||
|
|
||||||
if(isNewAPI){
|
if(isNewAPI){
|
||||||
bodyTemplate = {
|
bodyTemplate = {
|
||||||
'max_new_tokens': 80,
|
'max_new_tokens': 80,
|
||||||
@@ -119,7 +121,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
'temperature': (db.temperature / 100),
|
'temperature': (db.temperature / 100),
|
||||||
'top_p': 0.9,
|
'top_p': 0.9,
|
||||||
'typical_p': 1,
|
'typical_p': 1,
|
||||||
'repetition_penalty': (db.PresensePenalty / 100),
|
'repetition_penalty': db.PresensePenalty < 85 ? 0.85 : (db.PresensePenalty / 100),
|
||||||
'encoder_repetition_penalty': 1,
|
'encoder_repetition_penalty': 1,
|
||||||
'top_k': 100,
|
'top_k': 100,
|
||||||
'min_length': 0,
|
'min_length': 0,
|
||||||
@@ -130,7 +132,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
'early_stopping': false,
|
'early_stopping': false,
|
||||||
'truncation_length': maxTokens,
|
'truncation_length': maxTokens,
|
||||||
'ban_eos_token': false,
|
'ban_eos_token': false,
|
||||||
'custom_stopping_strings': [`\nUser:`,`\nuser:`],
|
'stopping_strings': stopStrings,
|
||||||
'seed': -1,
|
'seed': -1,
|
||||||
add_bos_token: true,
|
add_bos_token: true,
|
||||||
prompt: proompt
|
prompt: proompt
|
||||||
@@ -145,7 +147,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
'temperature': (db.temperature / 100),
|
'temperature': (db.temperature / 100),
|
||||||
'top_p': 0.9,
|
'top_p': 0.9,
|
||||||
'typical_p': 1,
|
'typical_p': 1,
|
||||||
'repetition_penalty': (db.PresensePenalty / 100),
|
'repetition_penalty': db.PresensePenalty < 85 ? 0.85 : (db.PresensePenalty / 100),
|
||||||
'encoder_repetition_penalty': 1,
|
'encoder_repetition_penalty': 1,
|
||||||
'top_k': 100,
|
'top_k': 100,
|
||||||
'min_length': 0,
|
'min_length': 0,
|
||||||
@@ -156,7 +158,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
'early_stopping': false,
|
'early_stopping': false,
|
||||||
'truncation_length': maxTokens,
|
'truncation_length': maxTokens,
|
||||||
'ban_eos_token': false,
|
'ban_eos_token': false,
|
||||||
'custom_stopping_strings': [`\nUser:`,`\nuser:`],
|
'custom_stopping_strings': stopStrings,
|
||||||
'seed': -1,
|
'seed': -1,
|
||||||
add_bos_token: true,
|
add_bos_token: true,
|
||||||
}
|
}
|
||||||
@@ -175,15 +177,17 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
console.log(res.data)
|
console.log(res.data)
|
||||||
if(res.ok){
|
if(res.ok){
|
||||||
try {
|
try {
|
||||||
if(isNewAPI){
|
let result:string = isNewAPI ? dat.results[0].text : dat.data[0].substring(proompt.length)
|
||||||
return {
|
|
||||||
type: 'success',
|
for(const stopStr of stopStrings){
|
||||||
result: dat.results[0].text.substring(proompt.length)
|
if(result.endsWith(stopStr)){
|
||||||
|
result.substring(0,result.length - stopStr.length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: 'success',
|
type: 'success',
|
||||||
result: dat.data[0].substring(proompt.length)
|
result: result
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":"0.7.8"}
|
{"version":"0.7.9"}
|
||||||
|
|||||||
Reference in New Issue
Block a user