Address Copilot review feedback for Exa search provider

- Add explicit empty-results handling ("No results for: <query>")
- Add "Results for: <query> (via Exa)" header and align per-result
  format with Brave/Tavily/DuckDuckGo/Perplexity
- Add tests: provider priority (Perplexity > Exa > Brave), proxy
  propagation, successful search with header/attribution, empty
  results, and max-results capping

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
I Putu Eddy Irawan
2026-03-02 22:43:43 +07:00
parent 4b7e8d9cb9
commit 8219b5a26f
2 changed files with 225 additions and 5 deletions
+9 -5
View File
@@ -768,22 +768,26 @@ func (p *ExaSearchProvider) Search(ctx context.Context, query string, count int)
return "", fmt.Errorf("exa: parse error: %w", err)
}
var sb strings.Builder
if len(result.Results) == 0 {
return fmt.Sprintf("No results for: %s", query), nil
}
var lines []string
lines = append(lines, fmt.Sprintf("Results for: %s (via Exa)", query))
maxResults := count
if maxResults > len(result.Results) {
maxResults = len(result.Results)
}
for i, r := range result.Results[:maxResults] {
sb.WriteString(fmt.Sprintf("%d. %s\n URL: %s\n", i+1, r.Title, r.URL))
lines = append(lines, fmt.Sprintf("%d. %s\n %s", i+1, r.Title, r.URL))
if r.Text != "" {
snippet := r.Text
if len(snippet) > 200 {
snippet = snippet[:200] + "..."
}
sb.WriteString(fmt.Sprintf(" %s\n", snippet))
lines = append(lines, fmt.Sprintf(" %s", snippet))
}
sb.WriteString("\n")
}
return sb.String(), nil
return strings.Join(lines, "\n"), nil
}