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

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