on main help sign in
chore: change how summarize sessions gets triggered
commitf3f4d9d59d80490d34a3c256812e30fe9baf0a1e authorKujtim Hoxha <kujtimii.h@gmail.com> dateMon 30 Jun 2025, 15:00 (1 year ago) parentf0091c3
3 files changed+60−2
internal/config/config.go+38 internal/llm/agent/agent.go+5 internal/tui/tui.go+17−2
internal/config/config.go+38
@@ -860,6 +860,44 @@ func GetAgentModel(agentID AgentID) Model {
860860 return Model{}
861861}
862862
863+// GetAgentEffectiveMaxTokens returns the effective max tokens for an agent,
864+// considering any overrides from the preferred model configuration
865+func GetAgentEffectiveMaxTokens(agentID AgentID) int64 {
866+ cfg := Get()
867+ agent, ok := cfg.Agents[agentID]
868+ if !ok {
869+ logging.Error("Agent not found", "agent_id", agentID)
870+ return 0
871+ }
872+
873+ var preferredModel PreferredModel
874+ switch agent.Model {
875+ case LargeModel:
876+ preferredModel = cfg.Models.Large
877+ case SmallModel:
878+ preferredModel = cfg.Models.Small
879+ default:
880+ logging.Warn("Unknown model type for agent", "agent_id", agentID, "model_type", agent.Model)
881+ preferredModel = cfg.Models.Large // Fallback to large model
882+ }
883+
884+ // Get the base model configuration
885+ baseModel := GetAgentModel(agentID)
886+ if baseModel.ID == "" {
887+ return 0
888+ }
889+
890+ // Start with the default max tokens from the base model
891+ maxTokens := baseModel.DefaultMaxTokens
892+
893+ // Override with preferred model max tokens if set
894+ if preferredModel.MaxTokens > 0 {
895+ maxTokens = preferredModel.MaxTokens
896+ }
897+
898+ return maxTokens
899+}
900+
863901func GetAgentProvider(agentID AgentID) ProviderConfig {
864902 cfg := Get()
865903 agent, ok := cfg.Agents[agentID]
internal/llm/agent/agent.go+5
@@ -50,6 +50,7 @@ type AgentEvent struct {
5050type Service interface {
5151 pubsub.Suscriber[AgentEvent]
5252 Model() config.Model
53+ EffectiveMaxTokens() int64
5354 Run(ctx context.Context, sessionID string, content string, attachments ...message.Attachment) (<-chan AgentEvent, error)
5455 Cancel(sessionID string)
5556 CancelAll()
@@ -229,6 +230,10 @@ func (a *agent) Model() config.Model {
229230 return config.GetAgentModel(a.agentCfg.ID)
230231}
231232
233+func (a *agent) EffectiveMaxTokens() int64 {
234+ return config.GetAgentEffectiveMaxTokens(a.agentCfg.ID)
235+}
236+
232237func (a *agent) Cancel(sessionID string) {
233238 // Cancel regular requests
234239 if cancelFunc, exists := a.activeRequests.LoadAndDelete(sessionID); exists {
internal/tui/tui.go+17−2
@@ -228,8 +228,23 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
228228 if err == nil {
229229 model := a.app.CoderAgent.Model()
230230 contextWindow := model.ContextWindow
231− tokens := session.CompletionTokens + session.PromptTokens
232− if (tokens >= int64(float64(contextWindow)*0.95)) && !config.Get().Options.DisableAutoSummarize {
231+ usedTokens := session.CompletionTokens + session.PromptTokens
232+ remainingTokens := contextWindow - usedTokens
233+
234+ // Get effective max tokens for this agent (considering overrides)
235+ maxTokens := a.app.CoderAgent.EffectiveMaxTokens()
236+
237+ // Apply 10% margin to max tokens
238+ maxTokensWithMargin := int64(float64(maxTokens) * 1.1)
239+
240+ // Trigger auto-summarize if remaining tokens < max tokens + 10% margin
241+ // Also ensure we have a reasonable minimum threshold to avoid too-frequent summaries
242+ minThreshold := int64(1000) // Minimum 1000 tokens remaining before triggering
243+ if maxTokensWithMargin < minThreshold {
244+ maxTokensWithMargin = minThreshold
245+ }
246+
247+ if remainingTokens < maxTokensWithMargin && !config.Get().Options.DisableAutoSummarize {
233248 // Show compact confirmation dialog
234249 cmds = append(cmds, util.CmdHandler(dialogs.OpenDialogMsg{
235250 Model: compact.NewCompactDialogCmp(a.app.CoderAgent, a.selectedSessionID, false),