fix: address PR review comments for TLDR feature

- Add TLDRIncludeMessage config option for privacy in group chats
- Add i18n.go with function-based message templates
- Deduplicate executed tools to prevent unbounded growth
- Replace strings.Builder with fmt.Sprintf for cleaner code
- Move deduplication to single pass before generateTLDR call
This commit is contained in:
instax-dutta 2026-03-03 18:03:08 +05:30
parent ad070267fd
commit 63bd30e82b
3 changed files with 43 additions and 27 deletions

25
pkg/agent/i18n.go Normal file
View file

@ -0,0 +1,25 @@
package agent
import "fmt"
func tldrWithToolsMessage(toolCount int, tools string, iteration int) string {
return fmt.Sprintf("Processed %d tool(s): %s. (%d iteration%s)", toolCount, tools, iteration, pluralize(iteration))
}
func tldrNoToolsMessage(iteration int) string {
return fmt.Sprintf("Processed your request (%d iteration%s)", iteration, pluralize(iteration))
}
func tldrWithMessage(msg string) string {
if len(msg) <= 50 {
return fmt.Sprintf(". Message: \"%s\"", msg)
}
return fmt.Sprintf(". Message: \"%s...\"", msg[:50])
}
func pluralize(n int) string {
if n > 1 {
return "s"
}
return ""
}

View file

@ -12,7 +12,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
@ -529,7 +528,16 @@ func (al *AgentLoop) runAgentLoop(ctx context.Context, agent *AgentInstance, opt
// 5. Handle empty response // 5. Handle empty response
if finalContent == "" { if finalContent == "" {
finalContent = generateTLDR(opts.UserMessage, executedTools, iteration) // Deduplicate tools for TLDR
seen := make(map[string]bool)
uniqueTools := make([]string, 0, len(executedTools))
for _, t := range executedTools {
if !seen[t] {
seen[t] = true
uniqueTools = append(uniqueTools, t)
}
}
finalContent = generateTLDR(opts.UserMessage, uniqueTools, iteration, al.cfg.Agents.Defaults.TLDRIncludeMessage)
} }
// 6. Save final assistant message to session // 6. Save final assistant message to session
@ -1358,36 +1366,18 @@ func extractParentPeer(msg bus.InboundMessage) *routing.RoutePeer {
// generateTLDR generates a summary when the LLM returns an empty response. // generateTLDR generates a summary when the LLM returns an empty response.
// It provides context about what was processed instead of a generic message. // It provides context about what was processed instead of a generic message.
func generateTLDR(userMessage string, executedTools []string, iteration int) string { func generateTLDR(userMessage string, executedTools []string, iteration int, includeMessage bool) string {
var sb strings.Builder var result string
if len(executedTools) > 0 { if len(executedTools) > 0 {
sb.WriteString("Processed ") result = tldrWithToolsMessage(len(executedTools), strings.Join(executedTools, ", "), iteration)
sb.WriteString(strconv.Itoa(len(executedTools)))
sb.WriteString(" tool(s): ")
sb.WriteString(strings.Join(executedTools, ", "))
sb.WriteString(".")
} else { } else {
sb.WriteString("Processed your request") result = tldrNoToolsMessage(iteration)
} }
sb.WriteString(" (") if includeMessage && len(userMessage) > 0 {
sb.WriteString(strconv.Itoa(iteration)) result += tldrWithMessage(userMessage)
sb.WriteString(" iteration")
if iteration > 1 {
sb.WriteString("s")
}
sb.WriteString(")")
if len(userMessage) > 50 {
sb.WriteString(". Message: \"")
sb.WriteString(utils.Truncate(userMessage, 50))
sb.WriteString("...\"")
} else if userMessage != "" {
sb.WriteString(". Message: \"")
sb.WriteString(userMessage)
sb.WriteString("\"")
} }
return sb.String() return result
} }

View file

@ -180,6 +180,7 @@ type AgentDefaults struct {
MaxTokens int `json:"max_tokens" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOKENS"` MaxTokens int `json:"max_tokens" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOKENS"`
Temperature *float64 `json:"temperature,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_TEMPERATURE"` Temperature *float64 `json:"temperature,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_TEMPERATURE"`
MaxToolIterations int `json:"max_tool_iterations" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"` MaxToolIterations int `json:"max_tool_iterations" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"`
TLDRIncludeMessage bool `json:"tldr_include_message" env:"PICOCLAW_AGENTS_DEFAULTS_TLDR_INCLUDE_MESSAGE"`
} }
// GetModelName returns the effective model name for the agent defaults. // GetModelName returns the effective model name for the agent defaults.