Skip to main content

lha_core/
manager.rs

1use crate::RunCollectTextError;
2use crate::builder::AgentDefinition;
3use crate::input::SessionInput;
4use crate::session::AgentSession;
5use std::sync::Arc;
6use std::sync::atomic::AtomicU64;
7use std::sync::atomic::Ordering;
8
9pub struct AgentManager {
10    definition: Arc<AgentDefinition>,
11    next_session_id: AtomicU64,
12}
13
14impl AgentManager {
15    pub(crate) fn new(definition: AgentDefinition) -> Self {
16        Self {
17            definition: Arc::new(definition),
18            next_session_id: AtomicU64::new(1),
19        }
20    }
21
22    pub fn create_session(&self) -> AgentSession {
23        let session_id = self.next_session_id.fetch_add(1, Ordering::SeqCst);
24        AgentSession::new(session_id, Arc::clone(&self.definition), Vec::new())
25    }
26
27    pub async fn ask_once(&self, text: impl Into<String>) -> Result<String, RunCollectTextError> {
28        let session = self.create_session();
29        session
30            .run_collect_text(SessionInput::from_user_text(text))
31            .await
32    }
33}