diff --git a/src/lib/Others/HypaV3Modal.svelte b/src/lib/Others/HypaV3Modal.svelte index 41eb7169..c04c575c 100644 --- a/src/lib/Others/HypaV3Modal.svelte +++ b/src/lib/Others/HypaV3Modal.svelte @@ -3,6 +3,8 @@ import { SearchIcon, SettingsIcon, + MoreVerticalIcon, + BarChartIcon, Trash2Icon, XIcon, ChevronUpIcon, @@ -88,6 +90,8 @@ let expandedMessageUIState = $state(null); let searchUIState = $state(null); let showImportantOnly = $state(false); + let showDropdown = $state(false); + let showMetrics = $state(false); $effect.pre(() => { untrack(() => { @@ -95,7 +99,6 @@ DBState.db.characters[$selectedCharID].chatPage ].hypaV3Data ??= { summaries: [], - lastSelectedSummaries: [], }; }); @@ -187,15 +190,14 @@ // Search summary index if (query.match(/^#\d+$/)) { - const summaryNumber = parseInt(query.substring(1)) - 1; + const summaryIndex = parseInt(query.substring(1)) - 1; if ( - summaryNumber >= 0 && - summaryNumber < hypaV3DataState.summaries.length && - (!showImportantOnly || - hypaV3DataState.summaries[summaryNumber].isImportant) + summaryIndex >= 0 && + summaryIndex < hypaV3DataState.summaries.length && + isSummaryVisible(summaryIndex) ) { - results.push(new SummarySearchResult(summaryNumber, 0, 0)); + results.push(new SummarySearchResult(summaryIndex, 0, 0)); } return results; @@ -204,10 +206,7 @@ if (isGuidLike(query)) { // Search chatMemo summaryUIStates.forEach((summaryUI, summaryIndex) => { - if ( - !showImportantOnly || - hypaV3DataState.summaries[summaryIndex].isImportant - ) { + if (isSummaryVisible(summaryIndex)) { summaryUI.chatMemoRefs.forEach((buttonRef, memoIndex) => { const buttonText = buttonRef.textContent?.toLowerCase() || ""; @@ -220,10 +219,7 @@ } else { // Search summary summaryUIStates.forEach((summaryUI, summaryIndex) => { - if ( - !showImportantOnly || - hypaV3DataState.summaries[summaryIndex].isImportant - ) { + if (isSummaryVisible(summaryIndex)) { const textAreaText = summaryUI.originalRef.value?.toLowerCase(); let pos = -1; @@ -375,6 +371,23 @@ textarea.scrollTop = selectionTop - textarea.clientHeight / 2; } + function isSummaryVisible(index: number): boolean { + const summary = hypaV3DataState.summaries[index]; + const metrics = hypaV3DataState.metrics; + + const metricsFilter = + !showMetrics || + !metrics || + metrics.lastImportantSummaries.includes(index) || + metrics.lastRecentSummaries.includes(index) || + metrics.lastSimilarSummaries.includes(index) || + metrics.lastRandomSummaries.includes(index); + + const importantFilter = !showImportantOnly || summary.isImportant; + + return metricsFilter && importantFilter; + } + async function toggleTranslate( summaryIndex: number, regenerate?: boolean @@ -730,7 +743,6 @@ chatMemos: [...mainChunk.chatMemos], isImportant: false, })), - lastSelectedSummaries: [], }; chat.hypaV3Data = newHypaV3Data; @@ -819,11 +831,17 @@
+ +
{ + e.stopPropagation(); + showDropdown = false; + }} >
@@ -831,6 +849,7 @@

{language.hypaV3Modal.titleLabel}

+
@@ -874,28 +893,69 @@ - - + +
+ + + {#if showDropdown} +
+ +
+ + + + + +
+
+ {/if} +