Update version, gemini models, and new progress dialoge, and charxjpeg

This commit is contained in:
Kwaroran
2025-02-06 09:48:55 +09:00
parent 0242fd27cc
commit 1b171cab66
18 changed files with 231 additions and 82 deletions

View File

@@ -91,6 +91,7 @@
"devDependencies": { "devDependencies": {
"@capacitor/assets": "^3.0.4", "@capacitor/assets": "^3.0.4",
"@capacitor/cli": "^5.6.0", "@capacitor/cli": "^5.6.0",
"@rollup/plugin-strip": "^3.0.4",
"@sveltejs/vite-plugin-svelte": "^4.0.0", "@sveltejs/vite-plugin-svelte": "^4.0.0",
"@swc/core": "1.5.7", "@swc/core": "1.5.7",
"@tailwindcss/typography": "^0.5.10", "@tailwindcss/typography": "^0.5.10",

58
pnpm-lock.yaml generated
View File

@@ -228,6 +228,9 @@ importers:
'@capacitor/cli': '@capacitor/cli':
specifier: ^5.6.0 specifier: ^5.6.0
version: 5.6.0 version: 5.6.0
'@rollup/plugin-strip':
specifier: ^3.0.4
version: 3.0.4(rollup@3.29.4)
'@sveltejs/vite-plugin-svelte': '@sveltejs/vite-plugin-svelte':
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0(svelte@5.1.9)(vite@5.4.9(@types/node@18.19.7)) version: 4.0.0(svelte@5.1.9)(vite@5.4.9(@types/node@18.19.7))
@@ -299,7 +302,7 @@ importers:
version: 5.1.9 version: 5.1.9
svelte-check: svelte-check:
specifier: ^4.0.5 specifier: ^4.0.5
version: 4.0.5(svelte@5.1.9)(typescript@5.6.3) version: 4.0.5(picomatch@4.0.2)(svelte@5.1.9)(typescript@5.6.3)
svelte-preprocess: svelte-preprocess:
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.3(postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@18.19.7)(typescript@5.6.3)))(postcss@8.4.33)(svelte@5.1.9)(typescript@5.6.3) version: 6.0.3(postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@18.19.7)(typescript@5.6.3)))(postcss@8.4.33)(svelte@5.1.9)(typescript@5.6.3)
@@ -869,6 +872,15 @@ packages:
'@risuai/ccardlib@0.4.1': '@risuai/ccardlib@0.4.1':
resolution: {integrity: sha512-b9xL0umf772icKnKfTIyP/hU1Skfikd5/MbmUFI9PXpbpMxbGQMw0NqpTFHda2iFu6Qxhpigr8bheAE8zxoYnw==} resolution: {integrity: sha512-b9xL0umf772icKnKfTIyP/hU1Skfikd5/MbmUFI9PXpbpMxbGQMw0NqpTFHda2iFu6Qxhpigr8bheAE8zxoYnw==}
'@rollup/plugin-strip@3.0.4':
resolution: {integrity: sha512-LDRV49ZaavxUo2YoKKMQjCxzCxugu1rCPQa0lDYBOWLj6vtzBMr8DcoJjsmg+s450RbKbe3qI9ZLaSO+O1oNbg==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/plugin-virtual@3.0.2': '@rollup/plugin-virtual@3.0.2':
resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@@ -878,6 +890,15 @@ packages:
rollup: rollup:
optional: true optional: true
'@rollup/pluginutils@5.1.4':
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.24.0': '@rollup/rollup-android-arm-eabi@4.24.0':
resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==}
cpu: [arm] cpu: [arm]
@@ -2004,6 +2025,9 @@ packages:
esrap@1.2.2: esrap@1.2.2:
resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==}
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
etag@1.8.1: etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
@@ -3019,6 +3043,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
picomatch@4.0.2:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
pify@2.3.0: pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -4549,10 +4577,26 @@ snapshots:
'@risuai/ccardlib@0.4.1': {} '@risuai/ccardlib@0.4.1': {}
'@rollup/plugin-strip@3.0.4(rollup@3.29.4)':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@3.29.4)
estree-walker: 2.0.2
magic-string: 0.30.12
optionalDependencies:
rollup: 3.29.4
'@rollup/plugin-virtual@3.0.2(rollup@3.29.4)': '@rollup/plugin-virtual@3.0.2(rollup@3.29.4)':
optionalDependencies: optionalDependencies:
rollup: 3.29.4 rollup: 3.29.4
'@rollup/pluginutils@5.1.4(rollup@3.29.4)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
rollup: 3.29.4
'@rollup/rollup-android-arm-eabi@4.24.0': '@rollup/rollup-android-arm-eabi@4.24.0':
optional: true optional: true
@@ -5695,6 +5739,8 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
'@types/estree': 1.0.6 '@types/estree': 1.0.6
estree-walker@2.0.2: {}
etag@1.8.1: {} etag@1.8.1: {}
eventemitter3@4.0.7: {} eventemitter3@4.0.7: {}
@@ -5771,7 +5817,9 @@ snapshots:
dependencies: dependencies:
pend: 1.2.0 pend: 1.2.0
fdir@6.4.2: {} fdir@6.4.2(picomatch@4.0.2):
optionalDependencies:
picomatch: 4.0.2
fflate@0.6.10: {} fflate@0.6.10: {}
@@ -6752,6 +6800,8 @@ snapshots:
picomatch@2.3.1: {} picomatch@2.3.1: {}
picomatch@4.0.2: {}
pify@2.3.0: {} pify@2.3.0: {}
pify@3.0.0: {} pify@3.0.0: {}
@@ -7325,11 +7375,11 @@ snapshots:
dependencies: dependencies:
svelte: 5.1.9 svelte: 5.1.9
svelte-check@4.0.5(svelte@5.1.9)(typescript@5.6.3): svelte-check@4.0.5(picomatch@4.0.2)(svelte@5.1.9)(typescript@5.6.3):
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
chokidar: 4.0.1 chokidar: 4.0.1
fdir: 6.4.2 fdir: 6.4.2(picomatch@4.0.2)
picocolors: 1.0.1 picocolors: 1.0.1
sade: 1.8.1 sade: 1.8.1
svelte: 5.1.9 svelte: 5.1.9

