fix: adjust memory selection order
This commit is contained in:
@@ -478,15 +478,15 @@
|
|||||||
<span class="text-textcolor">Memory Tokens Ratio</span>
|
<span class="text-textcolor">Memory Tokens Ratio</span>
|
||||||
<SliderInput marginBottom min={0} max={1} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.memoryTokensRatio}/>
|
<SliderInput marginBottom min={0} max={1} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.memoryTokensRatio}/>
|
||||||
<span class="text-textcolor">Extra Summarization Ratio</span>
|
<span class="text-textcolor">Extra Summarization Ratio</span>
|
||||||
<SliderInput marginBottom min={0} max={1-DBState.db.hypaV3Settings.memoryTokensRatio} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.extraSummarizationRatio}/>
|
<SliderInput marginBottom min={0} max={1 - DBState.db.hypaV3Settings.memoryTokensRatio} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.extraSummarizationRatio}/>
|
||||||
<span class="text-textcolor">Max Chats Per Summary</span>
|
<span class="text-textcolor">Max Chats Per Summary</span>
|
||||||
<NumberInput size="sm" marginBottom bind:value={DBState.db.hypaV3Settings.maxChatsPerSummary} min={1} />
|
<NumberInput size="sm" marginBottom bind:value={DBState.db.hypaV3Settings.maxChatsPerSummary} min={1} />
|
||||||
<span class="text-textcolor">Recent Memory Ratio</span>
|
<span class="text-textcolor">Recent Memory Ratio</span>
|
||||||
<NumberInput size="sm" marginBottom value={parseFloat((1 - DBState.db.hypaV3Settings.similarMemoryRatio - DBState.db.hypaV3Settings.randomMemoryRatio).toFixed(2))} disabled/>
|
<SliderInput marginBottom min={0} max={1} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.recentMemoryRatio}/>
|
||||||
<span class="text-textcolor">Similar Memory Ratio</span>
|
<span class="text-textcolor">Similar Memory Ratio</span>
|
||||||
<SliderInput marginBottom min={0} max={1} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.similarMemoryRatio}/>
|
<SliderInput marginBottom min={0} max={1 - DBState.db.hypaV3Settings.recentMemoryRatio} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.similarMemoryRatio}/>
|
||||||
<span class="text-textcolor">Random Memory Ratio</span>
|
<span class="text-textcolor">Random Memory Ratio</span>
|
||||||
<SliderInput marginBottom min={0} max={1} step={0.01} fixed={2} bind:value={DBState.db.hypaV3Settings.randomMemoryRatio}/>
|
<NumberInput size="sm" marginBottom value={parseFloat((1 - DBState.db.hypaV3Settings.recentMemoryRatio - DBState.db.hypaV3Settings.similarMemoryRatio).toFixed(2))} disabled/>
|
||||||
<div class="flex mb-2">
|
<div class="flex mb-2">
|
||||||
<Check bind:check={DBState.db.hypaV3Settings.enableSimilarityCorrection} name="Enable Similarity Correction"/>
|
<Check bind:check={DBState.db.hypaV3Settings.enableSimilarityCorrection} name="Enable Similarity Correction"/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -228,14 +228,14 @@ export async function hypaMemoryV3(
|
|||||||
|
|
||||||
// Validate settings
|
// Validate settings
|
||||||
if (
|
if (
|
||||||
db.hypaV3Settings.similarMemoryRatio + db.hypaV3Settings.randomMemoryRatio >
|
db.hypaV3Settings.recentMemoryRatio + db.hypaV3Settings.similarMemoryRatio >
|
||||||
1
|
1
|
||||||
) {
|
) {
|
||||||
return {
|
return {
|
||||||
currentTokens,
|
currentTokens,
|
||||||
chats,
|
chats,
|
||||||
error:
|
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 selectedSummaries: Summary[] = [];
|
||||||
|
const randomMemoryRatio =
|
||||||
|
1 -
|
||||||
|
db.hypaV3Settings.recentMemoryRatio -
|
||||||
|
db.hypaV3Settings.similarMemoryRatio;
|
||||||
|
|
||||||
// Select recent summaries
|
// Select recent summaries
|
||||||
const recentMemoryRatio =
|
|
||||||
1 -
|
|
||||||
db.hypaV3Settings.similarMemoryRatio -
|
|
||||||
db.hypaV3Settings.randomMemoryRatio;
|
|
||||||
const reservedRecentMemoryTokens = Math.floor(
|
const reservedRecentMemoryTokens = Math.floor(
|
||||||
availableMemoryTokens * recentMemoryRatio
|
availableMemoryTokens * db.hypaV3Settings.recentMemoryRatio
|
||||||
);
|
);
|
||||||
let consumedRecentMemoryTokens = 0;
|
let consumedRecentMemoryTokens = 0;
|
||||||
|
|
||||||
if (recentMemoryRatio > 0) {
|
if (db.hypaV3Settings.recentMemoryRatio > 0) {
|
||||||
const selectedRecentSummaries: Summary[] = [];
|
const selectedRecentSummaries: Summary[] = [];
|
||||||
|
|
||||||
// Add one by one from the end
|
// Add one by one from the end
|
||||||
@@ -493,91 +493,28 @@ export async function hypaMemoryV3(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select random summaries
|
// Select similar summaries
|
||||||
let reservedRandomMemoryTokens = Math.floor(
|
let reservedSimilarMemoryTokens = Math.floor(
|
||||||
availableMemoryTokens * db.hypaV3Settings.randomMemoryRatio
|
availableMemoryTokens * db.hypaV3Settings.similarMemoryRatio
|
||||||
);
|
);
|
||||||
let consumedRandomMemoryTokens = 0;
|
let consumedSimilarMemoryTokens = 0;
|
||||||
|
|
||||||
if (db.hypaV3Settings.randomMemoryRatio > 0) {
|
if (db.hypaV3Settings.similarMemoryRatio > 0) {
|
||||||
const selectedRandomSummaries: Summary[] = [];
|
const selectedSimilarSummaries: Summary[] = [];
|
||||||
|
|
||||||
// Utilize unused token space from recent selection
|
// Utilize unused token space from recent selection
|
||||||
if (db.hypaV3Settings.similarMemoryRatio === 0) {
|
if (randomMemoryRatio <= 0) {
|
||||||
const unusedRecentTokens =
|
const unusedRecentTokens =
|
||||||
reservedRecentMemoryTokens - consumedRecentMemoryTokens;
|
reservedRecentMemoryTokens - consumedRecentMemoryTokens;
|
||||||
|
|
||||||
reservedRandomMemoryTokens += unusedRecentTokens;
|
reservedSimilarMemoryTokens += unusedRecentTokens;
|
||||||
console.log(
|
console.log(
|
||||||
"[HypaV3] Additional available token space for random memory:",
|
"[HypaV3] Additional available token space for similar memory:",
|
||||||
"\nFrom recent:",
|
"\nFrom recent:",
|
||||||
unusedRecentTokens
|
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
|
// Target only summaries that haven't been selected yet
|
||||||
const unusedSummaries = data.summaries.filter(
|
const unusedSummaries = data.summaries.filter(
|
||||||
(e) => !selectedSummaries.includes(e)
|
(e) => !selectedSummaries.includes(e)
|
||||||
@@ -697,10 +634,10 @@ export async function hypaMemoryV3(
|
|||||||
"[HypaV3] Trying to add similar summary:",
|
"[HypaV3] Trying to add similar summary:",
|
||||||
"\nSummary Tokens:",
|
"\nSummary Tokens:",
|
||||||
summaryTokens,
|
summaryTokens,
|
||||||
"\nAvailable Tokens:",
|
"\nReserved Tokens:",
|
||||||
availableSimilarMemoryTokens,
|
reservedSimilarMemoryTokens,
|
||||||
"\nWould exceed:",
|
"\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)
|
// Sort selected summaries chronologically (by index)
|
||||||
selectedSummaries.sort(
|
selectedSummaries.sort(
|
||||||
(a, b) => data.summaries.indexOf(a) - data.summaries.indexOf(b)
|
(a, b) => data.summaries.indexOf(a) - data.summaries.indexOf(b)
|
||||||
|
|||||||
@@ -474,8 +474,8 @@ export function setDatabase(data:Database){
|
|||||||
memoryTokensRatio: data.hypaV3Settings?.memoryTokensRatio ?? 0.2,
|
memoryTokensRatio: data.hypaV3Settings?.memoryTokensRatio ?? 0.2,
|
||||||
extraSummarizationRatio: data.hypaV3Settings?.extraSummarizationRatio ?? 0.2,
|
extraSummarizationRatio: data.hypaV3Settings?.extraSummarizationRatio ?? 0.2,
|
||||||
maxChatsPerSummary: data.hypaV3Settings?.maxChatsPerSummary ?? 4,
|
maxChatsPerSummary: data.hypaV3Settings?.maxChatsPerSummary ?? 4,
|
||||||
|
recentMemoryRatio: data.hypaV3Settings?.recentMemoryRatio ?? 0.4,
|
||||||
similarMemoryRatio: data.hypaV3Settings?.similarMemoryRatio ?? 0.4,
|
similarMemoryRatio: data.hypaV3Settings?.similarMemoryRatio ?? 0.4,
|
||||||
randomMemoryRatio: data.hypaV3Settings?.randomMemoryRatio ?? 0.2,
|
|
||||||
enableSimilarityCorrection: data.hypaV3Settings?.enableSimilarityCorrection ?? false,
|
enableSimilarityCorrection: data.hypaV3Settings?.enableSimilarityCorrection ?? false,
|
||||||
preserveOrphanedMemory: data.hypaV3Settings?.preserveOrphanedMemory ?? false
|
preserveOrphanedMemory: data.hypaV3Settings?.preserveOrphanedMemory ?? false
|
||||||
}
|
}
|
||||||
@@ -886,8 +886,8 @@ export interface Database{
|
|||||||
memoryTokensRatio: number
|
memoryTokensRatio: number
|
||||||
extraSummarizationRatio: number
|
extraSummarizationRatio: number
|
||||||
maxChatsPerSummary: number
|
maxChatsPerSummary: number
|
||||||
|
recentMemoryRatio: number
|
||||||
similarMemoryRatio: number
|
similarMemoryRatio: number
|
||||||
randomMemoryRatio: number
|
|
||||||
enableSimilarityCorrection: boolean
|
enableSimilarityCorrection: boolean
|
||||||
preserveOrphanedMemory: boolean
|
preserveOrphanedMemory: boolean
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user