refinement fixes
This commit is contained in:
@@ -73,9 +73,12 @@ async function generateSummary(episodes, existingSummary = null) {
|
||||
return content;
|
||||
}
|
||||
|
||||
async function maybeSummarize(session, allEpisodes) {
|
||||
// 1. Sum total tokens for this session
|
||||
const totalTokens = allEpisodes.reduce((sum, ep) => sum + (ep.token_count || 0), 0);
|
||||
async function maybeSummarize(session) {
|
||||
// 1. Cheap aggregate — is this session even over the token threshold?
|
||||
// Avoids pulling every episode row on messages that won't summarize.
|
||||
const statsRes = await fetch(`${MEMORY_URL}/sessions/${session.id}/episode-stats`);
|
||||
if (!statsRes.ok) return;
|
||||
const { totalTokens } = await statsRes.json();
|
||||
if (totalTokens < THRESHOLD_TOKENS) return; // under threshold — nothing to do
|
||||
|
||||
// 2. Fetch existing summaries for session
|
||||
@@ -84,26 +87,23 @@ async function maybeSummarize(session, allEpisodes) {
|
||||
const summaries = await summariesRes.json();
|
||||
|
||||
const latest = summaries.at(-1) ?? null;
|
||||
const lastCoveredId = latest
|
||||
? parseInt(latest.episode_range?.split('-').at(-1)) || 0
|
||||
const lastCoveredId = latest
|
||||
? parseInt(latest.episode_range?.split('-').at(-1)) || 0
|
||||
: 0;
|
||||
// 3. Guard — don't re-summarize until MIN_EPISODES_SINCE new episodes have accumulated
|
||||
if (latest) {
|
||||
const newEpisodes = allEpisodes.filter(ep => ep.id > lastCoveredId);
|
||||
if (newEpisodes.length < MIN_EPISODES_SINCE) return;
|
||||
}
|
||||
|
||||
// 4. Determine episodes to summarize
|
||||
const episodesToSummarize = latest
|
||||
? allEpisodes.filter(ep => ep.id > lastCoveredId)
|
||||
: allEpisodes;
|
||||
// 3. Fetch only the un-summarized tail (full text), not the whole session.
|
||||
// With no prior summary, lastCoveredId is 0 → this returns all episodes.
|
||||
const episodesToSummarize = await fetch(`${MEMORY_URL}/sessions/${session.id}/episodes/since/${lastCoveredId}`)
|
||||
.then(r => r.ok ? r.json() : []);
|
||||
|
||||
// 4. Guard — don't re-summarize until MIN_EPISODES_SINCE new episodes have accumulated
|
||||
if (latest && episodesToSummarize.length < MIN_EPISODES_SINCE) return;
|
||||
if (episodesToSummarize.length === 0) return;
|
||||
|
||||
// 5. Determine episode range from the episodes actually being summarized
|
||||
const summarizedIds = episodesToSummarize.map(ep => ep.id).sort((a,b) => a - b);
|
||||
const summarizedIds = episodesToSummarize.map(ep => ep.id).sort((a, b) => a - b);
|
||||
const episodeRange = `${summarizedIds.at(0)}-${summarizedIds.at(-1)}`;
|
||||
const totalEpisodeTokens = allEpisodes.reduce((sum, ep) => sum + (ep.token_count || 0), 0);
|
||||
|
||||
// add temporarily before the generateSummary call
|
||||
logger.debug('[summarization] episodes to summarize:', episodesToSummarize.length);
|
||||
|
||||
const content = await generateSummary(
|
||||
@@ -122,7 +122,7 @@ async function maybeSummarize(session, allEpisodes) {
|
||||
body: JSON.stringify({
|
||||
sessionId: session.id,
|
||||
content,
|
||||
tokenCount: totalEpisodeTokens,
|
||||
tokenCount: totalTokens,
|
||||
episodeRange,
|
||||
}),
|
||||
});
|
||||
@@ -133,7 +133,7 @@ async function maybeSummarize(session, allEpisodes) {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
content,
|
||||
tokenCount: totalEpisodeTokens,
|
||||
tokenCount: totalTokens,
|
||||
episodeRange,
|
||||
}),
|
||||
});
|
||||
@@ -141,9 +141,9 @@ async function maybeSummarize(session, allEpisodes) {
|
||||
}
|
||||
}
|
||||
|
||||
async function triggerSummary(session, allEpisodes) {
|
||||
async function triggerSummary(session) {
|
||||
// Intentionally fire-and-forget — caller doesn't await this
|
||||
maybeSummarize(session, allEpisodes).catch(err =>
|
||||
maybeSummarize(session).catch(err =>
|
||||
logger.warn('[summarization] Summary failed (non-critical):', err.message)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user