diff --git a/src/lib/Others/AlertComp.svelte b/src/lib/Others/AlertComp.svelte index a439e58f..2829052d 100644 --- a/src/lib/Others/AlertComp.svelte +++ b/src/lib/Others/AlertComp.svelte @@ -5,7 +5,7 @@ import { getCharImage } from '../../ts/characters'; import { ParseMarkdown } from '../../ts/parser.svelte'; import BarIcon from '../SideBars/BarIcon.svelte'; - import { ChevronRightIcon, User } from 'lucide-svelte'; + import { ChevronRightIcon, User, RefreshCw } from 'lucide-svelte'; import { hubURL, isCharacterHasAssets } from 'src/ts/characterCards'; import TextInput from '../UI/GUI/TextInput.svelte'; import { openURL } from 'src/ts/globalApi.svelte'; @@ -24,6 +24,7 @@ import { getChatBranches } from "src/ts/gui/branches"; import { getCurrentCharacter } from "src/ts/storage/database.svelte"; import { message } from "@tauri-apps/plugin-dialog"; + import { summarize as hypaV3Summarize } from "src/ts/process/memory/hypav3"; let btn let input = $state('') let cardExportType = $state('realm') @@ -67,6 +68,8 @@ let { onclick }:Props = $props() + + let hypaV3Resummarizing = $state(false) { @@ -325,10 +328,11 @@
+
- {#each summary.chatMemos as memo} + {#each summary.chatMemos as chatMemo}
{ - const message = DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].message.find(m => m.chatId === memo); - return message ? (message.data.length > 100 ? message.data.slice(0, 100).trim() + '...' : message.data.trim()) : 'Message not found'; + const char = DBState.db.characters[$selectedCharID] + const chat = char.chats[DBState.db.characters[$selectedCharID].chatPage] + const firstMessage = chat.fmIndex === -1 ? char.firstMessage : char.alternateGreetings?.[chat.fmIndex ?? 0] + const message = chatMemo == null ? firstMessage : chat.message.find(m => m.chatId === chatMemo)?.data + return message ? (message.length > 100 ? message.slice(0, 100).trim() + "..." : message.trim()) : "Message not found" })()} > - {memo} + {chatMemo == null ? "First message" : chatMemo}
{/each}
diff --git a/src/ts/process/memory/hypav3.ts b/src/ts/process/memory/hypav3.ts index ce49894b..c9a96037 100644 --- a/src/ts/process/memory/hypav3.ts +++ b/src/ts/process/memory/hypav3.ts @@ -86,7 +86,7 @@ function cleanOrphanedSummary(chats: OpenAIChat[], data: HypaV3Data): void { } } -async function summary( +export async function summarize( stringifiedChats: string ): Promise<{ success: boolean; data: string }> { const db = getDatabase(); @@ -446,10 +446,10 @@ export async function hypaMemoryV3( toSummarize ); - const summaryResult = await summary(stringifiedChats); + const summarizeResult = await summarize(stringifiedChats); - if (!summaryResult.success) { - console.log("[HypaV3] Summarization failed:", summaryResult.data); + if (!summarizeResult.success) { + console.log("[HypaV3] Summarization failed:", summarizeResult.data); summarizationFailures++; if (summarizationFailures >= maxSummarizationFailures) { @@ -465,7 +465,7 @@ export async function hypaMemoryV3( } data.summaries.push({ - text: summaryResult.data, + text: summarizeResult.data, chatMemos: new Set(toSummarize.map((chat) => chat.memo)), }); @@ -687,10 +687,10 @@ export async function hypaMemoryV3( recentChats ); - const summaryResult = await summary(stringifiedRecentChats); + const summarizeResult = await summarize(stringifiedRecentChats); - if (!summaryResult.success) { - console.log("[HypaV3] Summarization failed:", summaryResult.data); + if (!summarizeResult.success) { + console.log("[HypaV3] Summarization failed:", summarizeResult.data); summarizationFailures++; if (summarizationFailures >= maxSummarizationFailures) { @@ -706,7 +706,7 @@ export async function hypaMemoryV3( } const searched = await processor.similaritySearchScoredEx( - summaryResult.data + summarizeResult.data ); for (const [chunk, similarity] of searched) {