From a1158ebdb13bcf56151db38c1b5e5c9034fe2bbf Mon Sep 17 00:00:00 2001
From: Bo26fhmC5M <88071760+Bo26fhmC5M@users.noreply.github.com>
Date: Mon, 13 Jan 2025 14:09:18 +0900
Subject: [PATCH] fix: adjust memory selection order
---
src/lib/Setting/Pages/OtherBotSettings.svelte | 8 +-
src/ts/process/memory/hypav3.ts | 167 +++++++++---------
src/ts/storage/database.svelte.ts | 4 +-
3 files changed, 90 insertions(+), 89 deletions(-)
diff --git a/src/lib/Setting/Pages/OtherBotSettings.svelte b/src/lib/Setting/Pages/OtherBotSettings.svelte
index 032054aa..086e234a 100644
--- a/src/lib/Setting/Pages/OtherBotSettings.svelte
+++ b/src/lib/Setting/Pages/OtherBotSettings.svelte
@@ -478,15 +478,15 @@
Memory Tokens Ratio
Extra Summarization Ratio
-
+
Max Chats Per Summary
Recent Memory Ratio
-
+
Similar Memory Ratio
-
+
Random Memory Ratio
-
+
diff --git a/src/ts/process/memory/hypav3.ts b/src/ts/process/memory/hypav3.ts
index e198734a..7991d886 100644
--- a/src/ts/process/memory/hypav3.ts
+++ b/src/ts/process/memory/hypav3.ts
@@ -228,14 +228,14 @@ export async function hypaMemoryV3(
// Validate settings
if (
- db.hypaV3Settings.similarMemoryRatio + db.hypaV3Settings.randomMemoryRatio >
+ db.hypaV3Settings.recentMemoryRatio + db.hypaV3Settings.similarMemoryRatio >
1
) {
return {
currentTokens,
chats,
error:
- "[HypaV3] The sum of Similar Memory Ratio and Random Memory Ratio is greater than 1.",
+ "[HypaV3] The sum of Recent Memory Ratio and Similar Memory Ratio is greater than 1.",
};
}
@@ -445,18 +445,18 @@ export async function hypaMemoryV3(
);
const selectedSummaries: Summary[] = [];
+ const randomMemoryRatio =
+ 1 -
+ db.hypaV3Settings.recentMemoryRatio -
+ db.hypaV3Settings.similarMemoryRatio;
// Select recent summaries
- const recentMemoryRatio =
- 1 -
- db.hypaV3Settings.similarMemoryRatio -
- db.hypaV3Settings.randomMemoryRatio;
const reservedRecentMemoryTokens = Math.floor(
- availableMemoryTokens * recentMemoryRatio
+ availableMemoryTokens * db.hypaV3Settings.recentMemoryRatio
);
let consumedRecentMemoryTokens = 0;
- if (recentMemoryRatio > 0) {
+ if (db.hypaV3Settings.recentMemoryRatio > 0) {
const selectedRecentSummaries: Summary[] = [];
// Add one by one from the end
@@ -493,91 +493,28 @@ export async function hypaMemoryV3(
);
}
- // Select random summaries
- let reservedRandomMemoryTokens = Math.floor(
- availableMemoryTokens * db.hypaV3Settings.randomMemoryRatio
+ // Select similar summaries
+ let reservedSimilarMemoryTokens = Math.floor(
+ availableMemoryTokens * db.hypaV3Settings.similarMemoryRatio
);
- let consumedRandomMemoryTokens = 0;
+ let consumedSimilarMemoryTokens = 0;
- if (db.hypaV3Settings.randomMemoryRatio > 0) {
- const selectedRandomSummaries: Summary[] = [];
+ if (db.hypaV3Settings.similarMemoryRatio > 0) {
+ const selectedSimilarSummaries: Summary[] = [];
// Utilize unused token space from recent selection
- if (db.hypaV3Settings.similarMemoryRatio === 0) {
+ if (randomMemoryRatio <= 0) {
const unusedRecentTokens =
reservedRecentMemoryTokens - consumedRecentMemoryTokens;
- reservedRandomMemoryTokens += unusedRecentTokens;
+ reservedSimilarMemoryTokens += unusedRecentTokens;
console.log(
- "[HypaV3] Additional available token space for random memory:",
+ "[HypaV3] Additional available token space for similar memory:",
"\nFrom recent:",
unusedRecentTokens
);
}
- // Target only summaries that haven't been selected yet
- const unusedSummaries = data.summaries
- .filter((e) => !selectedSummaries.includes(e))
- .sort(() => Math.random() - 0.5); // Random shuffle
-
- for (const summary of unusedSummaries) {
- const summaryTokens = await tokenizer.tokenizeChat({
- role: "system",
- content: summary.text + summarySeparator,
- });
-
- if (
- summaryTokens + consumedRandomMemoryTokens >
- reservedRandomMemoryTokens
- ) {
- // Trying to select more random memory
- continue;
- }
-
- selectedRandomSummaries.push(summary);
- consumedRandomMemoryTokens += summaryTokens;
- }
-
- selectedSummaries.push(...selectedRandomSummaries);
-
- console.log(
- "[HypaV3] After random memory selection:",
- "\nSummary Count:",
- selectedRandomSummaries.length,
- "\nSummaries:",
- selectedRandomSummaries,
- "\nReserved Random Memory Tokens:",
- reservedRandomMemoryTokens,
- "\nConsumed Random Memory Tokens:",
- consumedRandomMemoryTokens
- );
- }
-
- // Select similar summaries
- if (db.hypaV3Settings.similarMemoryRatio > 0) {
- let reservedSimilarMemoryTokens = Math.floor(
- availableMemoryTokens * db.hypaV3Settings.similarMemoryRatio
- );
- let consumedSimilarMemoryTokens = 0;
- const selectedSimilarSummaries: Summary[] = [];
-
- // Utilize unused token space from recent and random selection
- const unusedRecentTokens =
- reservedRecentMemoryTokens - consumedRecentMemoryTokens;
- const unusedRandomTokens =
- reservedRandomMemoryTokens - consumedRandomMemoryTokens;
-
- reservedSimilarMemoryTokens += unusedRecentTokens + unusedRandomTokens;
- console.log(
- "[HypaV3] Additional available token space for similar memory:",
- "\nFrom recent:",
- unusedRecentTokens,
- "\nFrom random:",
- unusedRandomTokens,
- "\nTotal added:",
- unusedRecentTokens + unusedRandomTokens
- );
-
// Target only summaries that haven't been selected yet
const unusedSummaries = data.summaries.filter(
(e) => !selectedSummaries.includes(e)
@@ -697,10 +634,10 @@ export async function hypaMemoryV3(
"[HypaV3] Trying to add similar summary:",
"\nSummary Tokens:",
summaryTokens,
- "\nAvailable Tokens:",
- availableSimilarMemoryTokens,
+ "\nReserved Tokens:",
+ reservedSimilarMemoryTokens,
"\nWould exceed:",
- summaryTokens > availableSimilarMemoryTokens
+ summaryTokens + consumedSimilarMemoryTokens > reservedSimilarMemoryTokens
);
*/
@@ -733,6 +670,70 @@ export async function hypaMemoryV3(
);
}
+ // Select random summaries
+ let reservedRandomMemoryTokens = Math.floor(
+ availableMemoryTokens * randomMemoryRatio
+ );
+ let consumedRandomMemoryTokens = 0;
+
+ if (randomMemoryRatio > 0) {
+ const selectedRandomSummaries: Summary[] = [];
+
+ // Utilize unused token space from recent and similar selection
+ const unusedRecentTokens =
+ reservedRecentMemoryTokens - consumedRecentMemoryTokens;
+ const unusedSimilarTokens =
+ reservedSimilarMemoryTokens - consumedSimilarMemoryTokens;
+
+ reservedRandomMemoryTokens += unusedRecentTokens + unusedSimilarTokens;
+ console.log(
+ "[HypaV3] Additional available token space for random memory:",
+ "\nFrom recent:",
+ unusedRecentTokens,
+ "\nFrom similar:",
+ unusedSimilarTokens,
+ "\nTotal added:",
+ unusedRecentTokens + unusedSimilarTokens
+ );
+
+ // Target only summaries that haven't been selected yet
+ const unusedSummaries = data.summaries
+ .filter((e) => !selectedSummaries.includes(e))
+ .sort(() => Math.random() - 0.5); // Random shuffle
+
+ for (const summary of unusedSummaries) {
+ const summaryTokens = await tokenizer.tokenizeChat({
+ role: "system",
+ content: summary.text + summarySeparator,
+ });
+
+ if (
+ summaryTokens + consumedRandomMemoryTokens >
+ reservedRandomMemoryTokens
+ ) {
+ // Trying to select more random memory
+ continue;
+ }
+
+ selectedRandomSummaries.push(summary);
+ consumedRandomMemoryTokens += summaryTokens;
+ }
+
+ selectedSummaries.push(...selectedRandomSummaries);
+
+ console.log(
+ "[HypaV3] After random memory selection:",
+ "\nSummary Count:",
+ selectedRandomSummaries.length,
+ "\nSummaries:",
+ selectedRandomSummaries,
+ "\nReserved Random Memory Tokens:",
+ reservedRandomMemoryTokens,
+ "\nConsumed Random Memory Tokens:",
+ consumedRandomMemoryTokens
+ );
+ }
+
// Sort selected summaries chronologically (by index)
selectedSummaries.sort(
(a, b) => data.summaries.indexOf(a) - data.summaries.indexOf(b)
diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts
index 50208b49..3f98c824 100644
--- a/src/ts/storage/database.svelte.ts
+++ b/src/ts/storage/database.svelte.ts
@@ -474,8 +474,8 @@ export function setDatabase(data:Database){
memoryTokensRatio: data.hypaV3Settings?.memoryTokensRatio ?? 0.2,
extraSummarizationRatio: data.hypaV3Settings?.extraSummarizationRatio ?? 0.2,
maxChatsPerSummary: data.hypaV3Settings?.maxChatsPerSummary ?? 4,
+ recentMemoryRatio: data.hypaV3Settings?.recentMemoryRatio ?? 0.4,
similarMemoryRatio: data.hypaV3Settings?.similarMemoryRatio ?? 0.4,
- randomMemoryRatio: data.hypaV3Settings?.randomMemoryRatio ?? 0.2,
enableSimilarityCorrection: data.hypaV3Settings?.enableSimilarityCorrection ?? false,
preserveOrphanedMemory: data.hypaV3Settings?.preserveOrphanedMemory ?? false
}
@@ -886,8 +886,8 @@ export interface Database{
memoryTokensRatio: number
extraSummarizationRatio: number
maxChatsPerSummary: number
+ recentMemoryRatio: number
similarMemoryRatio: number
- randomMemoryRatio: number
enableSimilarityCorrection: boolean
preserveOrphanedMemory: boolean
}