WIP push-to-talk Letta chat frontend
1use std::sync::Arc;
2
3use tauri::Wry;
4use tauri_plugin_http::reqwest::Client;
5use tauri_plugin_store::Store;
6
7use crate::{
8 cartesia::{client::CartesiaClient, stt::SttManager, tts::TtsManager},
9 devices::{input::InputDeviceManager, output::OutputDeviceManager, types::AudioDeviceError},
10 letta::LettaManager,
11 secrets::SecretsManager,
12};
13
14pub struct AppState {
15 pub cartesia_client: Arc<CartesiaClient>,
16 pub stt_manager: Arc<SttManager>,
17 pub tts_manager: Arc<TtsManager>,
18 pub letta_manager: Arc<LettaManager>,
19 pub secrets_manager: Arc<SecretsManager>,
20 pub input_device_manager: Arc<InputDeviceManager>,
21 pub output_device_manager: Arc<OutputDeviceManager>,
22}
23
24impl AppState {
25 pub fn new(store: Arc<Store<Wry>>) -> Result<Self, AudioDeviceError> {
26 let input_device_manager = Arc::new(InputDeviceManager::new()?);
27 let output_device_manager = Arc::new(OutputDeviceManager::new()?);
28 let secrets_manager = Arc::new(SecretsManager::new());
29
30 let http_client = Client::new();
31 let letta_manager = Arc::new(LettaManager::new(
32 http_client,
33 store.clone(),
34 secrets_manager.clone(),
35 ));
36
37 let cartesia_client = Arc::new(CartesiaClient::new(secrets_manager.clone()));
38 let stt_manager = Arc::new(SttManager::new(
39 cartesia_client.clone(),
40 input_device_manager.clone(),
41 ));
42 let tts_manager = Arc::new(TtsManager::new(cartesia_client.clone()));
43
44 Ok(AppState {
45 input_device_manager,
46 output_device_manager,
47 secrets_manager,
48 letta_manager,
49 cartesia_client,
50 stt_manager,
51 tts_manager,
52 })
53 }
54}