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