#[derive(Clone)]
pub struct AgentOptions {
system_prompt: String,
model: String,
base_url: String,
api_key: String,
max_turns: u32,
max_tokens: Option<u32>,
temperature: f32,
timeout: u64,
tools: Vec<Arc<Tool>>,
auto_execute_tools: bool,
max_tool_iterations: u32,
include_reasoning: bool,
hooks: Hooks,
}
impl std::fmt::Debug for AgentOptions {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("AgentOptions")
.field("system_prompt", &self.system_prompt)
.field("model", &self.model)
.field("base_url", &self.base_url)
.field("api_key", &"***")
.field("max_turns", &self.max_turns)
.field("max_tokens", &self.max_tokens)
.field("temperature", &self.temperature)
.field("timeout", &self.timeout)
.field("tools", &format!("{} tools", self.tools.len()))
.field("auto_execute_tools", &self.auto_execute_tools)
.field("max_tool_iterations", &self.max_tool_iterations)
.field("include_reasoning", &self.include_reasoning)
.field("hooks", &self.hooks)
.finish()
}
}
impl Default for AgentOptions {
fn default() -> Self {
Self {
system_prompt: String::new(),
model: String::new(),
base_url: String::new(),
api_key: "not-needed".to_string(),
max_turns: 1,
max_tokens: None,
temperature: 0.7,
timeout: 60,
tools: Vec::new(),
auto_execute_tools: false,
max_tool_iterations: 5,
hooks: Hooks::new(),
include_reasoning: false,
}
}
}
impl AgentOptions {
pub fn builder() -> AgentOptionsBuilder {
AgentOptionsBuilder::default()
}
pub fn system_prompt(&self) -> &str {
&self.system_prompt
}
pub fn model(&self) -> &str {
&self.model
}
pub fn base_url(&self) -> &str {
&self.base_url
}
pub fn api_key(&self) -> &str {
&self.api_key
}
pub fn max_turns(&self) -> u32 {
self.max_turns
}
pub fn max_tokens(&self) -> Option<u32> {
self.max_tokens
}
pub fn temperature(&self) -> f32 {
self.temperature
}
pub fn timeout(&self) -> u64 {
self.timeout
}
pub fn tools(&self) -> &[Arc<Tool>] {
&self.tools
}
pub fn auto_execute_tools(&self) -> bool {
self.auto_execute_tools
}
pub fn max_tool_iterations(&self) -> u32 {
self.max_tool_iterations
}
pub fn hooks(&self) -> &Hooks {
&self.hooks
}
pub fn include_reasoning(&self) -> bool {
self.include_reasoning
}
}