agents_runtime/agent/
config.rs1use crate::middleware::{token_tracking::TokenTrackingConfig, AgentMiddleware, HitlPolicy};
7use agents_core::agent::PlannerHandle;
8use agents_core::persistence::Checkpointer;
9use agents_core::tools::ToolBox;
10use std::collections::{HashMap, HashSet};
11use std::sync::Arc;
12
13#[derive(Default)]
29pub struct CreateDeepAgentParams {
30 pub tools: Vec<ToolBox>,
31 pub instructions: String,
32 pub middleware: Vec<Arc<dyn AgentMiddleware>>,
33 pub model: Option<Arc<dyn agents_core::llm::LanguageModel>>,
34 pub subagents: Vec<SubAgentConfig>,
35 pub context_schema: Option<String>,
36 pub checkpointer: Option<Arc<dyn Checkpointer>>,
37 pub tool_configs: HashMap<String, HitlPolicy>,
38}
39
40pub struct DeepAgentConfig {
44 pub instructions: String,
45 pub planner: Arc<dyn PlannerHandle>,
46 pub tools: Vec<ToolBox>,
47 pub subagent_configs: Vec<SubAgentConfig>,
48 pub summarization: Option<SummarizationConfig>,
49 pub tool_interrupts: HashMap<String, HitlPolicy>,
50 pub builtin_tools: Option<HashSet<String>>,
51 pub auto_general_purpose: bool,
52 pub enable_prompt_caching: bool,
53 pub checkpointer: Option<Arc<dyn Checkpointer>>,
54 pub event_dispatcher: Option<Arc<agents_core::events::EventDispatcher>>,
55 pub enable_pii_sanitization: bool,
56 pub token_tracking_config: Option<TokenTrackingConfig>,
57}
58
59impl DeepAgentConfig {
60 pub fn new(instructions: impl Into<String>, planner: Arc<dyn PlannerHandle>) -> Self {
61 Self {
62 instructions: instructions.into(),
63 planner,
64 tools: Vec::new(),
65 subagent_configs: Vec::new(),
66 summarization: None,
67 tool_interrupts: HashMap::new(),
68 builtin_tools: None,
69 auto_general_purpose: true,
70 enable_prompt_caching: false,
71 checkpointer: None,
72 event_dispatcher: None,
73 enable_pii_sanitization: true, token_tracking_config: None,
75 }
76 }
77
78 pub fn with_tool(mut self, tool: ToolBox) -> Self {
79 self.tools.push(tool);
80 self
81 }
82
83 pub fn with_subagent_config(mut self, config: SubAgentConfig) -> Self {
85 self.subagent_configs.push(config);
86 self
87 }
88
89 pub fn with_subagent_configs<I>(mut self, configs: I) -> Self
91 where
92 I: IntoIterator<Item = SubAgentConfig>,
93 {
94 self.subagent_configs.extend(configs);
95 self
96 }
97
98 pub fn with_summarization(mut self, config: SummarizationConfig) -> Self {
99 self.summarization = Some(config);
100 self
101 }
102
103 pub fn with_tool_interrupt(mut self, tool_name: impl Into<String>, policy: HitlPolicy) -> Self {
104 self.tool_interrupts.insert(tool_name.into(), policy);
105 self
106 }
107
108 pub fn with_builtin_tools<I, S>(mut self, names: I) -> Self
112 where
113 I: IntoIterator<Item = S>,
114 S: Into<String>,
115 {
116 let set: HashSet<String> = names.into_iter().map(|s| s.into()).collect();
117 self.builtin_tools = Some(set);
118 self
119 }
120
121 pub fn with_auto_general_purpose(mut self, enabled: bool) -> Self {
124 self.auto_general_purpose = enabled;
125 self
126 }
127
128 pub fn with_prompt_caching(mut self, enabled: bool) -> Self {
131 self.enable_prompt_caching = enabled;
132 self
133 }
134
135 pub fn with_checkpointer(mut self, checkpointer: Arc<dyn Checkpointer>) -> Self {
137 self.checkpointer = Some(checkpointer);
138 self
139 }
140
141 pub fn with_event_broadcaster(
143 mut self,
144 broadcaster: Arc<dyn agents_core::events::EventBroadcaster>,
145 ) -> Self {
146 if self.event_dispatcher.is_none() {
147 self.event_dispatcher = Some(Arc::new(agents_core::events::EventDispatcher::new()));
148 }
149 if let Some(dispatcher) = Arc::get_mut(self.event_dispatcher.as_mut().unwrap()) {
150 dispatcher.add_broadcaster(broadcaster);
151 }
152 self
153 }
154
155 pub fn with_event_dispatcher(
157 mut self,
158 dispatcher: Arc<agents_core::events::EventDispatcher>,
159 ) -> Self {
160 self.event_dispatcher = Some(dispatcher);
161 self
162 }
163
164 pub fn with_pii_sanitization(mut self, enabled: bool) -> Self {
173 self.enable_pii_sanitization = enabled;
174 self
175 }
176
177 pub fn with_token_tracking_config(mut self, config: TokenTrackingConfig) -> Self {
179 self.token_tracking_config = Some(config);
180 self
181 }
182}
183
184pub struct SubAgentConfig {
203 pub name: String,
205 pub description: String,
206 pub instructions: String,
207
208 pub model: Option<Arc<dyn agents_core::llm::LanguageModel>>,
210 pub tools: Option<Vec<ToolBox>>,
211 pub builtin_tools: Option<HashSet<String>>,
212 pub enable_prompt_caching: bool,
213}
214
215impl SubAgentConfig {
216 pub fn new(
218 name: impl Into<String>,
219 description: impl Into<String>,
220 instructions: impl Into<String>,
221 ) -> Self {
222 Self {
223 name: name.into(),
224 description: description.into(),
225 instructions: instructions.into(),
226 model: None,
227 tools: None,
228 builtin_tools: None,
229 enable_prompt_caching: false,
230 }
231 }
232
233 pub fn with_model(mut self, model: Arc<dyn agents_core::llm::LanguageModel>) -> Self {
235 self.model = Some(model);
236 self
237 }
238
239 pub fn with_tools(mut self, tools: Vec<ToolBox>) -> Self {
241 self.tools = Some(tools);
242 self
243 }
244
245 pub fn with_builtin_tools(mut self, tools: HashSet<String>) -> Self {
247 self.builtin_tools = Some(tools);
248 self
249 }
250
251 pub fn with_prompt_caching(mut self, enabled: bool) -> Self {
253 self.enable_prompt_caching = enabled;
254 self
255 }
256}
257
258impl IntoIterator for SubAgentConfig {
259 type Item = SubAgentConfig;
260 type IntoIter = std::iter::Once<SubAgentConfig>;
261
262 fn into_iter(self) -> Self::IntoIter {
263 std::iter::once(self)
264 }
265}
266
267#[derive(Clone)]
269pub struct SummarizationConfig {
270 pub messages_to_keep: usize,
271 pub summary_note: String,
272}