From de0b559fe8ec59b703a2939386092b46147f7c43 Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Tue, 6 Jan 2026 19:30:40 +0100 Subject: [PATCH] chore: add the delay, and log web search on debug --- internal/agent/tools/search.go | 27 ++++++++++++++++++++------- internal/agent/tools/web_search.go | 3 +++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/internal/agent/tools/search.go b/internal/agent/tools/search.go index b43cc87f71c8b7b03453e9b5f2b77f266149fa59..9df7be8764ab952a23f25d624f72748696a86aac 100644 --- a/internal/agent/tools/search.go +++ b/internal/agent/tools/search.go @@ -7,7 +7,9 @@ import ( "math/rand/v2" "net/http" "net/url" + "slices" "strings" + "sync" "time" "golang.org/x/net/html" @@ -145,10 +147,8 @@ func parseLiteSearchResults(htmlContent string, maxResults int) ([]SearchResult, func hasClass(n *html.Node, class string) bool { for _, attr := range n.Attr { if attr.Key == "class" { - for _, c := range strings.Fields(attr.Val) { - if c == class { - return true - } + if slices.Contains(strings.Fields(attr.Val), class) { + return true } } } @@ -200,7 +200,20 @@ func formatSearchResults(results []SearchResult) string { return sb.String() } -// AddSearchDelay adds a small random delay between consecutive searches. -func AddSearchDelay() { - time.Sleep(time.Duration(500+rand.IntN(1500)) * time.Millisecond) +var ( + lastSearchMu sync.Mutex + lastSearchTime time.Time +) + +// maybeDelaySearch adds a random delay if the last search was recent. +func maybeDelaySearch() { + lastSearchMu.Lock() + defer lastSearchMu.Unlock() + + minGap := time.Duration(500+rand.IntN(1500)) * time.Millisecond + elapsed := time.Since(lastSearchTime) + if elapsed < minGap { + time.Sleep(minGap - elapsed) + } + lastSearchTime = time.Now() } diff --git a/internal/agent/tools/web_search.go b/internal/agent/tools/web_search.go index b604c9051b4f5b0039431c01bea0b150a318740e..5ce9280c013cdd100f6d7734c969723b21e7e3bf 100644 --- a/internal/agent/tools/web_search.go +++ b/internal/agent/tools/web_search.go @@ -3,6 +3,7 @@ package tools import ( "context" _ "embed" + "log/slog" "net/http" "time" @@ -41,7 +42,9 @@ func NewWebSearchTool(client *http.Client) fantasy.AgentTool { maxResults = 20 } + maybeDelaySearch() results, err := searchDuckDuckGo(ctx, client, params.Query, maxResults) + slog.Debug("Web search completed", "query", params.Query, "results", len(results), "err", err) if err != nil { return fantasy.NewTextErrorResponse("Failed to search: " + err.Error()), nil }