View File

@@ -29,7 +29,7 @@
}, },
"productName": "RisuAI", "productName": "RisuAI",
"mainBinaryName": "RisuAI", "mainBinaryName": "RisuAI",
"version": "149.0.0", "version": "149.1.0",
"identifier": "co.aiclient.risu", "identifier": "co.aiclient.risu",
"plugins": { "plugins": {
"updater": { "updater": {

View File

@@ -18,7 +18,6 @@
import MobileFooter from './lib/Mobile/MobileFooter.svelte'; import MobileFooter from './lib/Mobile/MobileFooter.svelte';
import CustomGUISettingMenu from './lib/Setting/Pages/CustomGUISettingMenu.svelte'; import CustomGUISettingMenu from './lib/Setting/Pages/CustomGUISettingMenu.svelte';
import { checkCharOrder } from './ts/globalApi.svelte'; import { checkCharOrder } from './ts/globalApi.svelte';
import Googli from './lib/UI/Googli.svelte';
let didFirstSetup: boolean = $derived(DBState.db?.didFirstSetup) let didFirstSetup: boolean = $derived(DBState.db?.didFirstSetup)
@@ -51,9 +50,6 @@
</div> </div>
<span class="text-sm mt-2 text-textcolor2">{LoadingStatusState.text}</span> <span class="text-sm mt-2 text-textcolor2">{LoadingStatusState.text}</span>
<Googli className="mt-4" />
</div> </div>
{:else if $CustomGUISettingMenuStore} {:else if $CustomGUISettingMenuStore}
<CustomGUISettingMenu /> <CustomGUISettingMenu />

View File

@@ -25,6 +25,7 @@
import { getCurrentCharacter } from "src/ts/storage/database.svelte"; import { getCurrentCharacter } from "src/ts/storage/database.svelte";
import { message } from "@tauri-apps/plugin-dialog"; import { message } from "@tauri-apps/plugin-dialog";
import HypaV3Modal from './HypaV3Modal.svelte'; import HypaV3Modal from './HypaV3Modal.svelte';
import Googli from "../UI/Googli.svelte";
let btn let btn
let input = $state('') let input = $state('')
let cardExportType = $state('realm') let cardExportType = $state('realm')
@@ -107,10 +108,22 @@
}}>Terms of Service</a> to continue</div> }}>Terms of Service</a> to continue</div>
{:else if $alertStore.type !== 'select' && $alertStore.type !== 'requestdata' && $alertStore.type !== 'addchar' && $alertStore.type !== 'hypaV2' && $alertStore.type !== 'chatOptions'} {:else if $alertStore.type !== 'select' && $alertStore.type !== 'requestdata' && $alertStore.type !== 'addchar' && $alertStore.type !== 'hypaV2' && $alertStore.type !== 'chatOptions'}
<span class="text-gray-300">{$alertStore.msg}</span> <span class="text-gray-300">{$alertStore.msg}</span>
{#if $alertStore.submsg} {#if $alertStore.submsg && $alertStore.type !== 'progress'}
<span class="text-gray-500 text-sm">{$alertStore.submsg}</span> <span class="text-gray-500 text-sm">{$alertStore.submsg}</span>
{/if} {/if}
{/if} {/if}
{#if $alertStore.type === 'progress'}
<div class="w-full min-w-64 md:min-w-138 h-2 bg-darkbg border border-darkborderc rounded-md mt-6">
<div class="h-full bg-gradient-to-r from-blue-500 to-purple-800 saving-animation transition-[width]" style:width={$alertStore.submsg + '%'}></div>
</div>
<div class="w-full flex justify-center mt-6">
<span class="text-gray-500 text-sm">{$alertStore.submsg + '%'}</span>
</div>
<div class="w-full flex justify-center">
<Googli className="mt-14" />
</div>
{/if}
{#if $alertStore.type === 'ask'} {#if $alertStore.type === 'ask'}
<div class="flex gap-2 w-full"> <div class="flex gap-2 w-full">
<Button className="mt-4 flex-grow" onclick={() => { <Button className="mt-4 flex-grow" onclick={() => {

View File

@@ -20,23 +20,4 @@
}}> }}>
<AlertOctagon size={24} /> <AlertOctagon size={24} />
</button> </button>
{/if} {/if}
<style>
.saving-animation {
animation: saving-anime 1s infinite;
background-size: 200% auto;
}
@keyframes saving-anime {
0% {
background-position: 0 0;
}
50% {
background-position: 100% 100%;
}
100% {
background-position: 0 0;
}
}
</style>

View File

@@ -1,27 +1,43 @@
<script lang="ts"> <script lang="ts">
import { onMount } from "svelte"; import { onMount } from "svelte";
export let className: string = ""; interface Props {
className?: string;
}
let { className = $bindable() }:Props = $props();
onMount(() => { onMount(() => {
if(!import.meta.env.VITE_AD_CLIENT){ if(!import.meta.env.VITE_AD_CLIENT){
return return
} }
//@ts-ignore try{
(window.adsbygoogle = window.adsbygoogle || []).push({}); //@ts-ignore
(window.adsbygoogle = window.adsbygoogle || []).push({});
}catch{}
}); });
</script> </script>
{#if !import.meta.env.VITE_AD_CLIENT} {#if import.meta.env.VITE_AD_CLIENT}
<div {#if import.meta.env.VITE_AD_CLIENT === 'TEST'}
class={className} <div
> class={className}
<ins >
class="adsbygoogle" <div
style="display:block" class="bg-slate-500"
data-ad-client={import.meta.env.VITE_AD_CLIENT} style={window.innerWidth > 728 ? "display:block !important;width:728px;height:90px" : "display:block !important;width:300px;height:100px"}
data-ad-slot={import.meta.env.VITE_AD_SLOT} >TEST</div>
data-ad-format="auto" </div>
data-full-width-responsive="true" {:else}
></ins> <div
</div> class={className}
>
<ins
class="adsbygoogle"
style={window.innerWidth > 728 ? "display:block !important;width:728px;height:90px" : "display:block !important;width:300px;height:100px"}
data-ad-client={window.innerWidth > 728 ? import.meta.env.VITE_AD_CLIENT : import.meta.env.VITE_AD_CLIENT_MOBILE}
data-ad-slot={window.innerWidth > 728 ? import.meta.env.VITE_AD_SLOT : import.meta.env.VITE_AD_SLOT_MOBILE}
></ins>
</div>
{/if}
{/if} {/if}

View File

@@ -8,6 +8,7 @@
import RealmLicense from "./RealmLicense.svelte"; import RealmLicense from "./RealmLicense.svelte";
import MultiLangDisplay from "../GUI/MultiLangDisplay.svelte"; import MultiLangDisplay from "../GUI/MultiLangDisplay.svelte";
import { tooltip } from "src/ts/gui/tooltip"; import { tooltip } from "src/ts/gui/tooltip";
import Googli from "../Googli.svelte";
interface Props { interface Props {
openedData: hubType; openedData: hubType;
@@ -50,6 +51,7 @@
<span class="text-textcolor2" use:tooltip={language.popularityLevelDesc}> <span class="text-textcolor2" use:tooltip={language.popularityLevelDesc}>
{language.popularityLevel.replace('{}', openedData.download.toString())} {language.popularityLevel.replace('{}', openedData.download.toString())}
</span> </span>
<div class="border-l-selected border-l ml-1 mr-1"></div> <div class="border-l-selected border-l ml-1 mr-1"></div>
{#if openedData.hasEmotion} {#if openedData.hasEmotion}
<button class="text-textcolor2 hover:text-green-500 transition-colors" onclick={((e) => { <button class="text-textcolor2 hover:text-green-500 transition-colors" onclick={((e) => {
@@ -69,6 +71,9 @@
</div> </div>
</div> </div>
<Googli />
<div class="flex flex-row-reverse gap-2"> <div class="flex flex-row-reverse gap-2">
<button class="text-textcolor2 hover:text-red-500" onclick={(async (e) => { <button class="text-textcolor2 hover:text-red-500" onclick={(async (e) => {
e.stopPropagation() e.stopPropagation()

View File

@@ -272,6 +272,23 @@ html, body{
z-index: 100; z-index: 100;
} }
.saving-animation {
animation: saving-anime 1s infinite;
background-size: 200% auto;
}
@keyframes saving-anime {
0% {
background-position: 0 0;
}
50% {
background-position: 100% 100%;
}
100% {
background-position: 0 0;
}
}
.flexium{ .flexium{
display: flex; display: flex;
flex-direction: row; flex-direction: row;

View File

@@ -10,7 +10,7 @@ export interface alertData{
type: 'error'|'normal'|'none'|'ask'|'wait'|'selectChar' type: 'error'|'normal'|'none'|'ask'|'wait'|'selectChar'
|'input'|'toast'|'wait2'|'markdown'|'select'|'login' |'input'|'toast'|'wait2'|'markdown'|'select'|'login'
|'tos'|'cardexport'|'requestdata'|'addchar'|'hypaV2'|'selectModule' |'tos'|'cardexport'|'requestdata'|'addchar'|'hypaV2'|'selectModule'
|'chatOptions'|'pukmakkurit'|'branches'|'hypaV3', |'chatOptions'|'pukmakkurit'|'branches'|'hypaV3'|'progress',
msg: string, msg: string,
submsg?: string submsg?: string
} }

View File

@@ -120,6 +120,36 @@ export async function importCharacterProcess(f:{
let readedChara = '' let readedChara = ''
let readedCCv3 = '' let readedCCv3 = ''
let img:Uint8Array let img:Uint8Array
let pngChunks = 0
let readedPngChunks = 0
{
let readData:File | Uint8Array | ReadableStream<Uint8Array>
if(f.data instanceof ReadableStream){
const tee = f.data.tee()
f.data = tee[0]
readData = tee[1]
}
else{
readData = f.data
}
const prereader = PngChunk.readGenerator(readData, {
})
for await(const chunk of prereader){
if(chunk instanceof AppendableBuffer){
break
}
if(chunk.key.startsWith('chara-ext-asset_')){
pngChunks++
}
}
}
const readGenerator = PngChunk.readGenerator(f.data, { const readGenerator = PngChunk.readGenerator(f.data, {
returnTrimed: true returnTrimed: true
}) })
@@ -151,8 +181,20 @@ export async function importCharacterProcess(f:{
} }
if(chunk.key.startsWith('chara-ext-asset_')){ if(chunk.key.startsWith('chara-ext-asset_')){
const assetIndex = chunk.key.replace('chara-ext-asset_:', '').replace('chara-ext-asset_', '') const assetIndex = chunk.key.replace('chara-ext-asset_:', '').replace('chara-ext-asset_', '')
alertWait('Loading... (Reading Asset ' + assetIndex + ')' )
const assetData = Buffer.from(chunk.value, 'base64') const assetData = Buffer.from(chunk.value, 'base64')
if(pngChunks === 0){
alertWait('Loading... (Loaded ' + readedPngChunks + ' Assets)')
}
else{
alertStore.set({
type: 'progress',
msg: 'Loading... (Loading Assets)',
submsg: (readedPngChunks / pngChunks * 100).toFixed(2)
})
}
readedPngChunks++
if(db.account?.useSync && f.lightningRealmImport){ if(db.account?.useSync && f.lightningRealmImport){
const id = await hasher(assetData) const id = await hasher(assetData)
const xid = 'assets/' + id + '.png' const xid = 'assets/' + id + '.png'
@@ -656,8 +698,9 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3,
if(risuext.emotions){ if(risuext.emotions){
for(let i=0;i<risuext.emotions.length;i++){ for(let i=0;i<risuext.emotions.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Getting Emotions ${i} / ${risuext.emotions.length})` msg: `Loading... (Loading Emotions)`,
submsg: (i / risuext.emotions.length * 100).toFixed(2)
}) })
await sleep(10) await sleep(10)
if(risuext.emotions[i][1].startsWith('__asset:')){ if(risuext.emotions[i][1].startsWith('__asset:')){
@@ -676,8 +719,9 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3,
if(risuext.additionalAssets){ if(risuext.additionalAssets){
for(let i=0;i<risuext.additionalAssets.length;i++){ for(let i=0;i<risuext.additionalAssets.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Getting Assets ${i} / ${risuext.additionalAssets.length})` msg: `Loading... (Loading Assets)`,
submsg: (i / risuext.additionalAssets.length * 100).toFixed(2)
}) })
await sleep(10) await sleep(10)
let fileName = '' let fileName = ''
@@ -700,8 +744,9 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3,
const keys = Object.keys(risuext.vits) const keys = Object.keys(risuext.vits)
for(let i=0;i<keys.length;i++){ for(let i=0;i<keys.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Getting VITS ${i} / ${keys.length})` msg: `Loading... (Loading VITS)`,
submsg: (i / keys.length * 100).toFixed(2)
}) })
await sleep(10) await sleep(10)
const key = keys[i] const key = keys[i]
@@ -742,8 +787,9 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3,
if(data.assets){ if(data.assets){
for(let i=0;i<data.assets.length;i++){ for(let i=0;i<data.assets.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Getting Assets ${i} / ${data.assets.length})` msg: `Loading... (Assets)`,
submsg: (i / data.assets.length * 100).toFixed(2)
}) })
await sleep(10) await sleep(10)
let fileName = '' let fileName = ''
@@ -1164,8 +1210,9 @@ export async function exportCharacterCard(char:character, type:'png'|'json'|'cha
if(card.data.extensions.risuai.emotions && card.data.extensions.risuai.emotions.length > 0){ if(card.data.extensions.risuai.emotions && card.data.extensions.risuai.emotions.length > 0){
for(let i=0;i<card.data.extensions.risuai.emotions.length;i++){ for(let i=0;i<card.data.extensions.risuai.emotions.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Adding Emotions ${i} / ${card.data.extensions.risuai.emotions.length})` msg: 'Loading... (Adding Emotions)',
submsg: (i / card.data.extensions.risuai.emotions.length * 100).toFixed(2)
}) })
const key = card.data.extensions.risuai.emotions[i][1] const key = card.data.extensions.risuai.emotions[i][1]
const rData = await readImage(key) const rData = await readImage(key)
@@ -1180,8 +1227,9 @@ export async function exportCharacterCard(char:character, type:'png'|'json'|'cha
if(card.data.extensions.risuai.additionalAssets && card.data.extensions.risuai.additionalAssets.length > 0){ if(card.data.extensions.risuai.additionalAssets && card.data.extensions.risuai.additionalAssets.length > 0){
for(let i=0;i<card.data.extensions.risuai.additionalAssets.length;i++){ for(let i=0;i<card.data.extensions.risuai.additionalAssets.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Adding Additional Assets ${i} / ${card.data.extensions.risuai.additionalAssets.length})` msg: 'Loading... (Adding Additional Assets)',
submsg: (i / card.data.extensions.risuai.additionalAssets.length * 100).toFixed(2)
}) })
const key = card.data.extensions.risuai.additionalAssets[i][1] const key = card.data.extensions.risuai.additionalAssets[i][1]
const rData = await readImage(key) const rData = await readImage(key)
@@ -1196,8 +1244,9 @@ export async function exportCharacterCard(char:character, type:'png'|'json'|'cha
const keys = Object.keys(char.vits.files) const keys = Object.keys(char.vits.files)
for(let i=0;i<keys.length;i++){ for(let i=0;i<keys.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Adding VITS ${i} / ${keys.length})` msg: 'Loading... (Adding VITS)',
submsg: (i / keys.length * 100).toFixed(2)
}) })
const key = keys[i] const key = keys[i]
const rData = await loadAsset(char.vits.files[key]) const rData = await loadAsset(char.vits.files[key])
@@ -1226,8 +1275,9 @@ export async function exportCharacterCard(char:character, type:'png'|'json'|'cha
if(card.data.assets && card.data.assets.length > 0){ if(card.data.assets && card.data.assets.length > 0){
for(let i=0;i<card.data.assets.length;i++){ for(let i=0;i<card.data.assets.length;i++){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Adding Assets ${i} / ${card.data.assets.length})` msg: 'Loading... (Adding Assets)',
submsg: (i / card.data.assets.length * 100).toFixed(2)
}) })
let key = card.data.assets[i].uri let key = card.data.assets[i].uri
let rData:Uint8Array let rData:Uint8Array

View File

@@ -22,6 +22,7 @@ export enum LLMFlags{
deepSeekPrefix, deepSeekPrefix,
deepSeekThinkingInput, deepSeekThinkingInput,
deepSeekThinkingOutput, deepSeekThinkingOutput,
noCivilIntegrity
} }
export enum LLMProvider{ export enum LLMProvider{
@@ -874,6 +875,16 @@ export const LLMModels: LLMModel[] = [
tokenizer: LLMTokenizer.GoogleCloud, tokenizer: LLMTokenizer.GoogleCloud,
recommended: true recommended: true
}, },
{
name: "Gemini Flash Lite Preview 2.0 0205",
id: 'gemini-2.0-flash-lite-preview-02-05',
provider: LLMProvider.GoogleCloud,
format: LLMFormat.GoogleCloud,
flags: [LLMFlags.geminiBlockOff,LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole, LLMFlags.noCivilIntegrity],
parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'],
tokenizer: LLMTokenizer.GoogleCloud,
recommended: true
},
{ {
name: "Gemini Pro 2.0 Exp 0128", name: "Gemini Pro 2.0 Exp 0128",
id: 'gemini-2.0-pro-exp-01-28', id: 'gemini-2.0-pro-exp-01-28',
@@ -882,6 +893,15 @@ export const LLMModels: LLMModel[] = [
flags: [LLMFlags.geminiBlockOff,LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole], flags: [LLMFlags.geminiBlockOff,LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole],
parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'], parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'],
tokenizer: LLMTokenizer.GoogleCloud, tokenizer: LLMTokenizer.GoogleCloud,
},
{
name: "Gemini Pro 2.0 Exp",
id: 'gemini-2.0-pro-exp',
provider: LLMProvider.GoogleCloud,
format: LLMFormat.GoogleCloud,
flags: [LLMFlags.geminiBlockOff,LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole, LLMFlags.noCivilIntegrity],
parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'],
tokenizer: LLMTokenizer.GoogleCloud,
recommended: true recommended: true
}, },
{ {
@@ -900,7 +920,6 @@ export const LLMModels: LLMModel[] = [
provider: LLMProvider.GoogleCloud, provider: LLMProvider.GoogleCloud,
format: LLMFormat.GoogleCloud, format: LLMFormat.GoogleCloud,
flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.hasStreaming, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole], flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.hasStreaming, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole],
recommended: true,
parameters: ['temperature', 'top_k', 'top_p'], parameters: ['temperature', 'top_k', 'top_p'],
tokenizer: LLMTokenizer.GoogleCloud tokenizer: LLMTokenizer.GoogleCloud
}, },
@@ -910,7 +929,6 @@ export const LLMModels: LLMModel[] = [
provider: LLMProvider.GoogleCloud, provider: LLMProvider.GoogleCloud,
format: LLMFormat.GoogleCloud, format: LLMFormat.GoogleCloud,
flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole], flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole],
recommended: true,
parameters: ['temperature', 'top_k', 'top_p'], parameters: ['temperature', 'top_k', 'top_p'],
tokenizer: LLMTokenizer.GoogleCloud tokenizer: LLMTokenizer.GoogleCloud
}, },

View File

@@ -205,9 +205,10 @@ export class CharXReader{
const alertInfo = () => { const alertInfo = () => {
if(arg.alertInfo){ if(arg.alertInfo){
alertStore.set({ alertStore.set({
type: 'wait', type: 'progress',
msg: `Loading... (Getting Data: ${Math.floor(pointer / getLength() * 100)}%)` msg: `Loading...`,
submsg: (pointer / getLength() * 100).toFixed(2)
}) })
} }
} }

View File

@@ -1738,6 +1738,10 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise
} }
] ]
if(arg.modelInfo.flags.includes(LLMFlags.noCivilIntegrity)){
uncensoredCatagory.splice(4, 1)
}
if(arg.modelInfo.flags.includes(LLMFlags.geminiBlockOff)){ if(arg.modelInfo.flags.includes(LLMFlags.geminiBlockOff)){
for(let i=0;i<uncensoredCatagory.length;i++){ for(let i=0;i<uncensoredCatagory.length;i++){
uncensoredCatagory[i].threshold = "OFF" uncensoredCatagory[i].threshold = "OFF"

View File

@@ -114,7 +114,6 @@ export class AccountStorage{
} }
} }
if(da.status === 303){ if(da.status === 303){
console.log(performance.now() - perf)
const data = await da.json() const data = await da.json()
if(data.match){ if(data.match){
const c = Buffer.from(await cachedForage.getItem(key)) const c = Buffer.from(await cachedForage.getItem(key))
@@ -144,19 +143,12 @@ export class AccountStorage{
const appendable = new Uint8Array(size) const appendable = new Uint8Array(size)
const reader = da.body.getReader() const reader = da.body.getReader()
//log all headers
console.log('logging headers')
for(const [key, value] of da.headers.entries()){
console.log(key, value)
}
let i = 0 let i = 0
while(true){ while(true){
const {done, value} = await reader.read() const {done, value} = await reader.read()
if(done){ if(done){
break break
} }
console.log(value, size)
appendable.set(value, i) appendable.set(value, i)
i += value.length i += value.length
callback(i/size) callback(i/size)

View File

@@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme';
import type { PromptItem, PromptSettings } from '../process/prompt'; import type { PromptItem, PromptSettings } from '../process/prompt';
import type { OobaChatCompletionRequestParams } from '../model/ooba'; import type { OobaChatCompletionRequestParams } from '../model/ooba';
export let appVer = "149.0.0" export let appVer = "149.1.0"
export let webAppSubVer = '' export let webAppSubVer = ''

View File

@@ -1 +1 @@
{"version":"149.0.0"} {"version":"149.1.0"}

View File

@@ -4,9 +4,10 @@ import {sveltePreprocess} from "svelte-preprocess";
import wasm from "vite-plugin-wasm"; import wasm from "vite-plugin-wasm";
import { internalIpV4 } from 'internal-ip' import { internalIpV4 } from 'internal-ip'
import topLevelAwait from "vite-plugin-top-level-await"; import topLevelAwait from "vite-plugin-top-level-await";
import strip from '@rollup/plugin-strip';
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig(({command, mode}) => {
return {
plugins: [ plugins: [
svelte({ svelte({
preprocess: [ preprocess: [
@@ -22,6 +23,9 @@ export default defineConfig({
}), }),
wasm(), wasm(),
topLevelAwait(), topLevelAwait(),
command === 'build' ? strip({
include: '**/*.(mjs|js|svelte|ts)'
}) : null
], ],
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
@@ -44,7 +48,7 @@ export default defineConfig({
minify: process.env.TAURI_DEBUG ? false : 'esbuild', minify: process.env.TAURI_DEBUG ? false : 'esbuild',
// produce sourcemaps for debug builds // produce sourcemaps for debug builds
sourcemap: !!process.env.TAURI_DEBUG, sourcemap: !!process.env.TAURI_DEBUG,
chunkSizeWarningLimit: 2000 chunkSizeWarningLimit: 2000,
}, },
optimizeDeps:{ optimizeDeps:{
@@ -59,4 +63,5 @@ export default defineConfig({
'modules': '/modules' 'modules': '/modules'
} }
} }
}
}); });