Skip to main content

bamboo_agent/agent/loop_module/
config.rs

1use std::sync::Arc;
2
3use crate::agent::core::budget::TokenBudget;
4use crate::agent::core::composition::CompositionExecutor;
5use crate::agent::core::storage::Storage;
6use crate::agent::core::tools::ToolSchema;
7use crate::agent::metrics::MetricsCollector;
8use crate::agent::skill::SkillManager;
9use crate::agent::tools::ToolRegistry;
10
11/// Configuration for the agent loop.
12pub struct AgentLoopConfig {
13    pub max_rounds: usize,
14    pub system_prompt: Option<String>,
15    pub additional_tool_schemas: Vec<ToolSchema>,
16    pub tool_registry: Arc<ToolRegistry>,
17    pub composition_executor: Option<Arc<CompositionExecutor>>,
18    pub skill_manager: Option<Arc<SkillManager>>,
19    /// If true, skip appending the initial user message (already present in session).
20    pub skip_initial_user_message: bool,
21    /// Optional storage for persisting session changes
22    pub storage: Option<Arc<dyn Storage>>,
23    /// Optional asynchronous metrics collector
24    pub metrics_collector: Option<MetricsCollector>,
25    /// Model name used for metrics attribution
26    pub model_name: Option<String>,
27    /// Token budget for context management (optional, defaults to model's limits)
28    pub token_budget: Option<TokenBudget>,
29}
30
31impl Default for AgentLoopConfig {
32    fn default() -> Self {
33        Self {
34            max_rounds: 50,
35            system_prompt: None,
36            additional_tool_schemas: Vec::new(),
37            tool_registry: Arc::new(ToolRegistry::new()),
38            composition_executor: None,
39            skill_manager: None,
40            skip_initial_user_message: false,
41            storage: None,
42            metrics_collector: None,
43            model_name: None,
44            token_budget: None,
45        }
46    }
47}