agent_diva_agent/tool_config/
network.rs1use 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}