diff --git a/src/lib/Others/HypaV3Modal.svelte b/src/lib/Others/HypaV3Modal.svelte index 77cc034e..717f6fd5 100644 --- a/src/lib/Others/HypaV3Modal.svelte +++ b/src/lib/Others/HypaV3Modal.svelte @@ -12,6 +12,7 @@ import { DBState, alertStore, selectedCharID } from "src/ts/stores.svelte"; import { summarize } from "src/ts/process/memory/hypav3"; import { type OpenAIChat } from "src/ts/process/index.svelte"; + import { type Message } from "src/ts/storage/database.svelte"; import { translateHTML } from "src/ts/translator/translator"; interface SummaryUI { @@ -61,9 +62,7 @@ ); } - function getMessageFromChatMemo( - chatMemo: string | null - ): { role: string; data: string } | null { + function getMessageFromChatMemo(chatMemo: string | null): Message | null { const char = DBState.db.characters[$selectedCharID]; const chat = char.chats[DBState.db.characters[$selectedCharID].chatPage]; const firstMessage = @@ -71,10 +70,11 @@ ? char.firstMessage : char.alternateGreetings?.[chat.fmIndex ?? 0]; - const targetMessage = + const targetMessage = ( chatMemo == null ? { role: "char", data: firstMessage } - : chat.message.find((m) => m.chatId === chatMemo); + : chat.message.find((m) => m.chatId === chatMemo) + ) as Message; return targetMessage; } @@ -232,6 +232,36 @@ }; } + function getNextMessageToSummarize(): Message { + 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]; + + if (hypaV3DataState.summaries.length > 0) { + const lastSummary = hypaV3DataState.summaries.at(-1); + const lastMessageIndex = chat.message.findIndex( + (msg) => msg.chatId === lastSummary.chatMemos.at(-1) + ); + + if (lastMessageIndex !== -1) { + const nextMessage = chat.message[lastMessageIndex + 1]; + + if (nextMessage) { + return nextMessage; + } + } + } + + if (firstMessage?.trim() === "") { + return chat.message[0]; + } + + return { role: "char", chatId: "first message", data: firstMessage }; + } + async function translate( text: string, regenerate?: boolean @@ -311,7 +341,7 @@
@@ -359,6 +389,10 @@
+ {#if hypaV3DataState.summaries.length === 0} + No summaries yet + {/if} + {#each hypaV3DataState.summaries as summary, i} {#if summaryUIStates[i]}
No summaries yet + {#if true} + + {@const nextMessage = getNextMessageToSummarize()} +
+ + HypaV3 will summarize {nextMessage.chatId} + +
+ {nextMessage.data} +
+
{/if}