feat: add lastSelectedSummaries property to store selected memory indices

This commit is contained in:
Bo26fhmC5M
2025-01-17 00:17:12 +09:00
parent 6a13b33103
commit 3c62317f3a
3 changed files with 61 additions and 49 deletions

View File

@@ -332,6 +332,7 @@
DBState.db.characters[$selectedCharID].chatPage DBState.db.characters[$selectedCharID].chatPage
].hypaV3Data = { ].hypaV3Data = {
summaries: [], summaries: [],
lastSelectedSummaries: [],
}; };
} else { } else {
showHypaV3Alert(); showHypaV3Alert();

View File

@@ -1113,6 +1113,7 @@
onclick={() => { onclick={() => {
DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].hypaV3Data ??= { DBState.db.characters[$selectedCharID].chats[DBState.db.characters[$selectedCharID].chatPage].hypaV3Data ??= {
summaries: [], summaries: [],
lastSelectedSummaries: [],
} }
showHypaV3Alert() showHypaV3Alert()
}} }}

View File

@@ -24,6 +24,7 @@ interface Summary {
interface HypaV3Data { interface HypaV3Data {
summaries: Summary[]; summaries: Summary[];
lastSelectedSummaries?: number[];
} }
export interface SerializableHypaV3Data { export interface SerializableHypaV3Data {
@@ -32,6 +33,7 @@ export interface SerializableHypaV3Data {
chatMemos: string[]; chatMemos: string[];
isImportant: boolean; isImportant: boolean;
}[]; }[];
lastSelectedSummaries?: number[];
} }
interface SummaryChunk { interface SummaryChunk {
@@ -55,6 +57,7 @@ function isSubset(subset: Set<string>, superset: Set<string>): boolean {
function toSerializableHypaV3Data(data: HypaV3Data): SerializableHypaV3Data { function toSerializableHypaV3Data(data: HypaV3Data): SerializableHypaV3Data {
return { return {
...data,
summaries: data.summaries.map((summary) => ({ summaries: data.summaries.map((summary) => ({
...summary, ...summary,
chatMemos: [...summary.chatMemos], chatMemos: [...summary.chatMemos],
@@ -64,6 +67,7 @@ function toSerializableHypaV3Data(data: HypaV3Data): SerializableHypaV3Data {
function toHypaV3Data(serialData: SerializableHypaV3Data): HypaV3Data { function toHypaV3Data(serialData: SerializableHypaV3Data): HypaV3Data {
return { return {
...serialData,
summaries: serialData.summaries.map((summary) => ({ summaries: serialData.summaries.map((summary) => ({
...summary, ...summary,
// Convert null back to undefined (JSON serialization converts undefined to null) // Convert null back to undefined (JSON serialization converts undefined to null)
@@ -231,16 +235,16 @@ async function retryableSummarize(
while (summarizationFailures < maxSummarizationFailures) { while (summarizationFailures < maxSummarizationFailures) {
console.log( console.log(
"[HypaV3] Attempting summarization:", "[HypaV3] Attempting summarization:",
"\nAttempt: ", "\nAttempt:",
summarizationFailures + 1, summarizationFailures + 1,
"\nTarget: ", "\nTarget:",
oaiChats oaiChats
); );
const summarizeResult = await summarize(oaiChats); const summarizeResult = await summarize(oaiChats);
if (!summarizeResult.success) { if (!summarizeResult.success) {
console.log("[HypaV3] Summarization failed: ", summarizeResult.data); console.log("[HypaV3] Summarization failed:", summarizeResult.data);
summarizationFailures++; summarizationFailures++;
if (summarizationFailures >= maxSummarizationFailures) { if (summarizationFailures >= maxSummarizationFailures) {
@@ -288,6 +292,7 @@ export async function hypaMemoryV3(
// Load existing hypa data if available // Load existing hypa data if available
let data: HypaV3Data = { let data: HypaV3Data = {
summaries: [], summaries: [],
lastSelectedSummaries: [],
}; };
if (room.hypaV3Data) { if (room.hypaV3Data) {
@@ -336,10 +341,10 @@ export async function hypaMemoryV3(
if (shouldReserveEmptyMemoryTokens) { if (shouldReserveEmptyMemoryTokens) {
currentTokens += emptyMemoryTokens; currentTokens += emptyMemoryTokens;
console.log("[HypaV3] Reserved empty memory tokens: ", emptyMemoryTokens); console.log("[HypaV3] Reserved empty memory tokens:", emptyMemoryTokens);
} else { } else {
currentTokens += memoryTokens; currentTokens += memoryTokens;
console.log("[HypaV3] Reserved max memory tokens: ", memoryTokens); console.log("[HypaV3] Reserved max memory tokens:", memoryTokens);
} }
// If summarization is needed // If summarization is needed
@@ -374,17 +379,17 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] Evaluating summarization batch:", "[HypaV3] Evaluating summarization batch:",
"\nCurrent Tokens: ", "\nCurrent Tokens:",
currentTokens, currentTokens,
"\nMax Context Tokens: ", "\nMax Context Tokens:",
maxContextTokens, maxContextTokens,
"\nStart Index: ", "\nStart Index:",
startIdx, startIdx,
"\nEnd Index: ", "\nEnd Index:",
endIdx, endIdx,
"\nChat Count: ", "\nChat Count:",
endIdx - startIdx, endIdx - startIdx,
"\nMax Chats Per Summary: ", "\nMax Chats Per Summary:",
db.hypaV3Settings.maxChatsPerSummary db.hypaV3Settings.maxChatsPerSummary
); );
@@ -394,13 +399,13 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] Evaluating chat:", "[HypaV3] Evaluating chat:",
"\nIndex: ", "\nIndex:",
i, i,
"\nRole: ", "\nRole:",
chat.role, chat.role,
"\nContent:\n", "\nContent:",
chat.content, "\n" + chat.content,
"\nTokens: ", "\nTokens:",
chatTokens chatTokens
); );
@@ -456,11 +461,11 @@ export async function hypaMemoryV3(
`[HypaV3] ${ `[HypaV3] ${
summarizationMode ? "Completed" : "Skipped" summarizationMode ? "Completed" : "Skipped"
} summarization phase:`, } summarization phase:`,
"\nCurrent Tokens: ", "\nCurrent Tokens:",
currentTokens, currentTokens,
"\nMax Context Tokens: ", "\nMax Context Tokens:",
maxContextTokens, maxContextTokens,
"\nAvailable Memory Tokens: ", "\nAvailable Memory Tokens:",
availableMemoryTokens availableMemoryTokens
); );
@@ -494,11 +499,11 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] After important memory selection:", "[HypaV3] After important memory selection:",
"\nSummary Count: ", "\nSummary Count:",
selectedImportantSummaries.length, selectedImportantSummaries.length,
"\nSummaries: ", "\nSummaries:",
selectedImportantSummaries, selectedImportantSummaries,
"\nAvailable Memory Tokens: ", "\nAvailable Memory Tokens:",
availableMemoryTokens availableMemoryTokens
); );
@@ -539,13 +544,13 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] After recent memory selection:", "[HypaV3] After recent memory selection:",
"\nSummary Count: ", "\nSummary Count:",
selectedRecentSummaries.length, selectedRecentSummaries.length,
"\nSummaries: ", "\nSummaries:",
selectedRecentSummaries, selectedRecentSummaries,
"\nReserved Recent Memory Tokens: ", "\nReserved Tokens:",
reservedRecentMemoryTokens, reservedRecentMemoryTokens,
"\nConsumed Recent Memory Tokens: ", "\nConsumed Tokens:",
consumedRecentMemoryTokens consumedRecentMemoryTokens
); );
} }
@@ -567,7 +572,7 @@ export async function hypaMemoryV3(
reservedSimilarMemoryTokens += unusedRecentTokens; reservedSimilarMemoryTokens += unusedRecentTokens;
console.log( console.log(
"[HypaV3] Additional available token space for similar memory:", "[HypaV3] Additional available token space for similar memory:",
"\nFrom recent: ", "\nFrom recent:",
unusedRecentTokens unusedRecentTokens
); );
} }
@@ -666,13 +671,13 @@ export async function hypaMemoryV3(
/* /*
console.log( console.log(
"[HypaV3] Trying to add similar summary:", "[HypaV3] Trying to add similar summary:",
"\nSummary Tokens: ", "\nSummary Tokens:",
summaryTokens, summaryTokens,
"\nConsumed Similar Memory Tokens: ", "\nConsumed Similar Memory Tokens:",
consumedSimilarMemoryTokens, consumedSimilarMemoryTokens,
"\nReserved Tokens: ", "\nReserved Tokens:",
reservedSimilarMemoryTokens, reservedSimilarMemoryTokens,
"\nWould exceed: ", "\nWould exceed:",
summaryTokens + consumedSimilarMemoryTokens > reservedSimilarMemoryTokens summaryTokens + consumedSimilarMemoryTokens > reservedSimilarMemoryTokens
); );
*/ */
@@ -695,13 +700,13 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] After similar memory selection:", "[HypaV3] After similar memory selection:",
"\nSummary Count: ", "\nSummary Count:",
selectedSimilarSummaries.length, selectedSimilarSummaries.length,
"\nSummaries: ", "\nSummaries:",
selectedSimilarSummaries, selectedSimilarSummaries,
"\nReserved Similar Memory Tokens: ", "\nReserved Tokens:",
reservedSimilarMemoryTokens, reservedSimilarMemoryTokens,
"\nConsumed Similar Memory Tokens: ", "\nConsumed Tokens:",
consumedSimilarMemoryTokens consumedSimilarMemoryTokens
); );
} }
@@ -724,11 +729,11 @@ export async function hypaMemoryV3(
reservedRandomMemoryTokens += unusedRecentTokens + unusedSimilarTokens; reservedRandomMemoryTokens += unusedRecentTokens + unusedSimilarTokens;
console.log( console.log(
"[HypaV3] Additional available token space for random memory:", "[HypaV3] Additional available token space for random memory:",
"\nFrom recent: ", "\nFrom recent:",
unusedRecentTokens, unusedRecentTokens,
"\nFrom similar: ", "\nFrom similar:",
unusedSimilarTokens, unusedSimilarTokens,
"\nTotal added: ", "\nTotal added:",
unusedRecentTokens + unusedSimilarTokens unusedRecentTokens + unusedSimilarTokens
); );
@@ -759,13 +764,13 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] After random memory selection:", "[HypaV3] After random memory selection:",
"\nSummary Count: ", "\nSummary Count:",
selectedRandomSummaries.length, selectedRandomSummaries.length,
"\nSummaries: ", "\nSummaries:",
selectedRandomSummaries, selectedRandomSummaries,
"\nReserved Random Memory Tokens: ", "\nReserved Tokens:",
reservedRandomMemoryTokens, reservedRandomMemoryTokens,
"\nConsumed Random Memory Tokens: ", "\nConsumed Tokens:",
consumedRandomMemoryTokens consumedRandomMemoryTokens
); );
} }
@@ -795,13 +800,13 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] Final memory selection:", "[HypaV3] Final memory selection:",
"\nSummary Count: ", "\nSummary Count:",
selectedSummaries.length, selectedSummaries.length,
"\nSummaries: ", "\nSummaries:",
selectedSummaries, selectedSummaries,
"\nReal Memory Tokens: ", "\nReal Memory Tokens:",
realMemoryTokens, realMemoryTokens,
"\nAvailable Memory Tokens: ", "\nAvailable Memory Tokens:",
availableMemoryTokens availableMemoryTokens
); );
@@ -811,6 +816,11 @@ export async function hypaMemoryV3(
); );
} }
// Save last selected summaries
data.lastSelectedSummaries = selectedSummaries.map((selectedSummary) =>
data.summaries.findIndex((summary) => summary === selectedSummary)
);
const newChats: OpenAIChat[] = [ const newChats: OpenAIChat[] = [
{ {
role: "system", role: "system",
@@ -822,11 +832,11 @@ export async function hypaMemoryV3(
console.log( console.log(
"[HypaV3] Exiting function:", "[HypaV3] Exiting function:",
"\nCurrent Tokens: ", "\nCurrent Tokens:",
currentTokens, currentTokens,
"\nAll chats, including memory prompt: ", "\nAll chats, including memory prompt:",
newChats, newChats,
"\nMemory Data: ", "\nMemory Data:",
data data
); );