From 73e98646f2c3487da90ac868edf44d96139e79f4 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 9 Dec 2024 01:06:08 +0900 Subject: [PATCH 01/27] Upgrade trimmer --- src/ts/parser.svelte.ts | 43 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index b510787e..db67685f 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -375,10 +375,14 @@ async function parseAdditionalAssets(data:string, char:simpleCharacterArgument|c } function getClosestMatch(name:string, assetPaths:{[key:string]:{path:string, ext?:string}}){ + if(Object.keys(assetPaths).length === 0){ return null } + const perf = performance.now() + + //Levenshtein distance, old with 2d array const dest = (a:string, b:string) => { let d:Int16Array[] = [] @@ -406,15 +410,52 @@ function getClosestMatch(name:string, assetPaths:{[key:string]:{path:string, ext return d[a.length][b.length]; } + //Levenshtein distance, new with 1d array + const dest2 = (a:string, b:string) => { + const h = a.length + 1 + const w = b.length + 1 + let d = new Int16Array(h * w) + for(let i=0;i Date: Mon, 9 Dec 2024 01:08:30 +0900 Subject: [PATCH 02/27] Remove debug logging from getClosestMatch function --- src/ts/parser.svelte.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index db67685f..0ca571b1 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -455,7 +455,6 @@ function getClosestMatch(name:string, assetPaths:{[key:string]:{path:string, ext closestDist = dist } } - console.table({closest, closestDist, time: performance.now() - perf, len:Object.keys(assetPaths).length}) return assetPaths[closest] } From 59ff43a4d8a4be06fdc1ba21fca6793784f0b7e7 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 9 Dec 2024 01:09:31 +0900 Subject: [PATCH 03/27] Refactor getClosestMatch function to optimize Levenshtein distance calculation --- src/ts/parser.svelte.ts | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 0ca571b1..563737fc 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -380,38 +380,8 @@ function getClosestMatch(name:string, assetPaths:{[key:string]:{path:string, ext return null } - const perf = performance.now() - - //Levenshtein distance, old with 2d array - const dest = (a:string, b:string) => { - let d:Int16Array[] = [] - - for(let i=0;i { + const dest = (a:string, b:string) => { const h = a.length + 1 const w = b.length + 1 let d = new Int16Array(h * w) @@ -449,7 +419,7 @@ function getClosestMatch(name:string, assetPaths:{[key:string]:{path:string, ext let closestDist = 999999 const trimmedName = trimmer(name) for(const key in assetPaths){ - const dist = dest2(trimmedName, trimmer(key)) + const dist = dest(trimmedName, trimmer(key)) if(dist < closestDist){ closest = key closestDist = dist From dd424d851a116122e0127d1a8bafb9fb5b70e9fd Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Tue, 10 Dec 2024 22:47:11 +0900 Subject: [PATCH 04/27] Refactor image handling in character import/export functions to remove unnecessary reencoding --- src/ts/characterCards.ts | 6 ++--- src/ts/characters.ts | 55 +--------------------------------------- 2 files changed, 4 insertions(+), 57 deletions(-) diff --git a/src/ts/characterCards.ts b/src/ts/characterCards.ts index 55f298a5..2d5b9910 100644 --- a/src/ts/characterCards.ts +++ b/src/ts/characterCards.ts @@ -277,7 +277,7 @@ export async function importCharacterProcess(f:{ if(parsed.spec !== 'chara_card_v2' && parsed.spec !== 'chara_card_v3'){ const charaData:OldTavernChar = JSON.parse(Buffer.from(readedChara, 'base64').toString('utf-8')) console.log(charaData) - const imgp = await saveAsset(await reencodeImage(img)) + const imgp = await saveAsset(img) db.characters.push(convertOffSpecCards(charaData, imgp)) setDatabaseLite(db) alertNormal(language.importedCharacter) @@ -633,7 +633,7 @@ async function importCharacterCardSpec(card:CharacterCardV2Risu|CharacterCardV3, const data = card.data console.log(card) - let im = img ? await saveAsset(await reencodeImage(img)) : undefined + let im = img ? await saveAsset(img) : undefined let db = getDatabase() const risuext = safeStructuredClone(data.extensions.risuai) @@ -1140,7 +1140,7 @@ export async function exportCharacterCard(char:character, type:'png'|'json'|'cha const spec:'v2'|'v3' = arg.spec ?? 'v2' //backward compatibility try{ char.image = '' - img = await reencodeImage(img) + img = type === 'png' ? (await reencodeImage(img)) : img const localWriter = arg.writer ?? (new LocalWriter()) if(!arg.writer && type !== 'json'){ const nameExt = { diff --git a/src/ts/characters.ts b/src/ts/characters.ts index e7601d04..8c9f2b66 100644 --- a/src/ts/characters.ts +++ b/src/ts/characters.ts @@ -2,14 +2,11 @@ import { get, writable } from "svelte/store"; import { saveImage, setDatabase, type character, type Chat, defaultSdDataFunc, type loreBook, getDatabase, getCharacterByIndex, setCharacterByIndex } from "./storage/database.svelte"; import { alertAddCharacter, alertConfirm, alertError, alertNormal, alertSelect, alertStore, alertWait } from "./alert"; import { language } from "../lang"; -import { decode as decodeMsgpack } from "msgpackr"; import { checkNullish, findCharacterbyId, getUserName, selectMultipleFile, selectSingleFile, sleep } from "./util"; import { v4 as uuidv4 } from 'uuid'; import { MobileGUIStack, OpenRealmStore, selectedCharID } from "./stores.svelte"; import { checkCharOrder, downloadFile, getFileSrc } from "./globalApi.svelte"; -import { reencodeImage } from "./process/files/image"; import { updateInlayScreen } from "./process/inlayScreen"; -import { PngChunk } from "./pngChunk"; import { parseMarkdownSafe } from "./parser.svelte"; import { translateHTML } from "./translator/translator"; import { doingChat } from "./process/index.svelte"; @@ -84,7 +81,7 @@ export async function selectCharImg(charIndex:number) { } const img = selected.data let db = getDatabase() - const imgp = await saveImage(await reencodeImage(img)) + const imgp = await saveImage(img) dumpCharImage(charIndex) db.characters[charIndex].image = imgp setDatabase(db) @@ -668,56 +665,6 @@ function dataURLtoBuffer(string:string){ return Buffer.from(data, 'base64'); } -export async function addDefaultCharacters() { - const imgs = [fetch('/sample/rika.png'),fetch('/sample/yuzu.png')] - - alertStore.set({ - type: 'wait', - msg: `Loading Sample bots...` - }) - - for(const img of imgs){ - const imgBuffer = await (await img).arrayBuffer() - const readed = PngChunk.read(Buffer.from(imgBuffer), ["risuai"])?.risuai - await sleep(10) - const va = decodeMsgpack(Buffer.from(readed,'base64')) as any - if(va.type !== 101){ - alertError(language.errors.noData) - return - } - let char:character = va.data - let db = getDatabase() - if(char.emotionImages && char.emotionImages.length > 0){ - for(let i=0;i Date: Tue, 10 Dec 2024 22:48:52 +0900 Subject: [PATCH 05/27] Bump version to 143.1.0 in configuration and related files --- src-tauri/tauri.conf.json | 2 +- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 228d9ddf..518bc369 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "143.0.1", + "version": "143.1.0", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index c02b27af..103c299f 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "143.0.1" +export let appVer = "143.1.0" export let webAppSubVer = '' diff --git a/version.json b/version.json index 7bddce26..3a28c309 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"143.0.1"} \ No newline at end of file +{"version":"143.1.0"} \ No newline at end of file From 64e759e18791c965f81878b65a6998fdc5a8f4ac Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Wed, 11 Dec 2024 03:44:07 +0900 Subject: [PATCH 06/27] Fix mistral top_p and fix seperateParameters --- src/ts/model/modellist.ts | 10 +++++----- src/ts/process/request.ts | 3 +-- src/ts/storage/database.svelte.ts | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ts/model/modellist.ts b/src/ts/model/modellist.ts index bbca5d7d..baa1b626 100644 --- a/src/ts/model/modellist.ts +++ b/src/ts/model/modellist.ts @@ -708,7 +708,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], recommended: true, - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + parameters: ['temperature', 'presence_penalty', 'frequency_penalty', 'top_p'], tokenizer: LLMTokenizer.Mistral }, { @@ -719,7 +719,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], recommended: true, - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + parameters: ['temperature', 'presence_penalty', 'frequency_penalty', 'top_p'], tokenizer: LLMTokenizer.Mistral }, { @@ -729,7 +729,7 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.Mistral, format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + parameters: ['temperature', 'presence_penalty', 'frequency_penalty', 'top_p'], tokenizer: LLMTokenizer.Mistral }, { @@ -739,7 +739,7 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.Mistral, format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + parameters: ['temperature', 'presence_penalty', 'frequency_penalty', 'top_p'], tokenizer: LLMTokenizer.Mistral }, { @@ -749,7 +749,7 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.Mistral, format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + parameters: ['temperature', 'presence_penalty', 'frequency_penalty', 'top_p'], recommended: true, tokenizer: LLMTokenizer.Mistral }, diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index 95502cf1..df15704b 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -520,10 +520,9 @@ async function requestOpenAI(arg:RequestDataArgumentExtended):Promise Date: Wed, 11 Dec 2024 03:57:43 +0900 Subject: [PATCH 07/27] Fix spelling of "Seperate" to "Separate" in language strings --- src/lang/en.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index b0c9be33..f48a7399 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -807,8 +807,8 @@ export const languageEnglish = { predictedOutput: "Predicted Output", systemContentReplacement: "System Content Replacement", systemRoleReplacement: "System Role Replacement", - seperateParameters: "Seperate Parameters", - seperateParametersEnabled: "Enable Seperate Parameters", + seperateParameters: "Separate Parameters", + seperateParametersEnabled: "Enable Separate Parameters", summarizationPrompt: "Summarization Prompt", translatorPrompt: "Translation Prompt", translateBeforeHTMLFormatting: "Translate Before HTML Formatting", From da4f081e36b0622a25b3446516d4f45bc5c3681c Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Wed, 11 Dec 2024 04:30:39 +0900 Subject: [PATCH 08/27] Change --- src/lang/en.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index f48a7399..6c19ef97 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -460,7 +460,7 @@ export const languageEnglish = { loadDataFromAccount: "Load Data from Account", saveCurrentDataToAccount: "Save Current Data to Account", chatAssumed: "", - proxyAPIKey: "Proxy Key/Password", + proxyAPIKey: "Key/Password", proxyRequestModel: "Request Model", officialWiki: "Official Wiki", officialWikiDesc: "Official Wiki for RisuAI. feel free to see.", From 2f1e14d0d7bf3e6c071d84dea20ccdef268f0dd3 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 07:53:25 +0900 Subject: [PATCH 09/27] Add hasVideoInput flag and new Gemini model with audio and video support --- src/ts/model/modellist.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ts/model/modellist.ts b/src/ts/model/modellist.ts index baa1b626..49711994 100644 --- a/src/ts/model/modellist.ts +++ b/src/ts/model/modellist.ts @@ -13,7 +13,8 @@ export enum LLMFlags{ hasStreaming, requiresAlternateRole, mustStartWithUserInput, - poolSupported + poolSupported, + hasVideoInput } export enum LLMProvider{ @@ -777,10 +778,18 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported], - recommended: true, parameters: ['temperature', 'top_k', 'top_p'], tokenizer: LLMTokenizer.GoogleCloud }, + { + name: "gemini-2.0-flash-exp", + id: 'gemini-2.0-flash-exp', + provider: LLMProvider.GoogleCloud, + format: LLMFormat.GoogleCloud, + flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput], + parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'], + tokenizer: LLMTokenizer.GoogleCloud + }, { name: "Gemini Pro 1.5", id: 'gemini-1.5-pro-latest', From 61763deaa7d0b04f6fda850ed7939aeb20b711c2 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 07:57:01 +0900 Subject: [PATCH 10/27] Update Gemini parameters --- src/ts/process/index.svelte.ts | 2 +- src/ts/process/request.ts | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/ts/process/index.svelte.ts b/src/ts/process/index.svelte.ts index 9fac0a04..d8b622e7 100644 --- a/src/ts/process/index.svelte.ts +++ b/src/ts/process/index.svelte.ts @@ -41,7 +41,7 @@ export interface OpenAIChat{ } export interface MultiModal{ - type:'image'|'video' + type:'image'|'video'|'audio' base64:string, height?:number, width?:number diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index df15704b..eccdb823 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -1406,7 +1406,11 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise }); for (const modal of chat.multimodals) { - if (modal.type === "image") { + if ( + (modal.type === "image" && arg.modelInfo.flags.includes(LLMFlags.hasImageInput)) || + (modal.type === "audio" && arg.modelInfo.flags.includes(LLMFlags.hasAudioInput)) || + (modal.type === "video" && arg.modelInfo.flags.includes(LLMFlags.hasVideoInput)) + ) { const dataurl = modal.base64; const base64 = dataurl.split(",")[1]; const mediaType = dataurl.split(";")[0].split(":")[1]; @@ -1486,8 +1490,11 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise contents: reformatedChat, generation_config: applyParameters({ "maxOutputTokens": maxTokens, - }, ['temperature', 'top_p'], { - 'top_p': "topP" + }, ['temperature', 'top_p', 'top_k', 'presence_penalty', 'frequency_penalty'], { + 'top_p': "topP", + 'top_k': "topK", + 'presence_penalty': "presencePenalty", + 'frequency_penalty': "frequencyPenalty" }, arg.mode), safetySettings: uncensoredCatagory, systemInstruction: { From bffa3d73d47ee35ecb15d6501f19e30bf0570c44 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 07:57:18 +0900 Subject: [PATCH 11/27] Bump version to 143.2.0 in configuration and related files --- src-tauri/tauri.conf.json | 2 +- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 518bc369..67161faf 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "143.1.0", + "version": "143.2.0", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 9235ca1b..9b25d05f 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "143.1.0" +export let appVer = "143.2.0" export let webAppSubVer = '' diff --git a/version.json b/version.json index 3a28c309..3bc0e06d 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"143.1.0"} \ No newline at end of file +{"version":"143.2.0"} \ No newline at end of file From 51740827962b3bbe416177d815327f687965dc7d Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 08:38:33 +0900 Subject: [PATCH 12/27] Add Gemini related features --- src/lib/ChatScreens/DefaultChatScreen.svelte | 33 ++++++-- src/ts/characterCards.ts | 2 +- src/ts/model/modellist.ts | 5 +- src/ts/parser.svelte.ts | 19 +++-- src/ts/persona.ts | 2 +- src/ts/process/files/{image.ts => inlays.ts} | 82 ++++++++++++++------ src/ts/process/files/multisend.ts | 49 ++++++++++-- src/ts/process/index.svelte.ts | 18 ++++- src/ts/process/inlayScreen.ts | 2 +- src/ts/process/lua.ts | 2 +- src/ts/process/request.ts | 17 +++- src/ts/process/triggers.ts | 2 +- src/ts/tokenizer.ts | 2 +- 13 files changed, 180 insertions(+), 55 deletions(-) rename src/ts/process/files/{image.ts => inlays.ts} (61%) diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte index 7bdf0b87..ecba3cbc 100644 --- a/src/lib/ChatScreens/DefaultChatScreen.svelte +++ b/src/lib/ChatScreens/DefaultChatScreen.svelte @@ -2,7 +2,7 @@ import Suggestion from './Suggestion.svelte'; import AdvancedChatEditor from './AdvancedChatEditor.svelte'; - import { CameraIcon, DatabaseIcon, DicesIcon, GlobeIcon, ImagePlusIcon, LanguagesIcon, Laugh, MenuIcon, MicOffIcon, PackageIcon, Plus, RefreshCcwIcon, ReplyIcon, Send, StepForwardIcon } from "lucide-svelte"; + import { CameraIcon, DatabaseIcon, DicesIcon, GlobeIcon, ImagePlusIcon, LanguagesIcon, Laugh, MenuIcon, MicOffIcon, PackageIcon, Plus, RefreshCcwIcon, ReplyIcon, Send, StepForwardIcon, XIcon } from "lucide-svelte"; import { selectedCharID, PlaygroundStore, createSimpleCharacter } from "../../ts/stores.svelte"; import Chat from "./Chat.svelte"; import { type Message, type character, type groupChat } from "../../ts/storage/database.svelte"; @@ -25,7 +25,7 @@ import { PreUnreroll, Prereroll } from 'src/ts/process/prereroll'; import { processMultiCommand } from 'src/ts/process/command'; import { postChatFile } from 'src/ts/process/files/multisend'; - import { getInlayImage } from 'src/ts/process/files/image'; + import { getInlayAsset } from 'src/ts/process/files/inlays'; import PlaygroundMenu from '../Playground/PlaygroundMenu.svelte'; import { ConnectionOpenStore } from 'src/ts/sync/multiuser'; @@ -546,8 +546,31 @@ {#if fileInput.length > 0}
{#each fileInput as file, i} - {#await getInlayImage(file) then inlayImage} - Inlay + {#await getInlayAsset(file) then inlayAsset} +
+ {#if inlayAsset.type === 'image'} + Inlay + {:else if inlayAsset.type === 'video'} + + {:else if inlayAsset.type === 'audio'} + + {:else} +
{file}
+ {/if} + +
{/await} {/each}
@@ -741,7 +764,7 @@
{ const res = await postChatFile(messageInput) - if(res?.type === 'image'){ + if(res?.type === 'asset'){ fileInput.push(res.data) updateInputSizeAll() } diff --git a/src/ts/characterCards.ts b/src/ts/characterCards.ts index 2d5b9910..ff1e2892 100644 --- a/src/ts/characterCards.ts +++ b/src/ts/characterCards.ts @@ -9,7 +9,7 @@ import { AppendableBuffer, BlankWriter, checkCharOrder, downloadFile, isNodeServ import { SettingsMenuIndex, ShowRealmFrameStore, selectedCharID, settingsOpen } from "./stores.svelte" import { convertImage, hasher } from "./parser.svelte" import { CCardLib, type CharacterCardV3, type LorebookEntry } from '@risuai/ccardlib' -import { reencodeImage } from "./process/files/image" +import { reencodeImage } from "./process/files/inlays" import { PngChunk } from "./pngChunk" import type { OnnxModelFiles } from "./process/transformers" import { CharXReader, CharXWriter } from "./process/processzip" diff --git a/src/ts/model/modellist.ts b/src/ts/model/modellist.ts index 49711994..d319f127 100644 --- a/src/ts/model/modellist.ts +++ b/src/ts/model/modellist.ts @@ -782,13 +782,14 @@ export const LLMModels: LLMModel[] = [ tokenizer: LLMTokenizer.GoogleCloud }, { - name: "gemini-2.0-flash-exp", + name: "Gemini Flash 2.0 Exp", id: 'gemini-2.0-flash-exp', provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput], parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'], - tokenizer: LLMTokenizer.GoogleCloud + tokenizer: LLMTokenizer.GoogleCloud, + recommended: true }, { name: "Gemini Pro 1.5", diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 563737fc..3e19cff7 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -9,7 +9,7 @@ import css, { type CssAtRuleAST } from '@adobe/css-tools' import { SizeStore, selectedCharID } from './stores.svelte'; import { calcString } from './process/infunctions'; import { findCharacterbyId, getPersonaPrompt, getUserIcon, getUserName, parseKeyValue, sfc32, sleep, uuidtoNumber } from './util'; -import { getInlayImage } from './process/files/image'; +import { getInlayAsset } from './process/files/inlays'; import { getModuleAssets, getModuleLorebooks } from './process/modules'; import type { OpenAIChat } from './process/index.svelte'; import hljs from 'highlight.js/lib/core' @@ -428,15 +428,22 @@ function getClosestMatch(name:string, assetPaths:{[key:string]:{path:string, ext return assetPaths[closest] } -async function parseInlayImages(data:string){ +async function parseInlayAssets(data:string){ const inlayMatch = data.match(/{{inlay::(.+?)}}/g) if(inlayMatch){ for(const inlay of inlayMatch){ const id = inlay.substring(9, inlay.length - 2) - const img = await getInlayImage(id) - if(img){ - data = data.replace(inlay, ``) + const asset = await getInlayAsset(id) + if(asset?.type === 'image'){ + data = data.replace(inlay, ``) } + if(asset?.type === 'video'){ + data = data.replace(inlay, ``) + } + if(asset?.type === 'audio'){ + data = data.replace(inlay, ``) + } + } } return data @@ -473,7 +480,7 @@ export async function ParseMarkdown( if(firstParsed !== data && char && char.type !== 'group'){ data = await parseAdditionalAssets(data, char, additionalAssetMode, 'post') } - data = await parseInlayImages(data ?? '') + data = await parseInlayAssets(data ?? '') data = encodeStyle(data) if(mode === 'normal'){ diff --git a/src/ts/persona.ts b/src/ts/persona.ts index 4b5478bc..52771947 100644 --- a/src/ts/persona.ts +++ b/src/ts/persona.ts @@ -4,7 +4,7 @@ import { getUserName, selectSingleFile, sleep } from "./util" import { alertError, alertNormal, alertStore } from "./alert" import { downloadFile, readImage } from "./globalApi.svelte" import { language } from "src/lang" -import { reencodeImage } from "./process/files/image" +import { reencodeImage } from "./process/files/inlays" import { PngChunk } from "./pngChunk" import { v4 } from "uuid" diff --git a/src/ts/process/files/image.ts b/src/ts/process/files/inlays.ts similarity index 61% rename from src/ts/process/files/image.ts rename to src/ts/process/files/inlays.ts index 1441c628..0d08b9cf 100644 --- a/src/ts/process/files/image.ts +++ b/src/ts/process/files/inlays.ts @@ -2,25 +2,73 @@ import localforage from "localforage"; import { v4 } from "uuid"; import { getDatabase } from "../../storage/database.svelte"; import { checkImageType } from "../../parser.svelte"; +import { getModelInfo, LLMFlags } from "src/ts/model/modellist"; + +const inlayImageExts = [ + 'jpg', 'jpeg', 'png', 'gif', 'webp', 'avif' +] + +const inlayAudioExts = [ + 'wav', 'mp3', 'ogg', 'flac' +] + +const inlayVideoExts = [ + 'webm', 'mp4', 'mkv' +] const inlayStorage = localforage.createInstance({ name: 'inlay', storeName: 'inlay' }) -export async function postInlayImage(img:{ +export async function postInlayAsset(img:{ name:string, data:Uint8Array }){ const extention = img.name.split('.').at(-1) const imgObj = new Image() - imgObj.src = URL.createObjectURL(new Blob([img.data], {type: `image/${extention}`})) - return await writeInlayImage(imgObj, { - name: img.name, - ext: extention - }) + if(inlayImageExts.includes(extention)){ + imgObj.src = URL.createObjectURL(new Blob([img.data], {type: `image/${extention}`})) + + return await writeInlayImage(imgObj, { + name: img.name, + ext: extention + }) + } + + if(inlayAudioExts.includes(extention)){ + const b64 = Buffer.from(img.data).toString('base64') + const dataURI = `data:audio/${extention};base64,${b64}` + const imgid = v4() + + await inlayStorage.setItem(imgid, { + name: img.name, + data: dataURI, + ext: extention, + type: 'audio' + }) + + return `${imgid}` + } + + if(inlayVideoExts.includes(extention)){ + const b64 = Buffer.from(img.data).toString('base64') + const dataURI = `data:video/${extention};base64,${b64}` + const imgid = v4() + + await inlayStorage.setItem(imgid, { + name: img.name, + data: dataURI, + ext: extention, + type: 'video' + }) + + return `${imgid}` + } + + return null } export async function writeInlayImage(imgObj:HTMLImageElement, arg:{name?:string, ext?:string} = {}) { @@ -60,21 +108,23 @@ export async function writeInlayImage(imgObj:HTMLImageElement, arg:{name?:string await inlayStorage.setItem(imgid, { name: arg.name ?? imgid, data: dataURI, - ext: arg.ext ?? 'png', + ext: 'png', height: drawHeight, - width: drawWidth + width: drawWidth, + type: 'image' }) return `${imgid}` } -export async function getInlayImage(id: string){ +export async function getInlayAsset(id: string){ const img:{ name: string, data: string ext: string height: number width: number + type: 'image'|'video'|'audio' } = await inlayStorage.getItem(id) if(img === null){ return null @@ -84,19 +134,7 @@ export async function getInlayImage(id: string){ export function supportsInlayImage(){ const db = getDatabase() - return db.aiModel.startsWith('gptv') || db.aiModel === 'gemini-pro-vision' || db.aiModel.startsWith('gemini-exp') || db.aiModel.startsWith('claude-3') || db.aiModel.startsWith('gpt4_turbo') || db.aiModel.startsWith('gpt5') || db.aiModel.startsWith('gpt4o') || - (db.aiModel === 'reverse_proxy' && ( - db.proxyRequestModel?.startsWith('gptv') || db.proxyRequestModel === 'gemini-pro-vision' || db.proxyRequestModel?.startsWith('claude-3') || db.proxyRequestModel.startsWith('gpt4_turbo') || - db.proxyRequestModel?.startsWith('gpt5') || db.proxyRequestModel?.startsWith('gpt4o') || - db.proxyRequestModel === 'custom' && ( - db.customProxyRequestModel?.startsWith('gptv') || - db.customProxyRequestModel === 'gemini-pro-vision' || - db.customProxyRequestModel?.startsWith('claude-3') || - db.customProxyRequestModel.startsWith('gpt-4-turbo') || - db.customProxyRequestModel?.startsWith('gpt5') || - db.customProxyRequestModel?.startsWith('gpt4o') - ) - )) + return getModelInfo(db.aiModel).flags.includes(LLMFlags.hasImageInput) } export async function reencodeImage(img:Uint8Array){ diff --git a/src/ts/process/files/multisend.ts b/src/ts/process/files/multisend.ts index 65bd95ba..e79d5033 100644 --- a/src/ts/process/files/multisend.ts +++ b/src/ts/process/files/multisend.ts @@ -5,7 +5,7 @@ import { doingChat, sendChat } from '../index.svelte'; import { downloadFile, isTauri } from 'src/ts/globalApi.svelte'; import { HypaProcesser } from '../memory/hypamemory'; import { BufferToText as BufferToText, selectSingleFile, sleep } from 'src/ts/util'; -import { postInlayImage } from './image'; +import { postInlayAsset } from './inlays'; type sendFileArg = { file:string @@ -178,11 +178,11 @@ async function sendXMLFile(arg:sendFileArg) { return Buffer.from(`\n${message}\n\n`).toString('base64') } -type postFileResult = postFileResultImage | postFileResultVoid | postFileResultText +type postFileResult = postFileResultAsset | postFileResultVoid | postFileResultText -type postFileResultImage = { +type postFileResultAsset = { data: string, - type: 'image', + type: 'asset', } type postFileResultVoid = { @@ -201,6 +201,22 @@ export async function postChatFile(query:string):Promise{ 'jpeg', 'png', 'webp', + 'gif', + 'avif', + + //audio format + 'wav', + 'mp3', + 'ogg', + 'flac', + + //video format + 'mp4', + 'webm', + 'mpeg', + 'avi', + + //other format 'po', // 'pdf', 'txt' @@ -243,14 +259,33 @@ export async function postChatFile(query:string):Promise{ name: file.name } } + + //image format case 'jpg': case 'jpeg': case 'png': - case 'webp':{ - const postData = await postInlayImage(file) + case 'webp': + case 'gif': + case 'avif': + + //audio format + case 'wav': + case 'mp3': + case 'ogg': + case 'flac': + + //video format + case 'mp4': + case 'webm': + case 'mpeg': + case 'avi':{ + const postData = await postInlayAsset(file) + if(!postData){ + return null + } return { data: postData, - type: 'image' + type: 'asset' } } case 'txt':{ diff --git a/src/ts/process/index.svelte.ts b/src/ts/process/index.svelte.ts index d8b622e7..b3e33813 100644 --- a/src/ts/process/index.svelte.ts +++ b/src/ts/process/index.svelte.ts @@ -18,7 +18,7 @@ import { groupOrder } from "./group"; import { runTrigger } from "./triggers"; import { HypaProcesser } from "./memory/hypamemory"; import { additionalInformations } from "./embedding/addinfo"; -import { getInlayImage, supportsInlayImage } from "./files/image"; +import { getInlayAsset, supportsInlayImage } from "./files/inlays"; import { getGenerationModelString } from "./models/modelString"; import { connectionOpen, peerRevertChat, peerSafeCheck, peerSync } from "../sync/multiuser"; import { runInlayScreen } from "./inlayScreen"; @@ -29,6 +29,7 @@ import { hanuraiMemory } from "./memory/hanuraiMemory"; import { hypaMemoryV2 } from "./memory/hypav2"; import { runLuaEditTrigger } from "./lua"; import { parseChatML } from "../parser.svelte"; +import { getModelInfo, LLMFlags } from "../model/modellist"; export interface OpenAIChat{ role: 'system'|'user'|'assistant'|'function' @@ -699,12 +700,13 @@ export async function sendChat(chatProcessIndex = -1,arg:{ } let multimodal:MultiModal[] = [] + const modelinfo = getModelInfo(DBState.db.aiModel) if(inlays.length > 0){ for(const inlay of inlays){ const inlayName = inlay.replace('{{inlay::', '').replace('}}', '') - const inlayData = await getInlayImage(inlayName) - if(inlayData){ - if(supportsInlayImage()){ + const inlayData = await getInlayAsset(inlayName) + if(inlayData?.type === 'image'){ + if(modelinfo.flags.includes(LLMFlags.hasImageInput)){ multimodal.push({ type: 'image', base64: inlayData.data, @@ -717,6 +719,14 @@ export async function sendChat(chatProcessIndex = -1,arg:{ formatedChat += `[${captionResult[0].generated_text}]` } } + if(inlayData?.type === 'video' || inlayData?.type === 'audio'){ + if(multimodal.length === 0){ + multimodal.push({ + type: inlayData.type, + base64: inlayData.data + }) + } + } formatedChat = formatedChat.replace(inlay, '') } } diff --git a/src/ts/process/inlayScreen.ts b/src/ts/process/inlayScreen.ts index 5e7cbaaf..9e945171 100644 --- a/src/ts/process/inlayScreen.ts +++ b/src/ts/process/inlayScreen.ts @@ -1,4 +1,4 @@ -import { writeInlayImage } from "./files/image"; +import { writeInlayImage } from "./files/inlays"; import type { character } from "../storage/database.svelte"; import { generateAIImage } from "./stableDiff"; diff --git a/src/ts/process/lua.ts b/src/ts/process/lua.ts index bdd4e0fb..3571860e 100644 --- a/src/ts/process/lua.ts +++ b/src/ts/process/lua.ts @@ -6,7 +6,7 @@ import { ReloadGUIPointer, selectedCharID } from "../stores.svelte"; import { alertError, alertInput, alertNormal } from "../alert"; import { HypaProcesser } from "./memory/hypamemory"; import { generateAIImage } from "./stableDiff"; -import { writeInlayImage } from "./files/image"; +import { writeInlayImage } from "./files/inlays"; import type { OpenAIChat } from "./index.svelte"; import { requestChatData } from "./request"; import { v4 } from "uuid"; diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index eccdb823..f577f406 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -11,7 +11,7 @@ import { risuChatParser } from "../parser.svelte"; import { SignatureV4 } from "@smithy/signature-v4"; import { HttpRequest } from "@smithy/protocol-http"; import { Sha256 } from "@aws-crypto/sha256-js"; -import { supportsInlayImage } from "./files/image"; +import { supportsInlayImage } from "./files/inlays"; import { Capacitor } from "@capacitor/core"; import { getFreeOpenRouterModel } from "../model/openrouter"; import { runTransformers } from "./transformers"; @@ -95,7 +95,9 @@ type ParameterMap = { [key in Parameter]?: string; }; -function applyParameters(data: { [key: string]: any }, parameters: Parameter[], rename: ParameterMap, ModelMode:ModelModeExtended): { [key: string]: any } { +function applyParameters(data: { [key: string]: any }, parameters: Parameter[], rename: ParameterMap, ModelMode:ModelModeExtended, arg:{ + ignoreTopKIfOne?:boolean +} = {}): { [key: string]: any } { const db = getDatabase() if(db.seperateParametersEnabled && ModelMode !== 'model'){ if(ModelMode === 'submodel'){ @@ -103,6 +105,10 @@ function applyParameters(data: { [key: string]: any }, parameters: Parameter[], } for(const parameter of parameters){ + if(parameter === 'top_k' && arg.ignoreTopKIfOne && db.seperateParameters[ModelMode][parameter] === 1){ + continue + } + let value = db.seperateParameters[ModelMode][parameter] if(value === -1000 || value === undefined){ @@ -117,6 +123,9 @@ function applyParameters(data: { [key: string]: any }, parameters: Parameter[], for(const parameter of parameters){ let value = 0 + if(parameter === 'top_k' && arg.ignoreTopKIfOne && db.top_k === 1){ + value = 0 + } switch(parameter){ case 'temperature':{ value = db.temperature === -1000 ? -1000 : (db.temperature / 100) @@ -1495,7 +1504,9 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise 'top_k': "topK", 'presence_penalty': "presencePenalty", 'frequency_penalty': "frequencyPenalty" - }, arg.mode), + }, arg.mode, { + ignoreTopKIfOne: true + }), safetySettings: uncensoredCatagory, systemInstruction: { parts: [ diff --git a/src/ts/process/triggers.ts b/src/ts/process/triggers.ts index e7833d10..ac4d24a8 100644 --- a/src/ts/process/triggers.ts +++ b/src/ts/process/triggers.ts @@ -11,7 +11,7 @@ import type { OpenAIChat } from "./index.svelte"; import { HypaProcesser } from "./memory/hypamemory"; import { requestChatData } from "./request"; import { generateAIImage } from "./stableDiff"; -import { writeInlayImage } from "./files/image"; +import { writeInlayImage } from "./files/inlays"; import { runLua } from "./lua"; diff --git a/src/ts/tokenizer.ts b/src/ts/tokenizer.ts index a3e8f4b8..4565454f 100644 --- a/src/ts/tokenizer.ts +++ b/src/ts/tokenizer.ts @@ -2,7 +2,7 @@ import type { Tiktoken } from "@dqbd/tiktoken"; import type { Tokenizer } from "@mlc-ai/web-tokenizers"; import { type groupChat, type character, type Chat, getCurrentCharacter, getDatabase } from "./storage/database.svelte"; import type { MultiModal, OpenAIChat } from "./process/index.svelte"; -import { supportsInlayImage } from "./process/files/image"; +import { supportsInlayImage } from "./process/files/inlays"; import { risuChatParser } from "./parser.svelte"; import { tokenizeGGUFModel } from "./process/models/local"; import { globalFetch } from "./globalApi.svelte"; From bb082f96bc9bd5401e22cd0d8686496e2db26adf Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 08:42:10 +0900 Subject: [PATCH 13/27] Enhance media inlays with consistent styling and structure for images, videos, and audio --- src/styles.css | 10 +++++++++- src/ts/parser.svelte.ts | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/styles.css b/src/styles.css index a1711efe..2be1c75b 100644 --- a/src/styles.css +++ b/src/styles.css @@ -248,7 +248,15 @@ html, body{ @apply w-full flex justify-center } -.x-risu-risu-inlay-image > img{ +.x-risu-risu-inlay-image img{ + @apply rounded-lg focus:outline-none max-w-80 w-full +} + +.x-risu-risu-inlay-image video{ + @apply rounded-lg focus:outline-none max-w-80 w-full +} + +.x-risu-risu-inlay-image audio{ @apply rounded-lg focus:outline-none max-w-80 w-full } diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 3e19cff7..548ec478 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -435,13 +435,13 @@ async function parseInlayAssets(data:string){ const id = inlay.substring(9, inlay.length - 2) const asset = await getInlayAsset(id) if(asset?.type === 'image'){ - data = data.replace(inlay, ``) + data = data.replace(inlay, `
`) } if(asset?.type === 'video'){ - data = data.replace(inlay, ``) + data = data.replace(inlay, `
`) } if(asset?.type === 'audio'){ - data = data.replace(inlay, ``) + data = data.replace(inlay, `
`) } } From 45959f49a82e3ecfa6ee79d3aaa496285b1e50f7 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 08:42:26 +0900 Subject: [PATCH 14/27] Add spacing after inlay assets for improved layout consistency --- src/ts/parser.svelte.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 548ec478..9892fe53 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -435,13 +435,13 @@ async function parseInlayAssets(data:string){ const id = inlay.substring(9, inlay.length - 2) const asset = await getInlayAsset(id) if(asset?.type === 'image'){ - data = data.replace(inlay, `
`) + data = data.replace(inlay, `
\n\n`) } if(asset?.type === 'video'){ - data = data.replace(inlay, `
`) + data = data.replace(inlay, `
\n\n`) } if(asset?.type === 'audio'){ - data = data.replace(inlay, `
`) + data = data.replace(inlay, `
\n\n`) } } From 6d012c77fef7b5ded0aae2fbc4dc99a92987c906 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 08:42:44 +0900 Subject: [PATCH 15/27] Bump version to 143.3.0 in configuration and related files --- src-tauri/tauri.conf.json | 2 +- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 67161faf..0f83a4d6 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "143.2.0", + "version": "143.3.0", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 9b25d05f..5c7ec602 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "143.2.0" +export let appVer = "143.3.0" export let webAppSubVer = '' diff --git a/version.json b/version.json index 3bc0e06d..36534a68 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"143.2.0"} \ No newline at end of file +{"version":"143.3.0"} \ No newline at end of file From fc571d45acf4acd349449c499704d6a8143e16b4 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 10:43:18 +0900 Subject: [PATCH 16/27] Rename parameter 'ignoreTopKIfOne' to 'ignoreTopKIfZero' --- src/ts/process/request.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index f577f406..669f8b4f 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -96,7 +96,7 @@ type ParameterMap = { }; function applyParameters(data: { [key: string]: any }, parameters: Parameter[], rename: ParameterMap, ModelMode:ModelModeExtended, arg:{ - ignoreTopKIfOne?:boolean + ignoreTopKIfZero?:boolean } = {}): { [key: string]: any } { const db = getDatabase() if(db.seperateParametersEnabled && ModelMode !== 'model'){ @@ -105,7 +105,7 @@ function applyParameters(data: { [key: string]: any }, parameters: Parameter[], } for(const parameter of parameters){ - if(parameter === 'top_k' && arg.ignoreTopKIfOne && db.seperateParameters[ModelMode][parameter] === 1){ + if(parameter === 'top_k' && arg.ignoreTopKIfZero && db.seperateParameters[ModelMode][parameter] === 0){ continue } @@ -123,7 +123,7 @@ function applyParameters(data: { [key: string]: any }, parameters: Parameter[], for(const parameter of parameters){ let value = 0 - if(parameter === 'top_k' && arg.ignoreTopKIfOne && db.top_k === 1){ + if(parameter === 'top_k' && arg.ignoreTopKIfZero && db.top_k === 0){ value = 0 } switch(parameter){ @@ -1505,7 +1505,7 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise 'presence_penalty': "presencePenalty", 'frequency_penalty': "frequencyPenalty" }, arg.mode, { - ignoreTopKIfOne: true + ignoreTopKIfZero: true }), safetySettings: uncensoredCatagory, systemInstruction: { From 7ed8d889cf0c98addd8b3b227f17cab594c74fd5 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 10:43:42 +0900 Subject: [PATCH 17/27] Bump version to 143.3.1 in configuration and related files --- src-tauri/tauri.conf.json | 2 +- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 0f83a4d6..6468e2b4 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "143.3.0", + "version": "143.3.1", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 5c7ec602..7fe64f4e 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "143.3.0" +export let appVer = "143.3.1" export let webAppSubVer = '' diff --git a/version.json b/version.json index 36534a68..4e21b7e1 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"143.3.0"} \ No newline at end of file +{"version":"143.3.1"} \ No newline at end of file From 99a17ca118c8afa5aa396d12bcc1a574cfa2005b Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 10:53:50 +0900 Subject: [PATCH 18/27] Update Tauri action version to 0.5.16 in GitHub Actions workflow --- .github/workflows/github-actions-builder.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-actions-builder.yml b/.github/workflows/github-actions-builder.yml index d026a3c6..9d474dfa 100644 --- a/.github/workflows/github-actions-builder.yml +++ b/.github/workflows/github-actions-builder.yml @@ -70,7 +70,7 @@ jobs: run: rustup target add x86_64-apple-darwin - if: matrix.settings.platform == 'macos-latest' run: rustup target add aarch64-apple-darwin - - uses: tauri-apps/tauri-action@v0 + - uses: tauri-apps/tauri-action@v0.5.16 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} From a8782dbe764c6040aaef84da2d39461f0d30d62e Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Thu, 12 Dec 2024 11:45:06 +0900 Subject: [PATCH 19/27] Add statics --- src/lang/en.ts | 1 + src/lib/Setting/Pages/AdvancedSettings.svelte | 39 +++++++++++-------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index 6c19ef97..ae61f590 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -822,4 +822,5 @@ export const languageEnglish = { googleCloudTokenization: "Google Cloud Tokenization", presetChain: "Preset Chain", legacyMediaFindings: "Legacy Media Findings", + staticsDisclaimer: "The statistics are based on the data from after July 2024. the data may not be accurate.", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/AdvancedSettings.svelte b/src/lib/Setting/Pages/AdvancedSettings.svelte index 53c2a842..b93d59ae 100644 --- a/src/lib/Setting/Pages/AdvancedSettings.svelte +++ b/src/lib/Setting/Pages/AdvancedSettings.svelte @@ -1,7 +1,7 @@