bamboo_engine/runtime/
agent.rs1use std::sync::Arc;
7
8use bamboo_agent_core::Session;
9
10use crate::runtime::{AgentRuntime, AgentRuntimeBuilder, ExecuteRequest};
11
12#[derive(Clone)]
24pub struct Agent {
25 runtime: Arc<AgentRuntime>,
26}
27
28impl Agent {
29 pub fn from_runtime(runtime: Arc<AgentRuntime>) -> Self {
31 Agent { runtime }
32 }
33
34 pub fn builder() -> AgentBuilder {
36 AgentBuilder::new()
37 }
38
39 pub async fn execute(
41 &self,
42 session: &mut Session,
43 req: ExecuteRequest,
44 ) -> crate::runtime::runner::Result<()> {
45 self.runtime.execute(session, req).await
46 }
47
48 pub fn storage(&self) -> &Arc<dyn bamboo_agent_core::storage::Storage> {
50 &self.runtime.storage
51 }
52}
53
54pub struct AgentBuilder {
62 inner: AgentRuntimeBuilder,
63}
64
65impl AgentBuilder {
66 pub fn new() -> Self {
67 Self {
68 inner: AgentRuntimeBuilder::new(),
69 }
70 }
71
72 pub fn storage(mut self, v: Arc<dyn bamboo_agent_core::storage::Storage>) -> Self {
73 self.inner = self.inner.storage(v);
74 self
75 }
76
77 pub fn attachment_reader(
78 mut self,
79 v: Arc<dyn bamboo_agent_core::storage::AttachmentReader>,
80 ) -> Self {
81 self.inner = self.inner.attachment_reader(v);
82 self
83 }
84
85 pub fn skill_manager(mut self, v: Arc<crate::skills::SkillManager>) -> Self {
86 self.inner = self.inner.skill_manager(v);
87 self
88 }
89
90 pub fn metrics_collector(mut self, v: crate::metrics::MetricsCollector) -> Self {
91 self.inner = self.inner.metrics_collector(v);
92 self
93 }
94
95 pub fn config(mut self, v: Arc<tokio::sync::RwLock<bamboo_infrastructure::Config>>) -> Self {
96 self.inner = self.inner.config(v);
97 self
98 }
99
100 pub fn provider(mut self, v: Arc<dyn bamboo_infrastructure::LLMProvider>) -> Self {
101 self.inner = self.inner.provider(v);
102 self
103 }
104
105 pub fn default_tools(mut self, v: Arc<dyn bamboo_agent_core::tools::ToolExecutor>) -> Self {
106 self.inner = self.inner.default_tools(v);
107 self
108 }
109
110 pub fn build(self) -> Result<Agent, &'static str> {
111 let runtime = self.inner.build()?;
112 Ok(Agent {
113 runtime: Arc::new(runtime),
114 })
115 }
116}
117
118impl Default for AgentBuilder {
119 fn default() -> Self {
120 Self::new()
121 }
122}