mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
feat: add context compaction to automatically summarize old messages (#compaction) (#276)
When input tokens exceed a configurable threshold after a conversation round, the system asynchronously compacts older messages into a summary. Cascading compactions reference prior summaries via <prior_context> tags to maintain conversational continuity without duplicating content. - Add bot_history_message_compacts table and compact_id on messages - Add compaction_enabled, compaction_threshold, compaction_model_id to bots - Implement compaction service (internal/compaction) with LLM summarization - Integrate into conversation flow: replace compacted messages with summaries wrapped in <summary> tags during context loading - Add REST API endpoints (GET/DELETE /bots/:bot_id/compaction/logs) - Add frontend Compaction tab with settings and log viewer - Wire compaction service into both dev (cmd/agent) and prod (cmd/memoh) entry points - Update test mocks to include new GetBotByID columns
This commit is contained in:
@@ -148,6 +148,7 @@ SELECT
|
||||
m.content,
|
||||
m.metadata,
|
||||
m.usage,
|
||||
m.compact_id,
|
||||
m.created_at,
|
||||
ci.display_name AS sender_display_name,
|
||||
ci.avatar_url AS sender_avatar_url,
|
||||
@@ -173,6 +174,7 @@ SELECT
|
||||
m.content,
|
||||
m.metadata,
|
||||
m.usage,
|
||||
m.compact_id,
|
||||
m.created_at,
|
||||
ci.display_name AS sender_display_name,
|
||||
ci.avatar_url AS sender_avatar_url,
|
||||
@@ -360,3 +362,16 @@ WHERE m.bot_id = sqlc.arg(bot_id)
|
||||
) ILIKE '%' || sqlc.narg(keyword)::text || '%')
|
||||
ORDER BY m.created_at DESC
|
||||
LIMIT sqlc.arg(max_count);
|
||||
|
||||
-- name: MarkMessagesCompacted :exec
|
||||
UPDATE bot_history_messages
|
||||
SET compact_id = $1
|
||||
WHERE id = ANY($2::uuid[]);
|
||||
|
||||
-- name: ListUncompactedMessagesBySession :many
|
||||
SELECT id, chat_id, session_id, role, content, usage, platform, external_message_id, sender_channel_identity_id, compact_id, created_at
|
||||
FROM bot_history_messages
|
||||
WHERE session_id = $1
|
||||
AND compact_id IS NULL
|
||||
AND is_active = true
|
||||
ORDER BY created_at ASC;
|
||||
|
||||
Reference in New Issue
Block a user