This commit is contained in:
stark 2026-03-04 20:24:50 +08:00
parent 4e502f8e11
commit b0395effcf
6 changed files with 28 additions and 17 deletions

View file

@ -115,7 +115,10 @@ func registerSharedTools(
TavilyEnabled: cfg.Tools.Web.Tavily.Enabled, TavilyEnabled: cfg.Tools.Web.Tavily.Enabled,
DuckDuckGoMaxResults: cfg.Tools.Web.DuckDuckGo.MaxResults, DuckDuckGoMaxResults: cfg.Tools.Web.DuckDuckGo.MaxResults,
DuckDuckGoEnabled: cfg.Tools.Web.DuckDuckGo.Enabled, DuckDuckGoEnabled: cfg.Tools.Web.DuckDuckGo.Enabled,
PerplexityAPIKeys: config.MergeAPIKeys(cfg.Tools.Web.Perplexity.APIKey, cfg.Tools.Web.Perplexity.APIKeys), PerplexityAPIKeys: config.MergeAPIKeys(
cfg.Tools.Web.Perplexity.APIKey,
cfg.Tools.Web.Perplexity.APIKeys,
),
PerplexityMaxResults: cfg.Tools.Web.Perplexity.MaxResults, PerplexityMaxResults: cfg.Tools.Web.Perplexity.MaxResults,
PerplexityEnabled: cfg.Tools.Web.Perplexity.Enabled, PerplexityEnabled: cfg.Tools.Web.Perplexity.Enabled,
GLMSearchAPIKey: cfg.Tools.Web.GLMSearch.APIKey, GLMSearchAPIKey: cfg.Tools.Web.GLMSearch.APIKey,

View file

@ -293,7 +293,7 @@ func TestDefaultConfig_WebTools(t *testing.T) {
if cfg.Tools.Web.Brave.MaxResults != 5 { if cfg.Tools.Web.Brave.MaxResults != 5 {
t.Error("Expected Brave MaxResults 5, got ", cfg.Tools.Web.Brave.MaxResults) t.Error("Expected Brave MaxResults 5, got ", cfg.Tools.Web.Brave.MaxResults)
} }
if cfg.Tools.Web.Brave.APIKeys != "" { if len(cfg.Tools.Web.Brave.APIKeys) != 0 {
t.Error("Brave API key should be empty by default") t.Error("Brave API key should be empty by default")
} }
if cfg.Tools.Web.DuckDuckGo.MaxResults != 5 { if cfg.Tools.Web.DuckDuckGo.MaxResults != 5 {

View file

@ -332,13 +332,13 @@ func DefaultConfig() *Config {
Brave: BraveConfig{ Brave: BraveConfig{
Enabled: false, Enabled: false,
APIKey: "", APIKey: "",
APIKeys: []string{"YOUR_BRAVE_API_KEY"}, APIKeys: nil,
MaxResults: 5, MaxResults: 5,
}, },
Tavily: TavilyConfig{ Tavily: TavilyConfig{
Enabled: false, Enabled: false,
APIKey: "", APIKey: "",
APIKeys: []string{"YOUR_TAVILY_API_KEY"}, APIKeys: nil,
MaxResults: 5, MaxResults: 5,
}, },
DuckDuckGo: DuckDuckGoConfig{ DuckDuckGo: DuckDuckGoConfig{
@ -348,7 +348,7 @@ func DefaultConfig() *Config {
Perplexity: PerplexityConfig{ Perplexity: PerplexityConfig{
Enabled: false, Enabled: false,
APIKey: "", APIKey: "",
APIKeys: []string{"YOUR_PERPLEXITY_API_KEY"}, APIKeys: nil,
MaxResults: 5, MaxResults: 5,
}, },
GLMSearch: GLMSearchConfig{ GLMSearch: GLMSearchConfig{

View file

@ -717,18 +717,18 @@ type WebToolsConfig struct {
} }
type BraveConfig struct { type BraveConfig struct {
Enabled bool `json:"enabled"` Enabled bool `json:"enabled"`
APIKey string `json:"api_key"` APIKey string `json:"api_key"`
APIKeys []string `json:"api_keys"` APIKeys []string `json:"api_keys"`
MaxResults int `json:"max_results"` MaxResults int `json:"max_results"`
} }
type TavilyConfig struct { type TavilyConfig struct {
Enabled bool `json:"enabled"` Enabled bool `json:"enabled"`
APIKey string `json:"api_key"` APIKey string `json:"api_key"`
APIKeys []string `json:"api_keys"` APIKeys []string `json:"api_keys"`
BaseURL string `json:"base_url"` BaseURL string `json:"base_url"`
MaxResults int `json:"max_results"` MaxResults int `json:"max_results"`
} }
type DuckDuckGoConfig struct { type DuckDuckGoConfig struct {
@ -737,10 +737,10 @@ type DuckDuckGoConfig struct {
} }
type PerplexityConfig struct { type PerplexityConfig struct {
Enabled bool `json:"enabled"` Enabled bool `json:"enabled"`
APIKey string `json:"api_key"` APIKey string `json:"api_key"`
APIKeys []string `json:"api_keys"` APIKeys []string `json:"api_keys"`
MaxResults int `json:"max_results"` MaxResults int `json:"max_results"`
} }
type CronConfig struct { type CronConfig struct {

View file

@ -604,7 +604,11 @@ func NewWebSearchTool(opts WebSearchToolOptions) (*WebSearchTool, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create HTTP client for Perplexity: %w", err) return nil, fmt.Errorf("failed to create HTTP client for Perplexity: %w", err)
} }
provider = &PerplexitySearchProvider{keyPool: NewAPIKeyPool(opts.PerplexityAPIKeys), proxy: opts.Proxy, client: client} provider = &PerplexitySearchProvider{
keyPool: NewAPIKeyPool(opts.PerplexityAPIKeys),
proxy: opts.Proxy,
client: client,
}
if opts.PerplexityMaxResults > 0 { if opts.PerplexityMaxResults > 0 {
maxResults = opts.PerplexityMaxResults maxResults = opts.PerplexityMaxResults
} }

View file

@ -269,7 +269,11 @@ func TestWebTool_WebSearch_NoApiKey(t *testing.T) {
// TestWebTool_WebSearch_MissingQuery verifies error handling for missing query // TestWebTool_WebSearch_MissingQuery verifies error handling for missing query
func TestWebTool_WebSearch_MissingQuery(t *testing.T) { func TestWebTool_WebSearch_MissingQuery(t *testing.T) {
tool, err := NewWebSearchTool(WebSearchToolOptions{BraveEnabled: true, BraveAPIKeys: []string{"test-key"}, BraveMaxResults: 5}) tool, err := NewWebSearchTool(WebSearchToolOptions{
BraveEnabled: true,
BraveAPIKeys: []string{"test-key"},
BraveMaxResults: 5,
})
if err != nil { if err != nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }