bamboo_server/app_state/
agent_session_context.rs1use std::collections::HashMap;
9use std::sync::Arc;
10
11use async_trait::async_trait;
12use tokio::sync::{broadcast, RwLock};
13
14use bamboo_agent_core::storage::Storage;
15use bamboo_agent_core::{AgentEvent, Session};
16use bamboo_domain::ProviderModelRef;
17use bamboo_engine::app_context::AgentSessionContext;
18use bamboo_engine::events::AccountEventSink;
19use bamboo_engine::runtime::execution::runner_state::AgentRunner;
20use bamboo_llm::{Config, LLMProvider, ProviderRegistry};
21use bamboo_storage::LockedSessionStore;
22
23use super::AppState;
24
25#[async_trait]
26impl AgentSessionContext for AppState {
27 fn sessions(&self) -> &bamboo_engine::SessionCache {
28 &self.sessions
29 }
30
31 fn storage(&self) -> &Arc<dyn Storage> {
32 &self.storage
33 }
34
35 fn persistence(&self) -> &Arc<LockedSessionStore> {
36 &self.persistence
37 }
38
39 fn agent_runners(&self) -> &Arc<RwLock<HashMap<String, AgentRunner>>> {
40 &self.agent_runners
41 }
42
43 fn account_sink(&self) -> &Arc<AccountEventSink> {
44 &self.account_sink
45 }
46
47 fn config(&self) -> &Arc<RwLock<Config>> {
48 &self.config
49 }
50
51 fn provider_registry(&self) -> &Arc<ProviderRegistry> {
52 &self.provider_registry
53 }
54
55 async fn get_session_event_sender(&self, session_id: &str) -> broadcast::Sender<AgentEvent> {
56 AppState::get_session_event_sender(self, session_id).await
57 }
58
59 async fn load_session_merged(&self, session_id: &str) -> Option<Session> {
60 AppState::load_session_merged(self, session_id).await
61 }
62
63 async fn save_and_cache_session(&self, session: &mut Session) {
64 AppState::save_and_cache_session(self, session).await
65 }
66
67 async fn get_provider(&self) -> Arc<dyn LLMProvider> {
68 AppState::get_provider(self).await
69 }
70
71 fn get_provider_for_model_ref(
72 &self,
73 target: &ProviderModelRef,
74 ) -> Option<Arc<dyn LLMProvider>> {
75 AppState::get_provider_for_model_ref(self, target).ok()
76 }
77
78 async fn get_provider_for_endpoint(&self, provider_name: &str) -> Option<Arc<dyn LLMProvider>> {
79 AppState::get_provider_for_endpoint(self, provider_name)
80 .await
81 .ok()
82 }
83
84 fn title_gen_acquire(&self, session_id: &str) -> bool {
85 AppState::title_gen_acquire(self, session_id)
86 }
87
88 fn title_gen_release(&self, session_id: &str) {
89 AppState::title_gen_release(self, session_id)
90 }
91}