agents_runtime/agent/
config.rs1use crate::middleware::{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}
55
56impl DeepAgentConfig {
57 pub fn new(instructions: impl Into<String>, planner: Arc<dyn PlannerHandle>) -> Self {
58 Self {
59 instructions: instructions.into(),
60 planner,
61 tools: Vec::new(),
62 subagent_configs: Vec::new(),
63 summarization: None,
64 tool_interrupts: HashMap::new(),
65 builtin_tools: None,
66 auto_general_purpose: true,
67 enable_prompt_caching: false,
68 checkpointer: None,
69 }
70 }
71
72 pub fn with_tool(mut self, tool: ToolBox) -> Self {
73 self.tools.push(tool);
74 self
75 }
76
77 pub fn with_subagent_config(mut self, config: SubAgentConfig) -> Self {
79 self.subagent_configs.push(config);
80 self
81 }
82
83 pub fn with_subagent_configs<I>(mut self, configs: I) -> Self
85 where
86 I: IntoIterator<Item = SubAgentConfig>,
87 {
88 self.subagent_configs.extend(configs);
89 self
90 }
91
92 pub fn with_summarization(mut self, config: SummarizationConfig) -> Self {
93 self.summarization = Some(config);
94 self
95 }
96
97 pub fn with_tool_interrupt(mut self, tool_name: impl Into<String>, policy: HitlPolicy) -> Self {
98 self.tool_interrupts.insert(tool_name.into(), policy);
99 self
100 }
101
102 pub fn with_builtin_tools<I, S>(mut self, names: I) -> Self
106 where
107 I: IntoIterator<Item = S>,
108 S: Into<String>,
109 {
110 let set: HashSet<String> = names.into_iter().map(|s| s.into()).collect();
111 self.builtin_tools = Some(set);
112 self
113 }
114
115 pub fn with_auto_general_purpose(mut self, enabled: bool) -> Self {
118 self.auto_general_purpose = enabled;
119 self
120 }
121
122 pub fn with_prompt_caching(mut self, enabled: bool) -> Self {
125 self.enable_prompt_caching = enabled;
126 self
127 }
128
129 pub fn with_checkpointer(mut self, checkpointer: Arc<dyn Checkpointer>) -> Self {
131 self.checkpointer = Some(checkpointer);
132 self
133 }
134}
135
136pub struct SubAgentConfig {
155 pub name: String,
157 pub description: String,
158 pub instructions: String,
159
160 pub model: Option<Arc<dyn agents_core::llm::LanguageModel>>,
162 pub tools: Option<Vec<ToolBox>>,
163 pub builtin_tools: Option<HashSet<String>>,
164 pub enable_prompt_caching: bool,
165}
166
167impl SubAgentConfig {
168 pub fn new(
170 name: impl Into<String>,
171 description: impl Into<String>,
172 instructions: impl Into<String>,
173 ) -> Self {
174 Self {
175 name: name.into(),
176 description: description.into(),
177 instructions: instructions.into(),
178 model: None,
179 tools: None,
180 builtin_tools: None,
181 enable_prompt_caching: false,
182 }
183 }
184
185 pub fn with_model(mut self, model: Arc<dyn agents_core::llm::LanguageModel>) -> Self {
187 self.model = Some(model);
188 self
189 }
190
191 pub fn with_tools(mut self, tools: Vec<ToolBox>) -> Self {
193 self.tools = Some(tools);
194 self
195 }
196
197 pub fn with_builtin_tools(mut self, tools: HashSet<String>) -> Self {
199 self.builtin_tools = Some(tools);
200 self
201 }
202
203 pub fn with_prompt_caching(mut self, enabled: bool) -> Self {
205 self.enable_prompt_caching = enabled;
206 self
207 }
208}
209
210impl IntoIterator for SubAgentConfig {
211 type Item = SubAgentConfig;
212 type IntoIter = std::iter::Once<SubAgentConfig>;
213
214 fn into_iter(self) -> Self::IntoIter {
215 std::iter::once(self)
216 }
217}
218
219#[derive(Clone)]
221pub struct SummarizationConfig {
222 pub messages_to_keep: usize,
223 pub summary_note: String,
224}