From cf48e560821cda5c6819d22878828df994573a2e Mon Sep 17 00:00:00 2001 From: Bo26fhmC5M <88071760+Bo26fhmC5M@users.noreply.github.com> Date: Sat, 5 Apr 2025 16:24:16 +0900 Subject: [PATCH 1/2] fix: check empty summarization result in HypaV3 --- src/ts/process/memory/hypav3.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ts/process/memory/hypav3.ts b/src/ts/process/memory/hypav3.ts index 1ce2489e..8285a362 100644 --- a/src/ts/process/memory/hypav3.ts +++ b/src/ts/process/memory/hypav3.ts @@ -445,7 +445,11 @@ export async function hypaMemoryV3( if (toSummarize.length > 0) { const summarizeResult = await retryableSummarize(toSummarize); - if (!summarizeResult.success) { + if ( + !summarizeResult.success || + !summarizeResult.data || + summarizeResult.data.trim().length === 0 + ) { return { currentTokens, chats, @@ -670,7 +674,11 @@ export async function hypaMemoryV3( const recentChats = chats.slice(-minChatsForSimilarity); const summarizeResult = await retryableSummarize(recentChats); - if (!summarizeResult.success) { + if ( + !summarizeResult.success || + !summarizeResult.data || + summarizeResult.data.trim().length === 0 + ) { return { currentTokens, chats, From e8b93dba41b30153cf5e43f74e19988f881b9fbd Mon Sep 17 00:00:00 2001 From: Bo26fhmC5M <88071760+Bo26fhmC5M@users.noreply.github.com> Date: Sat, 5 Apr 2025 17:01:19 +0900 Subject: [PATCH 2/2] fix: handle similarity search error in HypaV3 --- src/ts/process/memory/hypav3.ts | 63 +++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/src/ts/process/memory/hypav3.ts b/src/ts/process/memory/hypav3.ts index 8285a362..f1e9f8a1 100644 --- a/src/ts/process/memory/hypav3.ts +++ b/src/ts/process/memory/hypav3.ts @@ -646,7 +646,16 @@ export async function hypaMemoryV3( processor.oaikey = db.supaMemoryKey; // Add summaryChunks to processor for similarity search - await processor.addSummaryChunks(summaryChunks); + try { + await processor.addSummaryChunks(summaryChunks); + } catch (error) { + return { + currentTokens, + chats, + error: `[HypaV3] Similarity search failed: ${error}`, + memory: toSerializableHypaV3Data(data), + }; + } const scoredSummaries = new Map(); @@ -656,15 +665,24 @@ export async function hypaMemoryV3( if (!pop) break; - const searched = await processor.similaritySearchScoredEx(pop.content); + try { + const searched = await processor.similaritySearchScoredEx(pop.content); - for (const [chunk, similarity] of searched) { - const summary = chunk.summary; + for (const [chunk, similarity] of searched) { + const summary = chunk.summary; - scoredSummaries.set( - summary, - (scoredSummaries.get(summary) || 0) + similarity - ); + scoredSummaries.set( + summary, + (scoredSummaries.get(summary) || 0) + similarity + ); + } + } catch (error) { + return { + currentTokens, + chats, + error: `[HypaV3] Similarity search failed: ${error}`, + memory: toSerializableHypaV3Data(data), + }; } } @@ -687,17 +705,26 @@ export async function hypaMemoryV3( }; } - const searched = await processor.similaritySearchScoredEx( - summarizeResult.data - ); - - for (const [chunk, similarity] of searched) { - const summary = chunk.summary; - - scoredSummaries.set( - summary, - (scoredSummaries.get(summary) || 0) + similarity + try { + const searched = await processor.similaritySearchScoredEx( + summarizeResult.data ); + + for (const [chunk, similarity] of searched) { + const summary = chunk.summary; + + scoredSummaries.set( + summary, + (scoredSummaries.get(summary) || 0) + similarity + ); + } + } catch (error) { + return { + currentTokens, + chats, + error: `[HypaV3] Similarity search failed: ${error}`, + memory: toSerializableHypaV3Data(data), + }; } console.log("[HypaV3] Similarity corrected.");