Skip to main content

agent_diva_agent/tool_config/
network.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4pub struct NetworkToolConfig {
5    #[serde(default)]
6    pub web: WebRuntimeConfig,
7}
8
9#[derive(Debug, Clone, Serialize, Deserialize, Default)]
10pub struct WebRuntimeConfig {
11    #[serde(default)]
12    pub search: WebSearchRuntimeConfig,
13    #[serde(default)]
14    pub fetch: WebFetchRuntimeConfig,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct WebSearchRuntimeConfig {
19    #[serde(default = "default_search_provider")]
20    pub provider: String,
21    #[serde(default = "default_enabled")]
22    pub enabled: bool,
23    #[serde(default)]
24    pub api_key: Option<String>,
25    #[serde(default = "default_max_results")]
26    pub max_results: u32,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct WebFetchRuntimeConfig {
31    #[serde(default = "default_enabled")]
32    pub enabled: bool,
33}
34
35fn default_enabled() -> bool {
36    true
37}
38
39fn default_search_provider() -> String {
40    "bocha".to_string()
41}
42
43fn default_max_results() -> u32 {
44    5
45}
46
47impl Default for WebSearchRuntimeConfig {
48    fn default() -> Self {
49        Self {
50            provider: default_search_provider(),
51            enabled: default_enabled(),
52            api_key: None,
53            max_results: default_max_results(),
54        }
55    }
56}
57
58impl Default for WebFetchRuntimeConfig {
59    fn default() -> Self {
60        Self {
61            enabled: default_enabled(),
62        }
63    }
64}
65
66impl WebSearchRuntimeConfig {
67    pub fn normalized_max_results(&self) -> usize {
68        let max = if self.provider.eq_ignore_ascii_case("zhipu")
69            || self.provider.eq_ignore_ascii_case("bocha")
70        {
71            50
72        } else {
73            10
74        };
75        self.max_results.clamp(1, max) as usize
76    }
77}