feat(compaction): configurable provider, model & max_tokens for pending message compaction

Add Provider, Model, MaxTokens to PendingCompactionConfig so users can
override the LLM used for pending message summarization via the config
UI. Falls back to agent's provider/model when not set. Increase default
max_tokens from 512 to 4096. Add allowEmpty prop to ProviderModelSelect
to prevent auto-selecting first provider when empty means "use default".
This commit is contained in:
viettranx committed 2026-03-10 14:27:15 +07:00
1 parent 004f6055ff
commit 1ddd2e547a
10 files changed
+167 -35

No files matched your search

+10 -1
View File
@@ -14,6 +14,7 @@ import (
"github.com/nextlevelbuilder/goclaw/internal/agent"
"github.com/nextlevelbuilder/goclaw/internal/bootstrap"
"github.com/nextlevelbuilder/goclaw/internal/bus"
"github.com/nextlevelbuilder/goclaw/internal/cache"
"github.com/nextlevelbuilder/goclaw/internal/channels"
"github.com/nextlevelbuilder/goclaw/internal/channels/discord"
"github.com/nextlevelbuilder/goclaw/internal/channels/feishu"
@@ -618,6 +619,8 @@ func runGateway() {
if pendingMessagesH != nil {
if pc := cfg.Channels.PendingCompaction; pc != nil {
pendingMessagesH.SetKeepRecent(pc.KeepRecent)
pendingMessagesH.SetMaxTokens(pc.MaxTokens)
pendingMessagesH.SetProviderModel(pc.Provider, pc.Model)
}
server.SetPendingMessagesHandler(pendingMessagesH)
}
@@ -852,7 +855,13 @@ func runGateway() {
webFetchTool.UpdatePolicy(updatedCfg.Tools.WebFetch.Policy, updatedCfg.Tools.WebFetch.AllowedDomains, updatedCfg.Tools.WebFetch.BlockedDomains)
})
go consumeInboundMessages(ctx, msgBus, agentRouter, cfg, sched, channelMgr, consumerTeamStore, quotaChecker, delegateMgr, pgStores.Sessions, pgStores.Agents)
// Contact collector: auto-collect user info from channels with in-memory dedup cache.
var contactCollector *store.ContactCollector
if pgStores.Contacts != nil {
contactCollector = store.NewContactCollector(pgStores.Contacts, cache.NewInMemoryCache[bool]())
}
go consumeInboundMessages(ctx, msgBus, agentRouter, cfg, sched, channelMgr, consumerTeamStore, quotaChecker, delegateMgr, pgStores.Sessions, pgStores.Agents, contactCollector)
go func() {
sig := <-sigCh