diff --git a/package.json b/package.json index 00723aa0..66885a23 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@dqbd/tiktoken": "^1.0.7", "@huggingface/jinja": "^0.2.2", "@huggingface/transformers": "^3.1.1", + "@mlc-ai/web-llm": "^0.2.79", "@mlc-ai/web-tokenizers": "^0.1.2", "@risuai/ccardlib": "^0.4.1", "@rollup/rollup-win32-arm64-msvc": "^4.40.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63e2c03e..d05f90f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: '@huggingface/transformers': specifier: ^3.1.1 version: 3.1.1 + '@mlc-ai/web-llm': + specifier: ^0.2.79 + version: 0.2.79 '@mlc-ai/web-tokenizers': specifier: ^0.1.2 version: 0.1.2 @@ -786,6 +789,9 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@mlc-ai/web-llm@0.2.79': + resolution: {integrity: sha512-Hy1ZHQ0o2bZGZoVnGK48+fts/ZSKwLe96xjvqL/6C59Mem9HoHTcFE07NC2E23mRmhd01tL655N6CPeYmwWgwQ==} + '@mlc-ai/web-tokenizers@0.1.2': resolution: {integrity: sha512-zpeZjiw8vTuaSjIeoEDYJL1nOrhSL/7eAW7hhqd3CzIodLpuArfyiTZxKwIlew8kkqb0RIxooqeAqtlngh1p8g==} @@ -2508,6 +2514,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -4366,6 +4376,10 @@ snapshots: - supports-color optional: true + '@mlc-ai/web-llm@0.2.79': + dependencies: + loglevel: 1.9.2 + '@mlc-ai/web-tokenizers@0.1.2': {} '@msgpack/msgpack@2.8.0': {} @@ -6084,6 +6098,8 @@ snapshots: lodash@4.17.21: {} + loglevel@1.9.2: {} + long@5.2.3: {} lru-cache@10.1.0: {} diff --git a/src/App.svelte b/src/App.svelte index 7d21e2d8..be41032c 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -19,6 +19,9 @@ import CustomGUISettingMenu from './lib/Setting/Pages/CustomGUISettingMenu.svelte'; import { checkCharOrder } from './ts/globalApi.svelte'; import { ArrowUpIcon, GlobeIcon, PlusIcon } from 'lucide-svelte'; + import { hypaV3ModalOpen, hypaV3ProgressStore } from "./ts/stores.svelte"; + import HypaV3Modal from './lib/Others/HypaV3Modal.svelte'; + import HypaV3Progress from './lib/Others/HypaV3Progress.svelte'; let didFirstSetup: boolean = $derived(DBState.db?.didFirstSetup) @@ -167,5 +170,11 @@ {#if $openPersonaList} {$openPersonaList = false}} /> {/if} + {#if $hypaV3ModalOpen} + + {/if} + {#if $hypaV3ProgressStore.open} + + {/if} \ No newline at end of file diff --git a/src/lang/en.ts b/src/lang/en.ts index ce9d06df..6de38200 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -176,6 +176,7 @@ export const languageEnglish = { comfyWorkflow: "Put the API workflow of comfy UI. you can get your API workflow in comfy UI by pressing the 'Workflow > Export (API)' button. you must also put {{risu_prompt}} in you workflow text. the {{risu_prompt}} will be replaced with the prompt provided by the Risu.", automaticCachePoint: "Automatically creates cache point after the chat ends, if the caching point doesn't exist.", experimentalChatCompressionDesc: "Compresses the unused chat data and saves in seperate file. this greatly reduces the size of the chat data, and greatly improves the performance, however its experimental and can be unstable, causing issues in backup feature and more.", + promptInfoInsideChatDesc: "When enabled, this stores prompt preset information in the chat metadata. The stored data includes the preset name, active toggles, and the prompt text. This may slightly increase processing time and storage usage.", }, setup: { chooseProvider: "Choose AI Provider", @@ -1122,4 +1123,9 @@ export const languageEnglish = { hypaMemoryV2Modal: "Hypa V2 Modal", hypaMemoryV3Modal: "Hypa V3 Modal", showMenuHypaMemoryModal: "Show Menu Hypa Modal", + promptInfoInsideChat: "Add Prompt Info to Chat", + promptTextInfoInsideChat: "Add Prompt Text to Chat", + promptInfoEmptyMessage: "No prompt information is available for this message.", + promptInfoEmptyToggle: "No custom toggles are currently active.", + promptInfoEmptyText: "No prompt text has been saved.", } diff --git a/src/lang/ko.ts b/src/lang/ko.ts index 7382e505..5702a696 100644 --- a/src/lang/ko.ts +++ b/src/lang/ko.ts @@ -125,6 +125,7 @@ export const languageKorean = { "groupOtherBotRole": "This defines a role that is used in group chat for characters that isn't speaker.", "chatHTML": "A HTML that would be inserted as each chat.\n\nYou can use CBS and special tags.\n- ``: a textbox that would be used to render text\n- ``: an icon for user or assistant\n- ``: icon buttons for chat edit, translations and etc.\n- ``: generation information button.", "autoTranslateCachedOnly": "자동 번역 옵션이 켜진 상태에서 활성화하면, 사용자가 이전에 번역한 메시지만 자동으로 번역됩니다.", + "promptInfoInsideChatDesc": "활성화되면 채팅 메타데이터에 프롬프트 프리셋 정보를 저장합니다. 저장되는 정보는 프롬프트 프리셋 이름과 활성화된 토글, 그리고 프롬프트 텍스트입니다. 약간의 처리 시간과 용량을 차지할 수 있습니다.", }, "setup": { "chooseProvider": "AI 제공자를 선택해 주세요", @@ -989,4 +990,9 @@ export const languageKorean = { "hypaMemoryV2Modal": "하이파 V2 모달", "hypaMemoryV3Modal": "하이파 V3 모달", "showMenuHypaMemoryModal": "메뉴에서 하이파 모달 보이기", + "promptInfoInsideChat": "채팅에 프롬프트 정보 추가하기", + "promptTextInfoInsideChat": "채팅에 프롬프트 텍스트 정보 추가하기", + "promptInfoEmptyMessage": "이 메시지에 대한 프롬프트 정보가 없습니다.", + "promptInfoEmptyToggle": "활성화된 커스텀 토글이 없습니다.", + "promptInfoEmptyText": "저장된 프롬프트 텍스트가 없습니다.", } diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte index f4449e37..6fa1078e 100644 --- a/src/lib/ChatScreens/DefaultChatScreen.svelte +++ b/src/lib/ChatScreens/DefaultChatScreen.svelte @@ -3,7 +3,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, XIcon, BrainIcon } from "lucide-svelte"; - import { selectedCharID, PlaygroundStore, createSimpleCharacter } from "../../ts/stores.svelte"; + import { selectedCharID, PlaygroundStore, createSimpleCharacter, hypaV3ModalOpen } from "../../ts/stores.svelte"; import Chat from "./Chat.svelte"; import { type Message, type character, type groupChat } from "../../ts/storage/database.svelte"; import { DBState } from 'src/ts/stores.svelte'; @@ -12,7 +12,7 @@ import { findCharacterbyId, getUserIconProtrait, messageForm, sleep } from "../../ts/util"; import { language } from "../../lang"; import { isExpTranslator, translate } from "../../ts/translator/translator"; - import { alertError, alertNormal, alertWait, showHypaV2Alert, showHypaV3Alert } from "../../ts/alert"; + import { alertError, alertNormal, alertWait, showHypaV2Alert } from "../../ts/alert"; import sendSound from '../../etc/send.mp3' import { processScript } from "src/ts/process/scripts"; import CreatorQuote from "./CreatorQuote.svelte"; @@ -829,17 +829,17 @@ {/if} {#if DBState.db.showMenuHypaMemoryModal} - {#if DBState.db.supaModelType !== 'none' && (DBState.db.hypav2 || DBState.db.hypaV3)} + {#if (DBState.db.supaModelType !== 'none' && DBState.db.hypav2) || DBState.db.hypaV3}
{ if (DBState.db.hypav2) { DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].hypaV2Data ??= { lastMainChunkID: 0, mainChunks: [], - chunks: [], + chunks: [] } - showHypaV2Alert(); + showHypaV2Alert() } else if (DBState.db.hypaV3) { - showHypaV3Alert(); + $hypaV3ModalOpen = true } openMenu = false diff --git a/src/lib/Others/AlertComp.svelte b/src/lib/Others/AlertComp.svelte index ed34cc3e..1dea03e1 100644 --- a/src/lib/Others/AlertComp.svelte +++ b/src/lib/Others/AlertComp.svelte @@ -25,6 +25,8 @@ import { getCurrentCharacter } from "src/ts/storage/database.svelte"; import { message } from "@tauri-apps/plugin-dialog"; import HypaV3Modal from './HypaV3Modal.svelte'; + import Googli from "../UI/Googli.svelte"; + let btn let input = $state('') let cardExportType = $state('realm') @@ -221,6 +223,9 @@ +
{/if} -{#if $alertStore.type === "hypaV3"} - -{/if} -